toolkit/components/social/test/xpcshell/test_SocialService.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 Cu.import("resource://gre/modules/Services.jsm");
     6 Cu.import("resource://gre/modules/PlacesUtils.jsm");
     8 function run_test() {
     9   initApp();
    11   // NOTE: none of the manifests here can have a workerURL set, or we attempt
    12   // to create a FrameWorker and that fails under xpcshell...
    13   let manifests = [
    14     { // normal provider
    15       name: "provider 1",
    16       origin: "https://example1.com",
    17       sidebarURL: "https://example1.com/sidebar/",
    18     },
    19     { // provider without workerURL
    20       name: "provider 2",
    21       origin: "https://example2.com",
    22       sidebarURL: "https://example2.com/sidebar/",
    23     }
    24   ];
    26   Cu.import("resource://gre/modules/SocialService.jsm");
    27   Cu.import("resource://gre/modules/MozSocialAPI.jsm");
    29   let runner = new AsyncRunner();
    30   let next = runner.next.bind(runner);
    31   runner.appendIterator(testAddProviders(manifests, next));
    32   runner.appendIterator(testGetProvider(manifests, next));
    33   runner.appendIterator(testGetProviderList(manifests, next));
    34   runner.appendIterator(testAddRemoveProvider(manifests, next));
    35   runner.appendIterator(testIsSameOrigin(manifests, next));
    36   runner.appendIterator(testResolveUri  (manifests, next));
    37   runner.appendIterator(testOrderedProviders(manifests, next));
    38   runner.appendIterator(testRemoveProviders(manifests, next));
    39   runner.next();
    40 }
    42 function testAddProviders(manifests, next) {
    43   do_check_false(SocialService.enabled);
    44   let provider = yield SocialService.addProvider(manifests[0], next);
    45   do_check_true(SocialService.enabled);
    46   do_check_true(MozSocialAPI._enabled);
    47   do_check_false(provider.enabled);
    48   provider = yield SocialService.addProvider(manifests[1], next);
    49   do_check_false(provider.enabled);
    50 }
    52 function testRemoveProviders(manifests, next) {
    53   do_check_true(SocialService.enabled);
    54   yield SocialService.removeProvider(manifests[0].origin, next);
    55   yield SocialService.removeProvider(manifests[1].origin, next);
    56   do_check_false(SocialService.enabled);
    57 }
    59 function testGetProvider(manifests, next) {
    60   for (let i = 0; i < manifests.length; i++) {
    61     let manifest = manifests[i];
    62     let provider = yield SocialService.getProvider(manifest.origin, next);
    63     do_check_neq(provider, null);
    64     do_check_eq(provider.name, manifest.name);
    65     do_check_eq(provider.workerURL, manifest.workerURL);
    66     do_check_eq(provider.origin, manifest.origin);
    67   }
    68   do_check_eq((yield SocialService.getProvider("bogus", next)), null);
    69 }
    71 function testGetProviderList(manifests, next) {
    72   let providers = yield SocialService.getProviderList(next);
    73   do_check_true(providers.length >= manifests.length);
    74   for (let i = 0; i < manifests.length; i++) {
    75     let providerIdx = providers.map(function (p) p.origin).indexOf(manifests[i].origin);
    76     let provider = providers[providerIdx];
    77     do_check_true(!!provider);
    78     do_check_false(provider.enabled);
    79     do_check_eq(provider.workerURL, manifests[i].workerURL);
    80     do_check_eq(provider.name, manifests[i].name);
    81   }
    82 }
    84 function testAddRemoveProvider(manifests, next) {
    85   var threw;
    86   try {
    87     // Adding a provider whose origin already exists should fail
    88     SocialService.addProvider(manifests[0]);
    89   } catch (ex) {
    90     threw = ex;
    91   }
    92   do_check_neq(threw.toString().indexOf("SocialService.addProvider: provider with this origin already exists"), -1);
    94   let originalProviders = yield SocialService.getProviderList(next);
    96   // Check that provider installation succeeds
    97   let newProvider = yield SocialService.addProvider({
    98     name: "foo",
    99     origin: "http://example3.com"
   100   }, next);
   101   let retrievedNewProvider = yield SocialService.getProvider(newProvider.origin, next);
   102   do_check_eq(newProvider, retrievedNewProvider);
   104   let providersAfter = yield SocialService.getProviderList(next);
   105   do_check_eq(providersAfter.length, originalProviders.length + 1);
   106   do_check_neq(providersAfter.indexOf(newProvider), -1);
   108   // Now remove the provider
   109   yield SocialService.removeProvider(newProvider.origin, next);
   110   providersAfter = yield SocialService.getProviderList(next);
   111   do_check_eq(providersAfter.length, originalProviders.length);
   112   do_check_eq(providersAfter.indexOf(newProvider), -1);
   113   newProvider = yield SocialService.getProvider(newProvider.origin, next);
   114   do_check_true(!newProvider);
   115 }
   117 function testIsSameOrigin(manifests, next) {
   118   let providers = yield SocialService.getProviderList(next);
   119   let provider = providers[0];
   120   // provider.origin is a string.
   121   do_check_true(provider.isSameOrigin(provider.origin));
   122   do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin, null, null)));
   123   do_check_true(provider.isSameOrigin(provider.origin + "/some-sub-page"));
   124   do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin + "/some-sub-page", null, null)));
   125   do_check_false(provider.isSameOrigin("http://something.com"));
   126   do_check_false(provider.isSameOrigin(Services.io.newURI("http://something.com", null, null)));
   127   do_check_false(provider.isSameOrigin("data:text/html,<p>hi"));
   128   do_check_true(provider.isSameOrigin("data:text/html,<p>hi", true));
   129   do_check_false(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null)));
   130   do_check_true(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null), true));
   131   // we explicitly handle null and return false
   132   do_check_false(provider.isSameOrigin(null));
   133 }
   135 function testResolveUri(manifests, next) {
   136   let providers = yield SocialService.getProviderList(next);
   137   let provider = providers[0];
   138   do_check_eq(provider.resolveUri(provider.origin).spec, provider.origin + "/");
   139   do_check_eq(provider.resolveUri("foo.html").spec, provider.origin + "/foo.html");
   140   do_check_eq(provider.resolveUri("/foo.html").spec, provider.origin + "/foo.html");
   141   do_check_eq(provider.resolveUri("http://somewhereelse.com/foo.html").spec, "http://somewhereelse.com/foo.html");
   142   do_check_eq(provider.resolveUri("data:text/html,<p>hi").spec, "data:text/html,<p>hi");
   143 }
   145 function testOrderedProviders(manifests, next) {
   146   let providers = yield SocialService.getProviderList(next);
   148   // add visits for only one of the providers
   149   let visits = [];
   150   let startDate = Date.now() * 1000;
   151   for (let i = 0; i < 10; i++) {
   152     visits.push({
   153       uri: Services.io.newURI(providers[1].sidebarURL + i, null, null),
   154       visitDate: startDate + i
   155     });
   156   }
   158   promiseAddVisits(visits).then(next);
   159   yield;
   160   let orderedProviders = yield SocialService.getOrderedProviderList(next);
   161   do_check_eq(orderedProviders[0], providers[1]);
   162   do_check_eq(orderedProviders[1], providers[0]);
   163   do_check_true(orderedProviders[0].frecency > orderedProviders[1].frecency);
   164   promiseClearHistory().then(next);
   165   yield;
   166 }

mercurial