diff options
author | felt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-10 15:40:05 +0000 |
---|---|---|
committer | felt@chromium.org <felt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-10 15:40:05 +0000 |
commit | 8be0e677a4997089a709f6d641d6be3a70995ffd (patch) | |
tree | 4ab7b59046f1a0c223c8b73725e5ae8d1294b3f3 /chrome/test/data | |
parent | 6158e630ed419090b8b093934dae5c8fd344e7cc (diff) | |
download | chromium_src-8be0e677a4997089a709f6d641d6be3a70995ffd.zip chromium_src-8be0e677a4997089a709f6d641d6be3a70995ffd.tar.gz chromium_src-8be0e677a4997089a709f6d641d6be3a70995ffd.tar.bz2 |
Revert 210672 "Refactoring of the activity logging end to tests...."
Flaking out on mac
> Refactoring of the activity logging end to tests. They now check the correct functions are logged.
>
> If you think this caused any test flakiness issues please ping karenlees and felt.
>
> BUG=256756,245594
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=210475
>
> Review URL: https://chromiumcodereview.appspot.com/18272007
TBR=karenlees@chromium.org
Review URL: https://codereview.chromium.org/18485003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210849 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/data')
-rw-r--r-- | chrome/test/data/extensions/activity_log/google_cs.js | 2 | ||||
-rw-r--r-- | chrome/test/data/extensions/activity_log/manifest.json | 8 | ||||
-rw-r--r-- | chrome/test/data/extensions/activity_log/options.html (renamed from chrome/test/data/extensions/api_test/activity_log_private/friend/options.html) | 2 | ||||
-rw-r--r-- | chrome/test/data/extensions/activity_log/options.js | 615 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/activity_log_private/README | 56 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/activity_log_private/friend/google_cs.js | 5 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/activity_log_private/friend/manifest.json | 14 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js | 604 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/activity_log_private/test/test.js | 356 |
9 files changed, 641 insertions, 1021 deletions
diff --git a/chrome/test/data/extensions/activity_log/google_cs.js b/chrome/test/data/extensions/activity_log/google_cs.js index 7c7a258..7c1bdbb 100644 --- a/chrome/test/data/extensions/activity_log/google_cs.js +++ b/chrome/test/data/extensions/activity_log/google_cs.js @@ -2,4 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -console.log('g o o g l e'); +console.log("g o o g l e"); diff --git a/chrome/test/data/extensions/activity_log/manifest.json b/chrome/test/data/extensions/activity_log/manifest.json index 35a2657..c5fe350 100644 --- a/chrome/test/data/extensions/activity_log/manifest.json +++ b/chrome/test/data/extensions/activity_log/manifest.json @@ -1,8 +1,12 @@ { - "name": "Prerender Test Extension", + "name": "Activity Log Test Extension", "version": "0.1", - "description": "Testing the prerender", + "description": "Testing the Activity Log", + "permissions": [ "cookies", "tabs", "webRequest", "webRequestBlocking", + "http://*/*", "https://*/*", "storage" ], + "options_page": "options.html", "manifest_version": 2, + "omnibox": { "keyword" : "hello" }, "content_scripts": [ { "matches": ["http://www.google.com.bo/*"], diff --git a/chrome/test/data/extensions/api_test/activity_log_private/friend/options.html b/chrome/test/data/extensions/activity_log/options.html index d7afb4b..6c7453f 100644 --- a/chrome/test/data/extensions/api_test/activity_log_private/friend/options.html +++ b/chrome/test/data/extensions/activity_log/options.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <script src="reply.js"></script> + <script src="options.js"></script> </head> <body> <h1>Chrome API calls</h1> diff --git a/chrome/test/data/extensions/activity_log/options.js b/chrome/test/data/extensions/activity_log/options.js new file mode 100644 index 0000000..8afe8db --- /dev/null +++ b/chrome/test/data/extensions/activity_log/options.js @@ -0,0 +1,615 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Every test needs: + * - a button in options.html + * - a function that runs the test & calls setCompletedChrome or + setCompetedDOM when done + * - a listener registered in setupEvents +**/ + +// UTILITY METHODS +//////////////////////////////////////////////////////////////////////////////// + +var robot = false; +var completed = 0; +var testButtons = []; +var defaultUrl = 'http://www.google.com'; +// Lets us know that we're running in the test suite and should notify the +// browser about the test status. +function setRunningAsRobot() { + robot = true; +} + +// set the testButtons array to the current set of test cases. +function setTestButtons(buttonsArray) { + testButtons = buttonsArray; +} + +// Clicks the first button from the array 'testButtons'. If robot is true +// then the next test button automatically gets clicked on once +// 'setCompleted' gets called. ('setCompleted' gets invoked +// when a test completes successfully.) +function beginClickingTestButtons() { + if (testButtons.length > 0) { + completed = 0; + testButtons[0].click(); + } else { + console.log("testButtons array is empty, somehting is wrong"); + } +} + +// Convenience. +function $(o) { + return document.getElementById(o); +} + +// Track how many tests have finished. If there are pending tests, +// then automatically trigger them by clicking the next test button +// from the array 'testButtons'. +function setCompleted(str) { + completed++; + $('status').innerText = "Completed " + str; + console.log("[SUCCESS] " + str); + if (robot) { + if (completed === testButtons.length) { + // Done with clicking all buttons in the array 'testButtons'. + chrome.test.notifyPass(); + } else { + // Click the next button from the array 'testButtons'. + testButtons[completed].click(); + } + } +} + +// CHROME API TEST METHODS -- PUT YOUR TESTS BELOW HERE +//////////////////////////////////////////////////////////////////////////////// + +// Makes an API call. +function makeApiCall() { + chrome.cookies.set({ + 'url': 'https://www.cnn.com', + 'name': 'activity_log_test_cookie', + 'value': 'abcdefg' + }); + setCompleted('makeApiCall'); +} + +// Makes an API call that has a custom binding. +function makeSpecialApiCalls() { + var url = chrome.extension.getURL("image/cat.jpg"); + var noparam = chrome.extension.getViews(); + setCompleted('makeSpecialApiCalls'); +} + +// Checks that we don't double-log calls that go through setHandleRequest +// *and* the ExtensionFunction machinery. +function checkNoDoubleLogging() { + chrome.omnibox.setDefaultSuggestion({description: 'hello world'}); + setCompleted('checkNoDoubleLogging'); +} + +// Check whether we log calls to chrome.app.*; +function checkAppCalls() { + var callback = function () {}; + chrome.app.getDetails(); + var b = chrome.app.isInstalled; + var c = chrome.app.installState(callback); + setCompleted('checkAppCalls'); +} + +// Makes an API call that the extension doesn't have permission for. +// Don't add the management permission or this test won't test the code path. +function makeBlockedApiCall() { + try { + var all_extensions = chrome.management.getAll(); + } catch(err) { } + setCompleted('makeBlockedApiCall'); +} + +// Injects a content script. +function injectContentScript() { + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'file': 'google_cs.js'}, + function () { + chrome.tabs.remove(tabId); + setCompleted('injectContentScript'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Injects a blob of script into a page. +function injectScriptBlob() { + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" + && tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': 'document.write("g o o g l e");'}, + function () { + chrome.tabs.remove(tabId); + setCompleted('injectScriptBlob'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Modifies the headers sent and received in an HTTP request using the +// webRequest API. +function doWebRequestModifications() { + // Install a webRequest handler that will add an HTTP header to the outgoing + // request for the main page. + function doModifyHeaders(details) { + var response = {}; + + var headers = details.requestHeaders; + if (headers === undefined) { + headers = []; + } + headers.push({'name': 'X-Test-Activity-Log-Send', + 'value': 'Present'}); + response['requestHeaders'] = headers; + + headers = details.responseHeaders; + if (headers === undefined) { + headers = []; + } + headers = headers.filter( + function(x) {return x["name"] != "Cache-Control"}); + headers.push({'name': 'X-Test-Response-Header', + 'value': 'Inserted'}); + headers.push({'name': 'Set-Cookie', + 'value': 'ActivityLog=InsertedCookie'}); + response['responseHeaders'] = headers; + + return response; + } + chrome.webRequest.onBeforeSendHeaders.addListener( + doModifyHeaders, + {'urls': ['http://*/*'], 'types': ['main_frame']}, + ['blocking', 'requestHeaders']); + chrome.webRequest.onHeadersReceived.addListener( + doModifyHeaders, + {'urls': ['http://*/*'], 'types': ['main_frame']}, + ['blocking', 'responseHeaders']); + + // Open a tab, then close it when it has finished loading--this should give + // the webRequest handler a chance to run. + chrome.tabs.onUpdated.addListener( + function closeTab(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.webRequest.onBeforeSendHeaders.removeListener(doModifyHeaders); + chrome.tabs.onUpdated.removeListener(closeTab); + chrome.tabs.remove(tabId); + setCompleted('doWebRequestModifications'); + } + } + ); + window.open(defaultUrl); +} + +function getSetObjectProperties() { + chrome.tabs.onUpdated.addListener( + function getTabProperties(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" + && tab.url.match(/google\.com/g)) { + console.log(tab.id + " " + tab.index + " " + tab.url); + tab.index = 3333333333333333333; + chrome.tabs.remove(tabId); + chrome.tabs.onUpdated.removeListener(getTabProperties); + setCompleted('getSetObjectProperties'); + } + } + ); + window.open(defaultUrl); +} + +function callObjectMethod() { + var storageArea = chrome.storage.sync; + storageArea.clear(); + setCompleted('callObjectMethod()'); +} + +function sendMessageToCS() { + chrome.tabs.onUpdated.addListener( + function messageCS(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" + && tab.url.match(/google\.com/g)) { + chrome.tabs.sendMessage(tabId, "hellooooo!"); + chrome.tabs.remove(tabId); + chrome.tabs.onUpdated.removeListener(messageCS); + setCompleted('sendMessageToCS'); + } + } + ); + window.open(defaultUrl); +} + +function sendMessageToSelf() { + chrome.runtime.sendMessage("hello hello"); + setCompleted('sendMessageToSelf'); +} + +function sendMessageToOther() { + chrome.runtime.sendMessage("ocacnieaapoflmkebkeaidpgfngocapl", + "knock knock", + function response() { + console.log("who's there?"); + }); + setCompleted('sendMessageToOther'); +} + +function connectToOther() { + chrome.runtime.connect("ocacnieaapoflmkebkeaidpgfngocapl"); + setCompleted('connectToOther'); +} + +function tabIdTranslation() { + var tabIds = [-1, -1]; + + // Test the case of a single int + chrome.tabs.onUpdated.addListener( + function testSingleInt(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.executeScript( + tab.id, + {'file': 'google_cs.js'}, + function() { + chrome.tabs.onUpdated.removeListener(testSingleInt); + tabIds[0] = tabId; + window.open('http://www.google.be'); + }); + } + } + ); + + // Test the case of arrays + chrome.tabs.onUpdated.addListener( + function testArray(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && tab.url.match(/google\.be/g)) { + chrome.tabs.move(tabId, {"index": -1}); + tabIds[1] = tabId; + chrome.tabs.remove(tabIds); + chrome.tabs.onUpdated.removeListener(testArray); + setCompleted('tabIdTranslation'); + } + } + ); + + window.open(defaultUrl); +} + +// DOM API TEST METHODS -- PUT YOUR TESTS BELOW HERE +//////////////////////////////////////////////////////////////////////////////// + +// Does an XHR from this [privileged] context. +function doBackgroundXHR() { + var request = new XMLHttpRequest(); + request.open('POST', defaultUrl, false); + request.setRequestHeader("Content-type", "text/plain;charset=UTF-8"); + try { + request.send(); + } catch(err) { + // doesn't matter if it works or not; should be recorded either way + } + setCompleted('doBackgroundXHR'); +} + +// Does an XHR from inside a content script. +function doContentScriptXHR() { + var code = 'var request = new XMLHttpRequest(); ' + + 'request.open("POST", "http://www.cnn.com", false); ' + + 'request.setRequestHeader("Content-type", ' + + ' "text/plain;charset=UTF-8"); ' + + 'request.send(); ' + + 'document.write("sent an XHR");'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doContentScriptXHR'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the Location object from inside a content script. +function doLocationAccess() { + var code = 'window.location = "http://www.google.com/#foo"; ' + + 'document.location = "http://www.google.com/#bar"; ' + + 'var loc = window.location; ' + + 'loc.assign("http://www.google.com/#foo"); ' + + 'loc.replace("http://www.google.com/#bar");'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doLoctionAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Mutates the DOM tree from inside a content script. +function doDOMMutation1() { + var code = 'var d1 = document.createElement("div"); ' + + 'var d2 = document.createElement("div"); ' + + 'document.body.appendChild(d1); ' + + 'document.body.insertBefore(d2, d1); ' + + 'document.body.replaceChild(d1, d2);'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doDOMMutation1'); + }); + } + } + ); + window.open(defaultUrl); +} + +function doDOMMutation2() { + var code = 'document.write("Hello using document.write"); ' + + 'document.writeln("Hello using document.writeln"); ' + + 'document.body.innerHTML = "Hello using innerHTML";'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doDOMMutation2'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 Navigator API from inside a content script. +function doNavigatorAPIAccess() { + var code = 'var geo = navigator.geolocation; ' + + 'var successCallback = function(x) { }; ' + + 'var errorCallback = function(x) { }; ' + + 'geo.getCurrentPosition(successCallback, errorCallback); '; + 'var id = geo.watchPosition(successCallback, errorCallback);'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doNavigatorAPIAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 WebStorage API from inside a content script. +function doWebStorageAPIAccess1() { + var code = 'var store = window.sessionStorage; ' + + 'store.setItem("foo", 42); ' + + 'var val = store.getItem("foo"); ' + + 'store.removeItem("foo"); ' + + 'store.clear();'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doWebStorageAPIAccess1'); + }); + } + } + ); + window.open(defaultUrl); +} + +function doWebStorageAPIAccess2() { + var code = 'var store = window.localStorage; ' + + 'store.setItem("foo", 42); ' + + 'var val = store.getItem("foo"); ' + + 'store.removeItem("foo"); ' + + 'store.clear();'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doWebStorageAPIAccess2'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 Notification API from inside a content script. +function doNotificationAPIAccess() { + var code = 'try {' + + ' webkitNotifications.createNotification("myIcon.png", ' + + ' "myTitle", ' + + ' "myContent");' + + '} catch (e) {}'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doNotifcationAPIAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 ApplicationCache API from inside a content script. +function doApplicationCacheAPIAccess() { + var code = 'var appCache = window.applicationCache;'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doApplictionCacheAPIAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 WebDatabase API from inside a content script. +function doWebDatabaseAPIAccess() { + var code = 'var db = openDatabase("testdb", "1.0", "test database", ' + + ' 1024 * 1024);'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doWebDatabaseAPIAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// Accesses the HTML5 Canvas API from inside a content script. +function doCanvasAPIAccess() { + var code = 'var test_canvas = document.createElement("canvas"); ' + + 'var test_context = test_canvas.getContext("2d");'; + chrome.tabs.onUpdated.addListener( + function callback(tabId, changeInfo, tab) { + if (changeInfo['status'] === "complete" && + tab.url.match(/google\.com/g)) { + chrome.tabs.onUpdated.removeListener(callback); + chrome.tabs.executeScript( + tab.id, + {'code': code}, + function () { + chrome.tabs.remove(tabId); + setCompleted('doCanvasAPIAccess'); + }); + } + } + ); + window.open(defaultUrl); +} + +// REGISTER YOUR TESTS HERE +// Attach the tests to buttons. +function setupEvents() { + $('api_call').addEventListener('click', makeApiCall); + $('special_call').addEventListener('click', makeSpecialApiCalls); + $('blocked_call').addEventListener('click', makeBlockedApiCall); + $('inject_cs').addEventListener('click', injectContentScript); + $('inject_blob').addEventListener('click', injectScriptBlob); + $('webrequest').addEventListener('click', doWebRequestModifications); + $('double').addEventListener('click', checkNoDoubleLogging); + $('app_bindings').addEventListener('click', checkAppCalls); + $('object_properties').addEventListener('click', getSetObjectProperties); + $('object_methods').addEventListener('click', callObjectMethod); + $('message_cs').addEventListener('click', sendMessageToCS); + $('message_self').addEventListener('click', sendMessageToSelf); + $('message_other').addEventListener('click', sendMessageToOther); + $('connect_other').addEventListener('click', connectToOther); + $('tab_ids').addEventListener('click', tabIdTranslation); + $('background_xhr').addEventListener('click', doBackgroundXHR); + $('cs_xhr').addEventListener('click', doContentScriptXHR); + $('location_access').addEventListener('click', doLocationAccess); + $('dom_mutation1').addEventListener('click', doDOMMutation1); + $('dom_mutation2').addEventListener('click', doDOMMutation2); + $('navigator_access').addEventListener('click', doNavigatorAPIAccess); + $('web_storage_access1').addEventListener('click', + doWebStorageAPIAccess1); + $('web_storage_access2').addEventListener('click', + doWebStorageAPIAccess2); + $('notification_access').addEventListener('click', doNotificationAPIAccess); + $('application_cache_access').addEventListener( + 'click', + doApplicationCacheAPIAccess); + $('web_database_access').addEventListener('click', doWebDatabaseAPIAccess); + $('canvas_access').addEventListener('click', doCanvasAPIAccess); + completed = 0; +} + +document.addEventListener('DOMContentLoaded', setupEvents); + diff --git a/chrome/test/data/extensions/api_test/activity_log_private/README b/chrome/test/data/extensions/api_test/activity_log_private/README deleted file mode 100644 index a3bf77e..0000000 --- a/chrome/test/data/extensions/api_test/activity_log_private/README +++ /dev/null @@ -1,56 +0,0 @@ -This directory contains tests for chrome extension activity logging. - -The tests use two chrome extensions: - -test : sends messages to the friend extension and listens for activity - logged by the friend extension. Checks the activity has been logged - correctly. - -friend: recieves messages from the extension and runs a function based on - the contents of the message. - - -Adding a new test: - - In friend/reply.js: - (1) Add a function to call the chrome api calls you want to test. - NOTE: The function should clean up any changes it made (e.g. listeners - it added) before finishing. If they are not cleaned up then unexpected - behavior can happen in test cases that run after this function. - (2) Add the name of the new function to the function map (fnMap). - - In friend/options.html: - (1) Add a button to allow the new function to be called in manual mode. - - You may need also to modify the manifest.json and other files in the - friend extension directory. - - In test/test.js: - (1) Add the test to the testcase array. - - You will need to define the function that sends a message to the - friend extension and define the expected activity logging. Example: - - testCases.push({ - func: function triggerMyFunctionCall() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'my_function_call_id', - function response() { }); - }, - expected_activity: ['api.call1', 'api.call2', 'api.call3'] - }); - - where 'my_function_call_id' is the key you added to the fn_map in - reply.js. - - -Running the tests: - - > out/Debug/browser_tests --gtest_filter=ActivityLogApiTest.TriggerEvent - - -Running in manual mode: - - (1) Start chrome with out/Debug/chrome - (2) Navigate to chrome://extensions - (3) Install the friend and test extensions from your chrome src folder - (4) Click on the "options" link under the friend extension - (5) You should see the options page the buttons to run the functions manually diff --git a/chrome/test/data/extensions/api_test/activity_log_private/friend/google_cs.js b/chrome/test/data/extensions/api_test/activity_log_private/friend/google_cs.js deleted file mode 100644 index b8e3804..0000000 --- a/chrome/test/data/extensions/api_test/activity_log_private/friend/google_cs.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -console.log('g o o g l e'); diff --git a/chrome/test/data/extensions/api_test/activity_log_private/friend/manifest.json b/chrome/test/data/extensions/api_test/activity_log_private/friend/manifest.json index fa11e51..a14619f 100644 --- a/chrome/test/data/extensions/api_test/activity_log_private/friend/manifest.json +++ b/chrome/test/data/extensions/api_test/activity_log_private/friend/manifest.json @@ -6,15 +6,5 @@ "background": { "scripts": ["reply.js"] }, - "omnibox": { "keyword" : "hello" }, - "options_page": "options.html", - "permissions": ["cookies", "storage", "tabs", "webRequest", - "webRequestBlocking", "http://*/*", "https://*/*"], - "content_scripts": [ - { - "matches": ["http://www.google.com.bo/*"], - "js": ["google_cs.js"], - "run_at": "document_start" - } - ] -} + "permissions": ["cookies", "https://www.cnn.com/"] +}
\ No newline at end of file diff --git a/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js b/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js index 8490da9..9249a1f 100644 --- a/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js +++ b/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js @@ -2,604 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -var defaultUrl = 'http://www.google.com'; - -// CHROME API TEST METHODS -- PUT YOUR TESTS BELOW HERE -//////////////////////////////////////////////////////////////////////////////// - -// Makes an API call. -function makeApiCall() { - chrome.cookies.set({ - 'url': 'https://www.cnn.com', - 'name': 'activity_log_test_cookie', - 'value': 'abcdefg' - }); - setCompleted('makeApiCall'); -} - -// Makes an API call that has a custom binding. -function makeSpecialApiCalls() { - var url = chrome.extension.getURL('image/cat.jpg'); - var noparam = chrome.extension.getViews(); - setCompleted('makeSpecialApiCalls'); -} - -// Checks that we don't double-log calls that go through setHandleRequest -// *and* the ExtensionFunction machinery. -function checkNoDoubleLogging() { - chrome.omnibox.setDefaultSuggestion({description: 'hello world'}); - setCompleted('checkNoDoubleLogging'); -} - -// Check whether we log calls to chrome.app.*; -function checkAppCalls() { - var callback = function() {}; - chrome.app.getDetails(); - var b = chrome.app.isInstalled; - var c = chrome.app.installState(callback); - setCompleted('checkAppCalls'); -} - -// Makes an API call that the extension doesn't have permission for. -// Don't add the management permission or this test won't test the code path. -function makeBlockedApiCall() { - try { - var allExtensions = chrome.management.getAll(); - } catch (err) { } - setCompleted('makeBlockedApiCall'); -} - -// Injects a content script. -function injectContentScript() { - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'file': 'google_cs.js'}, - function() { - chrome.tabs.remove(tabId); - setCompleted('injectContentScript'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Injects a blob of script into a page. -function injectScriptBlob() { - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': 'document.write("g o o g l e");'}, - function() { - chrome.tabs.remove(tabId); - setCompleted('injectScriptBlob'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Modifies the headers sent and received in an HTTP request using the -// webRequest API. -function doWebRequestModifications() { - // Install a webRequest handler that will add an HTTP header to the outgoing - // request for the main page. - function doModifyHeaders(details) { - var response = {}; - - var headers = details.requestHeaders; - if (headers === undefined) { - headers = []; - } - headers.push({'name': 'X-Test-Activity-Log-Send', - 'value': 'Present'}); - response['requestHeaders'] = headers; - - headers = details.responseHeaders; - if (headers === undefined) { - headers = []; - } - headers = headers.filter( - function(x) {return x['name'] != 'Cache-Control'}); - headers.push({'name': 'X-Test-Response-Header', - 'value': 'Inserted'}); - headers.push({'name': 'Set-Cookie', - 'value': 'ActivityLog=InsertedCookie'}); - response['responseHeaders'] = headers; - - return response; - } - chrome.webRequest.onBeforeSendHeaders.addListener( - doModifyHeaders, - {'urls': ['http://*/*'], 'types': ['main_frame']}, - ['blocking', 'requestHeaders']); - chrome.webRequest.onHeadersReceived.addListener( - doModifyHeaders, - {'urls': ['http://*/*'], 'types': ['main_frame']}, - ['blocking', 'responseHeaders']); - - // Open a tab, then close it when it has finished loading--this should give - // the webRequest handler a chance to run. - chrome.tabs.onUpdated.addListener( - function closeTab(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.webRequest.onBeforeSendHeaders.removeListener(doModifyHeaders); - // TODO(karenlees): you added this line in debugging, make sure it is - // really needed. - chrome.webRequest.onHeadersReceived.removeListener(doModifyHeaders); - chrome.tabs.onUpdated.removeListener(closeTab); - chrome.tabs.remove(tabId); - setCompleted('doWebRequestModifications'); - } - } - ); - window.open(defaultUrl); -} - -function getSetObjectProperties() { - chrome.tabs.onUpdated.addListener( - function getTabProperties(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - console.log(tab.id + ' ' + tab.index + ' ' + tab.url); - tab.index = 3333333333333333333; - chrome.tabs.onUpdated.removeListener(getTabProperties); - chrome.tabs.remove(tabId); - setCompleted('getSetObjectProperties'); - } - } - ); - window.open(defaultUrl); -} - -function callObjectMethod() { - var storageArea = chrome.storage.sync; - storageArea.clear(); - setCompleted('callObjectMethod()'); -} - -function sendMessageToCS() { - chrome.tabs.onUpdated.addListener( - function messageCS(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.sendMessage(tabId, 'hellooooo!'); - chrome.tabs.onUpdated.removeListener(messageCS); - chrome.tabs.remove(tabId); - setCompleted('sendMessageToCS'); - } - } - ); - window.open(defaultUrl); -} - -function sendMessageToSelf() { - try { - chrome.runtime.sendMessage('hello hello'); - setCompleted('sendMessageToSelf'); - } catch (err) { - setError(err + ' in function: sendMessageToSelf'); - } -} - -function sendMessageToOther() { - try { - chrome.runtime.sendMessage('ocacnieaapoflmkebkeaidpgfngocapl', - 'knock knock', - function response() { - console.log("who's there?"); - }); - setCompleted('sendMessageToOther'); - } catch (err) { - setError(err + ' in function: sendMessageToOther'); - } -} - -function connectToOther() { - try { - chrome.runtime.connect('ocacnieaapoflmkebkeaidpgfngocapl'); - setCompleted('connectToOther'); - } catch (err) { - setError(err + ' in function:connectToOther'); - } -} - -function tabIdTranslation() { - var tabIds = [-1, -1]; - - // Test the case of a single int - chrome.tabs.onUpdated.addListener( - function testSingleInt(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.executeScript( - //tab.id, - {'file': 'google_cs.js'}, - function() { - chrome.tabs.onUpdated.removeListener(testSingleInt); - tabIds[0] = tabId; - window.open('http://www.google.be'); - }); - } - } - ); - - // Test the case of arrays - chrome.tabs.onUpdated.addListener( - function testArray(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && tab.url.match(/google\.be/g)) { - //chrome.tabs.move(tabId, {'index': -1}); - tabIds[1] = tabId; - chrome.tabs.onUpdated.removeListener(testArray); - chrome.tabs.remove(tabIds); - setCompleted('tabIdTranslation'); - } - } - ); - - window.open(defaultUrl); -} - -// DOM API TEST METHODS -- PUT YOUR TESTS BELOW HERE -//////////////////////////////////////////////////////////////////////////////// - -// Does an XHR from this [privileged] context. -function doBackgroundXHR() { - var request = new XMLHttpRequest(); - request.open('POST', defaultUrl, false); - request.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); - try { - request.send(); - } catch (err) { - // doesn't matter if it works or not; should be recorded either way - } - setCompleted('doBackgroundXHR'); -} - -// Does an XHR from inside a content script. -function doContentScriptXHR() { - var code = 'var request = new XMLHttpRequest(); ' + - 'request.open("POST", "http://www.cnn.com", false); ' + - 'request.setRequestHeader("Content-type", ' + - ' "text/plain;charset=UTF-8"); ' + - 'request.send(); ' + - 'document.write("sent an XHR");'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doContentScriptXHR'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the Location object from inside a content script. -function doLocationAccess() { - var code = 'window.location = "http://www.google.com/#foo"; ' + - 'document.location = "http://www.google.com/#bar"; ' + - 'var loc = window.location; ' + - 'loc.assign("http://www.google.com/#fo"); ' + - 'loc.replace("http://www.google.com/#bar");'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doLoctionAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Mutates the DOM tree from inside a content script. -function doDOMMutation1() { - var code = 'var d1 = document.createElement("div"); ' + - 'var d2 = document.createElement("div"); ' + - 'document.body.appendChild(d1); ' + - 'document.body.insertBefore(d2, d1); ' + - 'document.body.replaceChild(d1, d2);'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doDOMMutation1'); - }); - } - } - ); - window.open(defaultUrl); -} - -function doDOMMutation2() { - var code = 'document.write("Hello using document.write"); ' + - 'document.writeln("Hello using document.writeln"); ' + - 'document.body.innerHTML = "Hello using innerHTML";'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doDOMMutation2'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 Navigator API from inside a content script. -function doNavigatorAPIAccess() { - var code = 'var geo = navigator.geolocation; ' + - 'var successCallback = function(x) { }; ' + - 'var errorCallback = function(x) { }; ' + - 'geo.getCurrentPosition(successCallback, errorCallback); '; - 'var id = geo.watchPosition(successCallback, errorCallback);'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doNavigatorAPIAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 WebStorage API from inside a content script. -function doWebStorageAPIAccess1() { - var code = 'var store = window.sessionStorage; ' + - 'store.setItem("foo", 42); ' + - 'var val = store.getItem("foo"); ' + - 'store.removeItem("foo"); ' + - 'store.clear();'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doWebStorageAPIAccess1'); - }); - } - } - ); - window.open(defaultUrl); -} - -function doWebStorageAPIAccess2() { - var code = 'var store = window.sessionStorage; ' + - 'store.setItem("foo", 42); ' + - 'var val = store.getItem("foo"); ' + - 'store.removeItem("foo"); ' + - 'store.clear();'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doWebStorageAPIAccess2'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 Notification API from inside a content script. -function doNotificationAPIAccess() { - var code = 'try {' + - ' webkitNotifications.createNotification("myIcon.png", ' + - ' "myTitle", ' + - ' "myContent");' + - '} catch (e) {}'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doNotifcationAPIAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 ApplicationCache API from inside a content script. -function doApplicationCacheAPIAccess() { - var code = 'var appCache = window.applicationCache;'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doApplictionCacheAPIAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 WebDatabase API from inside a content script. -function doWebDatabaseAPIAccess() { - var code = 'var db = openDatabase("testdb", "1.0", "test database", ' + - ' 1024 * 1024);'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doWebDatabaseAPIAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// Accesses the HTML5 Canvas API from inside a content script. -function doCanvasAPIAccess() { - var code = 'var testCanvas = document.createElement("canvas"); ' + - 'var testContext = testCanvas.getContext("2d");'; - chrome.tabs.onUpdated.addListener( - function callback(tabId, changeInfo, tab) { - if (changeInfo['status'] === 'complete' && - tab.url.match(/google\.com/g)) { - chrome.tabs.onUpdated.removeListener(callback); - chrome.tabs.executeScript( - tab.id, - {'code': code}, - function() { - chrome.tabs.remove(tabId); - setCompleted('doCanvasAPIAccess'); - }); - } - } - ); - window.open(defaultUrl); -} - -// ADD TESTS CASES TO THE MAP HERE. -var fnMap = {}; -fnMap['api_call'] = makeApiCall; -fnMap['special_call'] = makeSpecialApiCalls; -fnMap['blocked_call'] = makeBlockedApiCall; -fnMap['inject_cs'] = injectContentScript; -fnMap['inject_blob'] = injectScriptBlob; -fnMap['webrequest'] = doWebRequestModifications; -fnMap['double'] = checkNoDoubleLogging; -fnMap['app_bindings'] = checkAppCalls; -fnMap['object_properties'] = getSetObjectProperties; -fnMap['object_methods'] = callObjectMethod; -fnMap['message_cs'] = sendMessageToCS; -fnMap['message_self'] = sendMessageToSelf; -fnMap['message_other'] = sendMessageToOther; -fnMap['connect_other'] = connectToOther; -fnMap['tab_ids'] = tabIdTranslation; -fnMap['background_xhr'] = doBackgroundXHR; -fnMap['cs_xhr'] = doContentScriptXHR; -fnMap['location_access'] = doLocationAccess; -fnMap['dom_mutation1'] = doDOMMutation1; -fnMap['dom_mutation2'] = doDOMMutation2; -fnMap['navigator_access'] = doNavigatorAPIAccess; -fnMap['web_storage_access1'] = doWebStorageAPIAccess1; -fnMap['web_storage_access2'] = doWebStorageAPIAccess2; -fnMap['notification_access'] = doNotificationAPIAccess; -fnMap['application_cache_access'] = doApplicationCacheAPIAccess; -fnMap['web_database_access'] = doWebDatabaseAPIAccess; -fnMap['canvas_access'] = doCanvasAPIAccess; - -// Setup function mapping for the automated tests. -try { - chrome.runtime.onMessageExternal.addListener( - function(message, sender, response) { - if (fnMap.hasOwnProperty(message)) { - fnMap[message](); - } else { - console.log('UNKNOWN METHOD: ' + message); - } - } - ); -} catch (err) { - console.log('Error while adding listeners: ' + err); -} - -// Convenience functions for the manual run mode. -function $(o) { - return document.getElementById(o); -} - -var completed = 0; -function setCompleted(str) { - completed++; - if ($('status') != null) { - $('status').innerText = 'Completed ' + str; - } - console.log('[SUCCESS] ' + str); -} - -function setError(str) { - $('status').innerText = 'Error: ' + str; -} - -// Set up the event listeners for use in manual run mode. -function setupEvents() { - for (var key in fnMap) { - if (fnMap.hasOwnProperty(key) && key != '' && $(key) != null) { - $(key).addEventListener('click', fnMap[key]); +chrome.runtime.onMessageExternal.addListener( + function(message, sender, response) { + console.log("received"); } - } - setCompleted('setup events'); - completed = 0; -} -document.addEventListener('DOMContentLoaded', setupEvents); +); diff --git a/chrome/test/data/extensions/api_test/activity_log_private/test/test.js b/chrome/test/data/extensions/api_test/activity_log_private/test/test.js index e354de1..3119f0c 100644 --- a/chrome/test/data/extensions/api_test/activity_log_private/test/test.js +++ b/chrome/test/data/extensions/api_test/activity_log_private/test/test.js @@ -2,353 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Setup the test cases. -var testCases = []; -testCases.push({ - func: function triggerApiCall() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'api_call', function response() { }); - }, - expected_activity: ['cookies.set'] -}); -testCases.push({ - func: function triggerSpecialCall() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'special_call', function response() { }); - }, - expected_activity: [ - 'extension.getURL', - 'extension.getViews' - ] -}); -testCases.push({ - func: function triggerBlockedCall() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'blocked_call', function response() { }); - }, - expected_activity: [] -}); -testCases.push({ - func: function triggerInjectCS() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'inject_cs', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerInsertBlob() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'inject_blob', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove'] -}); -testCases.push({ - func: function triggerDouble() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'double', function response() {}); - }, - expected_activity: ['omnibox.setDefaultSuggestion'] -}); -testCases.push({ - func: function triggerAppBindings() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'app_bindings', function response() { }); - }, - expected_activity: [ - 'app.GetDetails', - 'app.GetIsInstalled', - 'app.getInstallState' - ] -}); -testCases.push({ - func: function triggerObjectProperties() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'object_properties', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.remove'] -}); -testCases.push({ - func: function triggerObjectMethods() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'object_methods', function response() { }); - }, - expected_activity: ['storage.clear'] -}); -testCases.push({ - func: function triggerMessageCS() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'message_cs', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.connect', - 'tabs.sendMessage', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerMessageSelf() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'message_self', function response() { }); - }, - expected_activity: [ - 'runtime.connect', - 'runtime.sendMessage' - ] -}); -testCases.push({ - func: function triggerMessageOther() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'message_other', function response() { }); - }, - expected_activity: [ - 'runtime.connect', - 'runtime.sendMessage' - ] -}); -testCases.push({ - func: function triggerConnectOther() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'connect_other', function response() { }); - }, - expected_activity: ['runtime.connect'] -}); -testCases.push({ - func: function triggerLocationAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'location_access', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerDomMutation1() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'dom_mutation1', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerDomMutation2() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'dom_mutation2', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerNavigatorAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'navigator_access', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerWebStorageAccess1() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'web_storage_access1', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerWebStorageAccess2() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'web_storage_access2', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerNotificationAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'notification_access', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerApplicationCacheAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'application_cache_access', - function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerWebDatabaseAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'web_database_access', - function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - func: function triggerCanvasAccess() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'canvas_access', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); -testCases.push({ - name: 'tab_ids', - func: function triggerTabIds() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'tab_ids', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.remove' - ] -}); - -testCases.push({ - func: function triggerWebRequest() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'webrequest', function response() { }); - }, - expected_activity: [ - 'webRequestInternal.addEventListener', - 'webRequestInternal.addEventListener', - 'webRequest.onBeforeSendHeaders/1', - 'webRequestInternal.eventHandled', - 'webRequest.onBeforeSendHeaders', - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.remove' - ] -}); - -testCases.push({ - func: function triggerBackgroundXHR() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'cs_xhr', function response() { }); - }, - expected_activity: [ - 'tabs.onUpdated', - 'tabs.onUpdated', - 'tabs.executeScript', - 'tabs.remove' - ] -}); - -testCases.push({ - func: function triggerBackgroundXHR() { - chrome.runtime.sendMessage('pknkgggnfecklokoggaggchhaebkajji', - 'background_xhr', function response() { }); - }, - expected_activity: [ - 'XMLHttpRequest.open', - 'XMLHttpRequest.setRequestHeader' - ] -}); - -// Listener to check the expected logging is done in the test cases. -var testCaseIndx = 0; -var callIndx = -1; chrome.activityLogPrivate.onExtensionActivity.addListener( function(activity) { - var activityId = activity['extensionId']; - chrome.test.assertEq('pknkgggnfecklokoggaggchhaebkajji', activityId); - - // Get the api call info from either the chrome activity or dom activity. - var activityType = activity['activityType']; - var activityDetailName = 'chromeActivityDetail'; - if (activity['activityType'] == 'dom') { - activityDetailName = 'domActivityDetail'; - } - - // Check the api call is the one we expected next. - var apiCall = activity[activityDetailName]['apiCall']; - expectedCall = 'runtime.onMessageExternal'; - if (callIndx > -1) { - expectedCall = testCases[testCaseIndx].expected_activity[callIndx]; - } - console.log('Logged:' + apiCall + ' Expected:' + expectedCall); - chrome.test.assertEq(expectedCall, apiCall); - - // If all the expected calls have been logged for this test case then - // mark as suceeded and move to the next. Otherwise look for the next - // expected api call. - if (callIndx == testCases[testCaseIndx].expected_activity.length - 1) { - chrome.test.succeed(); - callIndx = -1; - testCaseIndx++; - } else { - callIndx++; - } + var activityId = activity["extensionId"]; + chrome.test.assertEq("pknkgggnfecklokoggaggchhaebkajji", activityId); + var apiCall = activity["chromeActivityDetail"]["apiCall"]; + chrome.test.assertEq("runtime.onMessageExternal", apiCall); + chrome.test.succeed(); } ); -function getTestCasesToRun() { - var tests = []; - for (var i = 0; i < testCases.length; i++) { - if (testCases[i].func != undefined) { - tests.push(testCases[i].func); - } +chrome.test.runTests([ + function triggerAnActivity() { + chrome.runtime.sendMessage("pknkgggnfecklokoggaggchhaebkajji", + "knock knock", + function response() { }); } - return tests; -} -chrome.test.runTests(getTestCasesToRun()); +]); + |