Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-09-22

nsICache のメモ

| 15:41 |  nsICache のメモ - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  nsICache のメモ - Ci.nsIZIGOROu

nsICacheService から始める。

const cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);

んでもって次は nsICacheSession を作るのだが、

var cacheSession = cacheService.createSession("clientId", Ci.nsICache.STORE_OFFLINE, true);

とかそういう感じで。

最後にCacheの実態を保存する nsICacheEntryDescription を作るんだけど、このとき write/read で明確にフラグを立てないと Fx が落ちまくる。

var cacheEntry = cacheSession.openCacheEntry("cacheKey", Ci.nsICache.ACCESS_WRITE, true);
var oStream = cacheEntry.openOutputStream(0);
oStream.write(data, data.length); // data は String だとする
oStream.close();
cacheEntry.setMetaDataElement("size", data.length);
cacheEntry.setDataSize(data.length);
cacheEntry.markValid();
cacheEntry.close();

上記が書き込み例。

読み込みの場合は、

var cacheEntry = cacheSession.openCacheEntry("cacheKey", Ci.nsICache.ACCESS_READ, true);
var iStream = cacheEntry.openInputStream(0);
var sStream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
sStream.init(iStream);
var data = sStream.read(cacheEntry.dataSize);
sStream.close();
iStream.close();
cacheEntry.close();

とかそういう感じ。

折角調べたけど不要なのが分かったのでガックリ。

SachinSachin2012/04/29 00:31It seems clumsy, but I did evieythrng as described. When trying to send to phone I get confirmation that it has been sent. But I don't receive it on my HTC Desire, although C-t-P has been installed and logged in. I set C-t-P to start links automatic.+++Stop Press+++I received the tests in the meantime. It took 10 minutes (!) to arrive. Which means it is not usefull: faster to copy typed information.Sorry to bother helpfull users.

jrrykbfpjrrykbfp2012/04/29 17:51vKLusd <a href="http://jyzhcxjrmwsd.com/">jyzhcxjrmwsd</a>

bujsgcemnmbujsgcemnm2012/04/30 23:01w2RFHf <a href="http://wzcfoagjokng.com/">wzcfoagjokng</a>

2008-08-11

nsIScriptSecurityManager のメモ

| 15:59 |  nsIScriptSecurityManager のメモ - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  nsIScriptSecurityManager のメモ - Ci.nsIZIGOROu

危険な URL を判別する為の XPCOM が存在すると言うのを先ほど知ったのでメモ。

使い方

nsIScriptSecurityManager のメソッド ( noscript 以外 )
  • void checkLoadURI ( nsIURI from , nsIURI uri , PRUint32 flags )
  • void checkLoadURIStr ( AUTF8String from , AUTF8String uri , PRUint32 flags )

ここらへんは from から読み出す前提で、uri はどうよってのを確認するメソッドのようだ。flags の部分は nsIScriptSecurityManager の定数。

  • void checkLoadURIStrWithPrincipal ( nsIPrincipal principal , AUTF8String uri , PRUint32 flags )
  • void checkLoadURIWithPrincipal ( nsIPrincipal principal , nsIURI uri , PRUint32 flags )

from の代わりに nsIPrincipal が使えるようになる。Firefox 3 からだと document.nodePrincipal を用いて、任意のページの制限が取れるっぽぃ。

  • void checkSameOriginPrincipal ( nsIPrincipal sourcePrincipal , nsIPrincipal targetPrincipal )
  • void checkSameOriginURI ( nsIURI sourceURI , nsIURI targetURI , PRBool reportError )

XHR 系か?same origin policy に反してるかどうかをチェックするんだろう、きっと。

  • void disableCapability ( char* capability )
  • void enableCapability ( char* capability )

分からない。あとで。

  • nsIPrincipal getChannelPrincipal ( nsIChannel channel )
  • nsIPrincipal getCodebasePrincipal ( nsIURI URI )
  • PRBool isCapabilityEnabled ( char* capability )
  • PRBool isSystemPrincipal ( nsIPrincipal principal )
  • void revertCapability ( char* capability )
  • void setCanEnableCapability ( AUTF8String certificateFingerprint , char* capability , PRInt16 canEnable )

><

使われ方

http://mxr.mozilla.org/firefox/source/toolkit/content/contentAreaUtils.js#56 とか見るといいです。

function urlSecurityCheck(aURL, aPrincipal, aFlags)
{
  const nsIScriptSecurityManager =
    Components.interfaces.nsIScriptSecurityManager;
  var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
                         .getService(nsIScriptSecurityManager);
  if (aFlags === undefined)
    aFlags = nsIScriptSecurityManager.STANDARD;

  try {
    if (aURL instanceof Components.interfaces.nsIURI)
      secMan.checkLoadURIWithPrincipal(aPrincipal, aURL, aFlags);
    else
      secMan.checkLoadURIStrWithPrincipal(aPrincipal, aURL, aFlags);
  } catch (e) {
    // XXXmano: dump the principal url here too
    throw "Load of " + aURL + " denied.";
  }
}

関連リンク

今日のJavaScriptプチtips

| 15:05 |  今日のJavaScriptプチtips - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  今日のJavaScriptプチtips - Ci.nsIZIGOROu

文字列の存在確認からtoLowerCase()までワンライナー

var name = "HolyGrail";
alert(name && name.toLowerCase()); // holygrail

for each - let で要素を列挙

for each ( let item in "yappo hirose31 tokuhirom" ) {
  alert( item );
}

まとめ

chrome://browser/content/pageinfo/feeds.js

JaylynnJaylynn2011/12/30 15:44You've got to be kdiding me-it's so transparently clear now!

cihkqonnncihkqonnn2011/12/31 17:09QECXVo <a href="http://eyjqeqncluyu.com/">eyjqeqncluyu</a>

twgxckytwgxcky2011/12/31 22:47Nd72Oe , [url=http://pqvzzcatthaj.com/]pqvzzcatthaj[/url], [link=http://ymbrvznkcolt.com/]ymbrvznkcolt[/link], http://hfquuyoupfdu.com/

utczioutczio2012/01/01 22:33I53GJv <a href="http://gpmloblunvmv.com/">gpmloblunvmv</a>

ivsuvegsivsuvegs2012/01/02 03:26mE8149 , [url=http://zopvzvpgbsrz.com/]zopvzvpgbsrz[/url], [link=http://dmdirlxxmhtw.com/]dmdirlxxmhtw[/link], http://dabigaimaqjd.com/

2008-06-17

xpcshell の Components.stack.filename が相対パスな件

| 18:07 |  xpcshell の Components.stack.filename が相対パスな件 - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  xpcshell の Components.stack.filename が相対パスな件 - Ci.nsIZIGOROu

タイトル通りで引くんだけど、これ結果的に環境変数で渡すしか方法が無さそう。実際問題、Writing xpcshell-based unit tests - Mozilla | MDN のように xpcshell ベーステストツールがあるんですが、head.js の 136行目付近で、

function do_import_script(topsrcdirRelativePath) {
  var scriptPath = environment["TOPSRCDIR"];
  if (scriptPath.charAt(scriptPath.length - 1) != "/")
    scriptPath += "/";
  scriptPath += topsrcdirRelativePath;

  load(scriptPath);
}

とあるように TOPSRCDIR 環境変数依存してる。

$ /bin/sh
$ export NATIVE_TOPSRCDIR="c:\path\to\top\srcdir"
$ export TOPSRCDIR="c:/path/to/top/srcdir"
$ cd dist/bin
$ ./run-mozilla.sh ./xpcshell -f path/to/top/srcdir/tools/test-harness/xpcshell-simple/head.js \
    -f test_foo.js \
    -f path/to/top/srcdir/tools/test-harness/xpcshell-simple/tail.js
    -f path/to/top/srcdir/tools/test-harness/xpcshell-simple/execute_test.js
...failure or success messages are printed to the console...
Writing xpcshell-based unit tests
みたいな感じの設定が無いと相対的にファイルをxpcshellのload関数で読めない訳だったりする訳です。 見たかんじだと Makefile なりテストの実行用のシェルスクリプト環境に合わせて書かないと行けなさそうなのでちょっと萎えだけど、head.js には色々見所があるので、実際に MozTAP を使ってみて、MozTAP に無くて、この head.js にある機能は少しずつ移植しようかなと思う。

2008-06-10

JS Code Module での Singleton

| 13:59 |  JS Code Module での Singleton - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  JS Code Module での Singleton - Ci.nsIZIGOROu

var EXPORTED_SYMBOLS = ['_singleton', 'Singleton'];

var _singleton = null;

var Singleton = function() {
  if (Components.stack.filename != Components.stack.caller.filename)
	throw new Error('private constructor');
};

Singleton.getInstance = function() {
  if (!(_singleton instanceof Singleton))
	_singleton = new Singleton();
  return _singleton;
};

こんなんで出来ちゃう件。コンストラクタは外部から呼べないようにしてみた。

iufmuijcfpiufmuijcfp2011/04/08 03:14xS42aR <a href="http://pzwbfbxoaztw.com/">pzwbfbxoaztw</a>, [url=http://nycqufeyznko.com/]nycqufeyznko[/url], [link=http://xobbqvvaigma.com/]xobbqvvaigma[/link], http://ovwhykwkxjsl.com/

2008-05-26

Components.utils.import の問題点

| 13:01 |  Components.utils.import の問題点 - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  Components.utils.import の問題点 - Ci.nsIZIGOROu

普通に便利なんだけど、

Components.utils.import はそれぞれのモジュールコードを一度だけ、自分自身のスコープの中で評価します Components.utils.import - MDC

が最大のメリットでありつつ、最大の欠点ともなりうる事に使ってみて気づいた。

それは何かと言うと、1回しか読み込まないので何度も書いて試すと言う行為はブラウザ再起動しないと出来ない胃っぽぃ。面倒過ぎる件。

試しに良くあるクエリストリングを試しに付けてみたけど期待する効果は無いので、 Components.utils.import をエミュレート - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会キャッシュクリア機能付けたらデバッグ用途に使えるんジャマイカと言う気がした。

を実装すれば普通に便利な気がして来た。

Components.utils.importの挙動はmozIJSSubScriptLoaderじゃどうにも真似出来ないのでダメぽ。

wfaonjaxsxjwfaonjaxsxj2011/04/07 04:48G4HqJ9 <a href="http://sffhjgtlscdj.com/">sffhjgtlscdj</a>, [url=http://iwsvrgicbwxa.com/]iwsvrgicbwxa[/url], [link=http://wfcsztvbuvvw.com/]wfcsztvbuvvw[/link], http://icvhomgpogwz.com/

JoleneJolene2012/09/28 19:56Gosh, I wish I would have had that ifnortmaoin earlier!

ylwqecjkbylwqecjkb2012/09/29 05:33uaOHSt <a href="http://lpuwhvryfvqn.com/">lpuwhvryfvqn</a>

pntkboxwkapntkboxwka2012/09/30 01:22xU8Nzc , [url=http://mevscsghqcni.com/]mevscsghqcni[/url], [link=http://yqpxygetgkuz.com/]yqpxygetgkuz[/link], http://xpiyzhuvrrwz.com/

pdhwlxpdhwlx2012/09/30 11:41aazwER <a href="http://ypmiffttbfkj.com/">ypmiffttbfkj</a>

pdhwlxpdhwlx2012/09/30 11:42aazwER <a href="http://ypmiffttbfkj.com/">ypmiffttbfkj</a>

xleyyimqxyxleyyimqxy2012/10/02 03:03kJJ1EY , [url=http://ajitriotumyp.com/]ajitriotumyp[/url], [link=http://ecqslxpbkbka.com/]ecqslxpbkbka[/link], http://snpbvcymckpn.com/