Firefox の chrome code で cookies.sqlite のパスを得る

hg からソースとってきて適当に grep する。

#define COOKIES_FILE "cookies.sqlite"

// ...

  // Get our cookie file.
  nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
    getter_AddRefs(mDefaultDBState->cookieFile));
  if (NS_FAILED(rv)) {
    // We've already set up our DBStates appropriately; nothing more to do.
    COOKIE_LOGSTRING(PR_LOG_WARNING,
      ("InitDBStates(): couldn't get cookie file"));
    return;
  }
  mDefaultDBState->cookieFile->AppendNative(NS_LITERAL_CSTRING(COOKIES_FILE));

どうやら cookies.sqlite というファイル名はコンパイル時に決定されていて固定で、 プロファイルディレクトリのパスに "cookies.sqlite" を連結すればよさそうである。 プロファイルディレクトリのパスは @mozilla.org/file/directory_service;1 のプロパティから得られる。

alert(Cc['@mozilla.org/file/directory_service;1']
        .getService(Ci.nsIProperties)
        .get('ProfD', Ci.nsIFile)
        .path);

let dirSvc = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties);
let cookieFile = dirSvc.get('ProfD', Ci.nsIFile);
cookieFile.append('cookies.sqlite');
cookieFile.copyTo(new FileUtils.File('/kokoro/pyonpyon'), 'machi.sqlite');