Posts tagged "firefox"

選択肢があるという状況自体が自由を意味し、ユーザーがさまざまな動機でFirefoxを選んでいることは、現在においても何ら変わりがない。にもかかわらず、Firefoxを選ぶことに価値を結びつけるとすれば、排他的な対外的イメージを生じることにならないだろうか。

考えてみてほしい。たとえば、Internet ExplorerやChromeやSafariを、標準でインストールされているという理由で使い続け、あるいは自らダウンロードして選ぶことは、それだけで不自由と依存を選んだことになるのだろうか。Android OSやChromiumの開発に外部から貢献したら、Googleの支配に手を貸したことになるのだろうか。もちろん、Mozillaがそのような極論を述べているわけではないが、Firefoxを選ぶことが自由と自立を選ぶことになると位置づければ、必然的に別の選択(不作為を含む)にネガティブな意味を付与することになる。

そうして生じた排他的なイメージは、キャンペーンの意図に反して、ユーザーを遠ざけることになりかねない。だからこそ、Mozillaコミュニティが価値を担い、そのような価値を実現する目的でFirefoxを開発する一方で、Firefox自体は価値中立的なソフトウェアであり続けるという役割分担が重要になってくる。

xkansan:
“xkansan:
“アイテム: 大炎上 - データベース: AutoPagerize - wedata
• https://twitter.com/Tanookirby/status/510983731335933952
• https://twitter.com/jigendaddy/status/511119078811914240
•...

xkansan:

xkansan:

アイテム: 大炎上 - データベース: AutoPagerize - wedata

この辺の原因になっていた(と思われる)、urlの正規表現に間違いのあったSITEINFOを修正した。

AutoPagerize動かないという人は、SITEINFOを更新すると正常にページを継ぎ足すようになるはず。 Firefox Add-on版の場合は、「ツール」→「アドオン」からAutoPagerizeの「詳細」を開き、「Open AutoPagerize preferences」から「update siteinfo」という手順でSITEINFOを更新できる。

とはいえ正規表現を少し間違えることが AutoPagerize 全体の動きに影響するというのは、気軽に SITEINFO を投稿する妨げになる気がする。なのでそうならないように変更したものを pull request として投げたところその日のうちに merge された(ありがとうございました)。 https://github.com/swdyh/autopagerize_for_firefox/pull/14

というわけで、 0.9.17 以降の AutoPagerize では、仮に url の正規表現に構文エラーが含まれていても全体の動作が止まるということはなくなった。一応ここで報告。

dorelax:

ようやくTombfixでPostできない原因がわかったのでメモ。「サードパーティーCookieの保存」設定が原因だった。

・Tombfixの使い方はTumblr専門で、Post先はTumblr以外は切っている。他の設定はデフォルトのまま。
・Firefoxを27.0.0にアップデートして、そのタイミングでTombfixも同時にアップデートしたときから、Postしようとすると「ログインしていません models.js云々」と表示される。27.0.1にTombfix0.1.3になるまでずっと同様の現象発生。
・試したこと。Tombfixの再インストール。Profilesフォルダをきれいにして再インストール。他のアドオンの無効化。設定の初期化(全Post先の有効化)。そういう設定を変えるたびにTumblrをログアウトしてブラウザ再起動もしていたけど駄目。
・どうも違うようなのでFirefoxの設定を疑って、ツール>オプション>プライバシーの中にある。「サードパーティーCookieの保存」設定を「常に拒否」から「常に許可」に変更したところ、Postに成功する。「訪問したサイトのみ許可」でも大丈夫。
・保存されているクッキーが足りないのかとおもって例外サイトを追加したが、「常に拒否」の設定ではどれだけ例外サイトを追加しても駄目。逆に、例外サイトを空にして、「訪問したサイトのみ許可」で少ないクッキーになった場合はPostに成功する。

どうもFirefoxの27から、「常に拒否」を設定している場合にアドオンがクッキーの情報を利用できないようになっているような気配。これで快適なTumblr生活がもどってきましたよ。作者に感謝。Tombfixを疑ってごめんなさい。

ちなみにおまけ。この設定をいろいろ試してTumblrに短時間で何度もログインしていたら、メールアドレスとパスワードが正しいはずなのにログインを蹴られた。たぶん、短時間で繰返しログインするのはパスワードを試そうとする悪いやつと認定して、ログイン情報が合っていても一度は蹴るような実装になっている模様。こういうセキュリティの高め方もあることが分かってTumblrクール。

FirefoxアドオンのTomblooのメンテナンスをしていく派生版「Tombfix」を正式にリリースします

1週間ほど前より、FirefoxアドオンのTomblooのメンテナンスを目的とする派生版「Tombfix」の開発を行なっていましたが、まもなく行われるFirefox 22.0のリリースによってTomblooの設定がしにくくなる不具合が顕在化するのを機に、Tombfixを正式にリリースする事にしました。まだまだ様々な不具合がありますので積極的におすすめはできませんが、もしよろしければ使ってみてください。

インストール方法はRepositoryのREADMEに書いてあります。READMEの他の項目についても確認してみてください。

実際に使用してみて、GitHubのIssuesに報告されていない不具合、要望などがありましたら、そちらに報告してくださるとありがたいです。

Tomblooとの主な違い

  • Firefox 22.0以上で設定ダイアログの「デフォルトのポスト先」でチェックマークが表示されない不具合を修正
  • Firefox 23.0以上でコンテキストメニューの「Share…」のサブメニューが表示されない不具合を修正
  • 設定ダイアログではてなブックマークのアイコンが巨大になってデザインが崩れていた不具合を修正
  • 設定ダイアログのPocketのアイコンのサイズを修正
  • Instapaper、Gyazo、Readability、Favesのアイコンを更新
  • サービス終了したMento、Ping.fm、livedoor クリップ、Wassr、clipp、Picoolio.co.ukの対応を終了
  • TumblrのDashboardなどでReblogできるように対応を更新
  • TumblrのTwitter/Facebook連携が行われるように修正
  • Deliciousの対応を全面的に更新
  • Tumblrへのポストにデフォルトでソース情報を付ける機能を実装

詳細はこちらをご覧ください。上記のいくつかの更新は、polygonplanetさんのTomblooのパッチや、ConstellationさんのTaberareloo(Chrome版Tombloo)の実装を参考にしました。この場を借りてお礼を申し上げます。

なぜTomblooから派生するのか

3週間ほど前、Tomblooの中心的な開発者であるtoさんが、現在Tumblrなどのサービスの仕様変更にすぐに対応する事が難しく、Tomblooの派生版を作った方が良いのではないかという事をTwitter上で発言されました(該当の発言は現在残っていないようです(参考))。過去にTomblooの開発に関わり現在はTaberarelooの開発に関わっているYungSangさんや数多くのパッチを開発しているpolygonplanetさん、endless summer on dsbdなどを開発されているtaizoooさん達のように、現在もTomblooと関わりを持つ人達が開発を引き継ぐような形も難しい状況のようです。

このままではFirefox 22、23でTomblooの利用に関して致命的な不具合が発生し、それがすぐには修正されない事態になってしまいます。そこで以前、Tomblooの不具合を修正した事がある私が、わからない事ばかりでも派生版の開発をやってみようと考えました。

今後について

今後、さらなる不具合の修正を行ったり、既存のサービスの対応を更新したり、ブラウザーの更新に対応したり、多くのユーザーにとって役立ちそうなパッチを本体に取り込んでみたり、といった事を考えていますが、どれ一つとっても私一人だけでは難しい事がこの1週間ほどでわかってきました。私はTaberarelooの開発にも関わっているのですが、Taberarelooに関しても、もはやたった一人で維持していく事は困難で、複数人で関わっていく必要があるという状況になっています。

このままでは遅かれ早かれTombfixもTomblooと同様、開発が停滞していく事になってしまうかもしれません(そうなった場合、その後もTombloo/Tombfixの機能を利用したい人は現在rikuta0209さんによって開発されているFirefoxアドオンのTobelooか、Taberarelooへ移行する事になるでしょう。Taberarelooへ移行する場合、ブラウザーの利用形態もFirefoxとChromeの併用か、Chromeへの移行という形になるかもしれません。)。

このような事態を避ける為にも、Tomblooを利用していたり、Tomblooに興味を持っている人にはぜひ開発に参加してもらえればと思っています(特にパッチを書いている人やTomblooが対応している特定のサービスを日常的に利用している人など)。

GitHub上で開発しているので、継続的に開発に参加できる人にはRepositoryへのpush権限を持つCollaboratorになってもらい、Pull Requestを経由せずにすぐにRepositoryに変更を反映させる(Code Reviewが必要そうであればPull Requestしてもらう)という形を考えています。

開発に関して他に何か不明な点がありましたらTwitterメールでお知らせください。

Tombfixのパッチに関しては別の記事に書きました。

“それ見ろ、多機能の Tab Mix Plus のような拡張を使うとこういうとき困るだろうという声が聞こえるが、単独の機能の拡張を沢山集めて見てもこれまでの所満足できなかったのである.その全ての拡張が何時もアップデートしてくれるなら良いのであるが実際はそんなことはなく、あれがないこれがないで困るのである.拡張の作者さんの覚悟が違うのではないかと思う.Tab Mix Plus のように多機能でユーザーが多ければそれだけ責任が生じてこまめにアップデートしてくれるが単機能であれば黙って開発を止めちゃっても良いかと云うことになるのかも知れない.割と単機能でアップデートされない拡張が多い.豆にアップデートが来るのは多機能の拡張である.”
“このようなことを踏まえて、アドバイスさせて頂くと、シンプルな単機能アドオンで、しかも、ユーザインターフェース自体を変更してしまわないものを必要な数だけ入れておくと、意外と1年以上、どのアドオンも問題が出ることなく動き続けたりします。 徹底的にその時点で理想的なブラウザをアドオンを大量に使って実現するのもひとつの手ですが、無理のない範囲で、そこそこ自分に適した環境を作り上げることができれば、トラブルの無い生活をおくれます。 その時点で実現できる自分にとっての理想的なブラウザを徹底的に求めるというのは、確かにFirefox最大の利点であり、これも楽しみの一つではあります。ですが、理想を追求した環境を維持するコストは実は非常に大きなものであるということも理解した上で、多少無理のあることをしているアドオンを採用するかどうするかを判断していただきたいと思います。”

Mozilla Test Pilot ツールを使って、Firefox ユーザが新しいタブをどのように使っているか、調査を開始しました。その結果、平均的な Firefox ユーザは毎日 11 個新しいタブを開いており、新しいタブ 1 つにつき 7 ページを読み込み、2 つの固有ドメインを訪れるということが分かりました。新しいタブには、ユーザが閉じる前に、平均して 2 つのページが読み込まれていました。

こうした調査から私たちが学んだことは、ユーザは新しいタブを何度も開いているものの、そこから少数のよく訪れるサイトへ戻る可能性がとても高いという実態でした。そのため、最もよく訪れるサイトへすばやくアクセスできる機能を新しいタブ上で提供してみることにしたのです。

Firefox拡張 Add-on SDK simple-prefsを使って設定画面を作る

swdyh:

Add-on SDKのsimple-prefsモジュールを使って簡易な設定画面を作ってみる。SDKのドキュメントは情報が少ないので、Add-ons Blogの記事も見るわかりやすい。

Just Landed: Simple Prefs API | Mozilla Add-ons Blog
http://blog.mozilla.org/addons/2011/12/08/just-landed-simple-prefs-api/

simple-prefs-on SDK Documentation
https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/simple-prefs.html

設定画面の作り方は、package.jsonに設定項目の情報を書いておくだけ。アドオンの詳細画面に設定項目が追加される。

package.json

{
    "id": "jid1-7wBt2LagLajA6Q",
    "name": "fx-addon-prefs-example",
    "fullName": "fx-addon-prefs-example",
    "author": "swdyh",
    "version": "0.0.1",
    "preferences": [{
        "name": "somePreference",
        "title": "Some preference title",
        "description": "Some short description for the preference",
        "type": "string",
        "value": "this is the default string value"
    }]
}


この設定画面で設定された値はユーザが変更するたびに自動でFirefoxに保存されるので、あとは設定が変更されたときの処理をイベントリスナーで書いておけば終わり。

main.js

var prefs = require('simple-prefs')
exports.main = function() {
    prefs.on('stringPreference', function(name) {
        console.log('pref changed.', name, prefs.prefs[name])
    })
}


integerやboolでも使い方はstringと同じ。boolはチェックボックスになる。

{
    "type": "bool",
    "name": "boolPreference",
    "value": true,
    "title": "Boolean Pref"
},
{
    "type": "integer",
    "name": "intPreference",
    "value": 42,
    "title": "Integer Pref"
},


ドキュメントには今のところ、integer、bool、stringの3種類と書いてあるけれど、ソースを見るとさらにいくつかtypeが利用できそうだった。ファイルやディレクトリの選択、色の選択など。

VALID_PREF_TYPES = ['bool', 'boolint', 'integer', 'string', 'color', 'file',
                    'directory', 'control']

https://github.com/mozilla/addon-sdk/blob/master/python-lib/cuddlefish/options_xul.py

それからcontrolというのは、ボタンが配置されるだけで、他のもののように設定値が保存されることはないけれど、そのボタンが押された時になにか処理を実行するということができる。

{
    "type": "control",
    "name": "controlPreference",
    "label": "controlPref",
    "title": "Control Pref"
}


ボタンが押されたときの処理を追加するのは、設定値の変更と同じようにイベントリスナーを追加しておけばいい。

main.js

var prefs = require('simple-prefs')
exports.main = function() {
    prefs.on('controlPreference', function(name) {
        console.log('pressed controlPreference')
    })
}


simple-prefsという名前の通り、単純な設定であればこれを使うとすごく楽にできる。これでできない範囲のものは、自分でhtmlなりxulなりで書くことになると思う。AutoPagerizeはすでにHTMLで設定画面を作ってあったのとtextareaを使いたいので、controlを使ってそれを表示するボタンだけを設置することにした。

 非営利組織であるMozillaは、Microsoftに対し、ARMプロセッサ搭載端末向けにMicrosoftが提供予定のOS「Windows RT」上で「Internet Explorer」以外の本格的なブラウザが動作することを許可するように強く求めているが、Googleが今回、この動きに対する支持を表明した。

 Mozillaは、Windows RT向けに競合する「Firefox」のバージョンを開発できないようにしているとして、Microsoftの決断に反対している。「Internet Explorer 10」(IE10)以外のブラウザがIE10と同じOS機能にアクセスできないというこの状況は、これまでにもあったブラウザを巡る争いを思い出させる。かつてはこの争いが、最終的には米国および欧州において政府を巻き込んだ独占禁止法違反訴訟にまで発展した。

Firefoxが使用しているメモリを自動開放して軽量化するソフト「MetaboFix」 | フリーソフト,Windows PC活用情報局

そもそもfirebugはJoe Hewittが作ったもので、彼はFirefoxの開発メンバーの一人でもあった。で、Netscape崩壊後、自分の会社を持ってたけどfacebookに買収されてそこで働いてた (最近辞めたらしいけど)。facebookに行ったあとはfirebugにそんなに関わってなかったと思うけど。

firebugは一人で始めたものでもあったのだけど、その後Firebug Working Groupが開発を行うことになって複数のメンバで開発が行われている。オープンソースではこういうことはよくあって、自分がコードを書き始めたけど自然と参加するメンバーが増えていって、開発が複数人になる。そのときにコアのメンバーが抜けたとしても、それをフォローする人がいればそのプロジェクトは当然続くし、新たな機能が追加されていく。これがオープンソースにおける重要なポイントでもあるし、MozillaというかFirefoxが未だプロジェクトとして続いているのはこのポイントでもあると思う。そもそもFirefoxプロジェクト始めた張本人(Blake RossとかDavid Hyattとか!)は誰もMozillaにいないしね。

また、たとえばLinuxを例にとれば、LinusがLinuxから離れていってもLinuxは終わらないであろう。そこでLinuxが終わったという人はたぶんFUDを流したいMicrosoftとか敵対している人たちでしかないとは思うけどね。

(中略)

また、MozillaはFirefoxに開発者ツールを入れようとしてるけど、これはfirebugを殺すためなの?って思う人がいるかとは思うけど、それは違う。Mozillaの考えで開発者ツールを作るけど、これも選択肢があった方がいいと思ってる。そもそもfirebugやってるhonzaはDeveloepr Toolsチームの一員としてfirebugをやってるんで、別に殺すつもりも全くないし、競争が力を生むと思ってる。

XMLHttpRequest で same origin から cross origin にリダイレクトする際の挙動について

xkansan:

現時点では XMLHttpRequest を使った際に same origin から cross origin へリダイレクトが発生するリクエストがエラーにならないのは, Firefox と IE10 (Platform Preview 4) くらいだけれど (参考:http://samples.msdn.microsoft.com/ietestcenter/#cors), その2つの間にも若干挙動の違いがあったのでメモ.

確認の為に用いたのは,

  • Firefox 10: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
  • Internet Explorer 10: Windows Internet Explorer Platform Preview, version 2.10.8103.0 (Internet Explorer version 10.0.8103.0)

具体的に違いがあるのは,カスタムヘッダを追加してリクエストを出したり, XMLHttpRequestUpload オブジェクトにイベントリスナを登録しているような場合. 要は CORS で preflight が必要だとされている条件を満たしている場合.

いろいろ説明するよりも,実際に試した方が早いのでテストケースを挙げる. -> http://misc-xkyrgyzstan.dotcloud.com/xhr/redirect-from-same-origin

このページが何をするかというと,アクセスした際に

  • カスタムヘッダなし, XMLHttpRequestUpload オブジェクトにイベントリスナが登録されていない場合
  • X-Requested-With: XMLHttpRequest というカスタムヘッダを追加してリクエストした場合
  • req.upload.addEventListener('load', function (e) {}, false) として XMLHttpRequestUpload オブジェクトにイベントリスナを登録してからリクエストを出した場合

のそれぞれで, XMLHttpRequest のリクエスト先が same origin から cross origin へリダイレクトする場合の挙動を調べている. リダイレクト先のページは, Access-Control-Allow-Origin: * をヘッダに出力し, またリクエストの際に Access-Control-Request-Headers で与えられたヘッダに対して Access-Control-Allow-Headers で許可を出すようにしている.

Firefox でのアクセスした結果は,

normal (w/o custom header, w/o upload event):success
with custom header:failure
with upload event:failure

となった. X-Requested-With: XMLHttpRequest のようなカスタムヘッダが付いていたり, req.upload.addEventListener('load', funciton (e) {/* do something */}, false) のように XMLHttpRequestUpload オブジェクトにイベントリスナが登録されている状態で, リクエスト先が same origin から cross origin へリダイレクトした場合に エラーが生じるようになっている. また,カスタムヘッダ付きだったり XMLHttpRequestUpload オブジェクトにイベントリスナが登録されている場合には, リダイレクト先に preflight リクエストを送っていない(OPTIONS メソッドによるリクエストが発生していない).

一方 Internet Explorer 10 では,

normal (w/o custom header, w/o upload event):success
with custom header:success
with upload event:success

となり,いずれの場合もリクエストが成功する. カスタムヘッダが付いていたり,XMLHttpRequestUpload オブジェクトにイベントリスナがついている場合は, GET -> リダイレクト先に OPTIONS (preflight) -> リダイレクト先に GET, という流れでリクエストが処理される.

どちらの挙動が正しいのか

調べた限りでは,

  • preflight が必要な cross origin に対するリクエストがリダイレクト時にエラーになることは CORS の working draft に書いてあるけれど(http://www.w3.org/TR/2010/WD-cors-20100727/#cross-origin-request-with-preflight0), preflight が必要な条件を満たしている same origin から cross origin に対するリクエストがエラーになるのかは書かれていない.
  • XMLHttpRequest では, same origin から cross origin にリダイレクトした場合は Location ヘッダで指示されている URL を request URL として CORS の cross-origin request を行うように書かれていて(http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method), そのリクエストが preflight が必要な条件を満たしている場合のことは特に書かれていない.

といった感じで, same origin から cross origin に対するリダイレクトが発生した場合にエラーにする理由を見つけられなかった.

あと,Firefox の XMLHttpRequest 周りのコードも見たのだけれど, https://hg.mozilla.org/mozilla-central/file/78fde7e54d92/content/base/src/nsXMLHttpRequest.cpp#l3238には

// Disable redirects for preflighted cross-site requests entirely for now
// Note, do this after the call to CheckChannelForCrossSiteRequest
// to make sure that XML_HTTP_REQUEST_USE_XSITE_AC is up-to-date
if ((mState & XML_HTTP_REQUEST_NEED_AC_PREFLIGHT)) {
   return NS_ERROR_DOM_BAD_URI;
}

とあり, コメントでは実際に preflight が発生した場合に cross origin へのリダイレクトをやめるように書いてあるけれど, コードでは preflight が必要な条件を満たしているのかをチェックしていて, preflight が行われたのかどうかはチェックしていない. なのでコメントとコードが一致していないように思えた.

という訳で,自分は IE 10 の挙動が正しいのではないかと考えている.

以下,あまり関係のない話を書く.

  • もし Firefox の挙動が正しいのであれば, XMLHttpRequest のリクエスト先を外部入力により決定してその内容を表示するような場合に, リクエスト先が same origin であることを確認して カスタムヘッダを追加しさえすれば, たとえオープンリダイレクタがあったとしても cross origin のリソースを読み込みを禁止できるわけなので, Firefox の挙動が正しい方が嬉しい場合が多いのではないかとは思っている.
  • 現在の XMLHttpRequest の editor’s draft を見る限りでは, req.responseType = 'document' の場合であれば, XMLHttpRequest で取得した document の URL プロパティを確認することで, リダイレクトのチェックができるようになると思う. http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#document-response-entity-body

    8. Set document’s URL to request URL.

    とあるので. なので,カスタムヘッダを付けたりしても same origin から cross origin へのリダイレクトがエラーにならない場合でも, 将来的にはリダイレクトしたかを確認すれば済む話になりそう.

さらなる解析の結果、トレンドラボでは、今回の攻撃において Google Chrome や Mozilla Firefox を使用しているユーザがより大きな影響を受けることを確認しました。というもの、正規の拡張機能をダウンロードするように装うことで、ユーザ自身の判断に頼らず問題のアンケートページへ誘導することが可能だからです。一方、ユーザが IE を利用している場合、ユーザが問題の投稿をクリックしない限りアンケートページに誘導されることはありません。

この攻撃では Chrome における正規の拡張機能を装うことを念頭に設計されている点を考慮すると、Chromeユーザに的を絞って狙っており、IEユーザをアンケートページへと誘導する動作は補足的なものにすぎない、と結論づけることができるでしょう。

この攻撃において、ユーザは自身のインターネット活動を監視されることとなる一方、この「TROJ_FOOKBACE.A」は、情報を収集する機能を備えていません。こうしたことから、今回の攻撃は、ユーザのウォールに投稿されたメッセージをクリックすることで自動的にユーザの「友達」のウォールに同じ不正なメッセージが投稿されるという「クリックジャック攻撃」に似た攻撃であると言えるでしょう。

さらに Chrome や Firefox のユーザが攻撃の標的となっている点を考察すると、サイバー犯罪者がブラウザにおける拡張機能の互換性のほかに、これらのブラウザが多くの人が利用しているという人気に目をつけていることが伺えます。今回のような手口を利用した攻撃は目新しいわけではありませんが、ブラウザの拡張機能を利用している点では、今までにない手口と言えます。