summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-18 19:26:39 +0000
committerskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-18 19:26:39 +0000
commit761e7160090e0643dc265067e7f833aeedbf9e21 (patch)
treee5d7a5e59ea246e5d4f84112666dd40efe21fce2
parent9288808841602769a316568cb6d14ed6b6d988dc (diff)
downloadchromium_src-761e7160090e0643dc265067e7f833aeedbf9e21.zip
chromium_src-761e7160090e0643dc265067e7f833aeedbf9e21.tar.gz
chromium_src-761e7160090e0643dc265067e7f833aeedbf9e21.tar.bz2
Pass test server port to javascript part of extensions API tests.
BUG=56715 TEST=ExtensionApiTests.(I18N|History|Clipboard,TabConnect) Review URL: http://codereview.chromium.org/3728004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62958 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_apitest.cc31
-rw-r--r--chrome/browser/extensions/extension_apitest.h12
-rw-r--r--chrome/browser/extensions/extension_clipboard_apitest.cc2
-rw-r--r--chrome/browser/extensions/extension_function_dispatcher.cc1
-rw-r--r--chrome/browser/extensions/extension_history_apitest.cc2
-rw-r--r--chrome/browser/extensions/extension_i18n_apitest.cc1
-rw-r--r--chrome/browser/extensions/extension_tabs_apitest.cc13
-rw-r--r--chrome/browser/extensions/extension_test_api.cc46
-rw-r--r--chrome/browser/extensions/extension_test_api.h45
-rw-r--r--chrome/common/extensions/api/extension_api.json48
-rw-r--r--chrome/test/data/extensions/api_test/clipboard/test.js125
-rw-r--r--chrome/test/data/extensions/api_test/history/test.js850
-rw-r--r--chrome/test/data/extensions/api_test/i18n/test.js67
-rw-r--r--chrome/test/data/extensions/api_test/tabs/connect/test.js151
14 files changed, 787 insertions, 607 deletions
diff --git a/chrome/browser/extensions/extension_apitest.cc b/chrome/browser/extensions/extension_apitest.cc
index 3ab39b2..d136b50 100644
--- a/chrome/browser/extensions/extension_apitest.cc
+++ b/chrome/browser/extensions/extension_apitest.cc
@@ -7,6 +7,7 @@
#include "base/string_util.h"
#include "base/stringprintf.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/extensions/extension_test_api.h"
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/profile.h"
#include "chrome/common/notification_registrar.h"
@@ -16,6 +17,12 @@
#include "chrome/browser/chromeos/views/domui_menu_widget.h"
#endif
+namespace {
+
+const char kTestServerPort[] = "testServer.port";
+
+}; // namespace
+
ExtensionApiTest::ResultCatcher::ResultCatcher()
: profile_restriction_(NULL),
waiting_(false) {
@@ -81,6 +88,17 @@ void ExtensionApiTest::ResultCatcher::Observe(
}
}
+void ExtensionApiTest::SetUpInProcessBrowserTestFixture() {
+ DCHECK(!test_config_.get()) << "Previous test did not clear config state.";
+ test_config_.reset(new DictionaryValue());
+ ExtensionTestGetConfigFunction::set_test_config_state(test_config_.get());
+}
+
+void ExtensionApiTest::TearDownInProcessBrowserTestFixture() {
+ ExtensionTestGetConfigFunction::set_test_config_state(NULL);
+ test_config_.reset(NULL);
+}
+
bool ExtensionApiTest::RunExtensionTest(const char* extension_name) {
return RunExtensionTestImpl(extension_name, "", false);
}
@@ -186,6 +204,19 @@ Extension* ExtensionApiTest::GetSingleLoadedExtension() {
return extension;
}
+bool ExtensionApiTest::StartTestServer() {
+ if (!test_server()->Start())
+ return false;
+
+ // Build a dictionary of values that tests can use to build URLs that
+ // access the test server. Tests can see these values using the extension
+ // API function chrome.test.getConfig().
+ test_config_->SetInteger(kTestServerPort,
+ test_server()->host_port_pair().port());
+
+ return true;
+}
+
void ExtensionApiTest::SetUpCommandLine(CommandLine* command_line) {
ExtensionBrowserTest::SetUpCommandLine(command_line);
test_data_dir_ = test_data_dir_.AppendASCII("api_test");
diff --git a/chrome/browser/extensions/extension_apitest.h b/chrome/browser/extensions/extension_apitest.h
index 194750d..b0a0e01 100644
--- a/chrome/browser/extensions/extension_apitest.h
+++ b/chrome/browser/extensions/extension_apitest.h
@@ -9,6 +9,7 @@
#include <deque>
#include <string>
+#include "base/values.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/common/notification_service.h"
@@ -65,6 +66,9 @@ class ExtensionApiTest : public ExtensionBrowserTest {
bool waiting_;
};
+ virtual void SetUpInProcessBrowserTestFixture();
+ virtual void TearDownInProcessBrowserTestFixture();
+
// Load |extension_name| and wait for pass / fail notification.
// |extension_name| is a directory in "test/data/extensions/api_test".
bool RunExtensionTest(const char* extension_name);
@@ -84,6 +88,10 @@ class ExtensionApiTest : public ExtensionBrowserTest {
// API on the page.
bool RunPageTest(const std::string& page_url);
+ // Start the test server, and store details of its state. Those details
+ // will be available to javascript tests using chrome.test.getConfig().
+ bool StartTestServer();
+
// Test that exactly one extension loaded. If so, return a pointer to
// the extension. If not, return NULL and set message_.
Extension* GetSingleLoadedExtension();
@@ -98,6 +106,10 @@ class ExtensionApiTest : public ExtensionBrowserTest {
bool RunExtensionTestImpl(const char* extension_name,
const std::string& test_page,
bool enable_incogntio);
+
+ // Hold details of the test, set in C++, which can be accessed by
+ // javascript using chrome.test.getConfig().
+ scoped_ptr<DictionaryValue> test_config_;
};
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_APITEST_H_
diff --git a/chrome/browser/extensions/extension_clipboard_apitest.cc b/chrome/browser/extensions/extension_clipboard_apitest.cc
index c159f97..1e9a8aa 100644
--- a/chrome/browser/extensions/extension_clipboard_apitest.cc
+++ b/chrome/browser/extensions/extension_clipboard_apitest.cc
@@ -10,6 +10,6 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Clipboard) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("clipboard")) << message_;
}
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index c908c09..621b5b4 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -228,6 +228,7 @@ void FactoryRegistry::ResetFunctions() {
RegisterFunction<ExtensionTestQuotaResetFunction>();
RegisterFunction<ExtensionTestCreateIncognitoTabFunction>();
RegisterFunction<ExtensionTestSendMessageFunction>();
+ RegisterFunction<ExtensionTestGetConfigFunction>();
// Accessibility.
RegisterFunction<GetFocusedControlFunction>();
diff --git a/chrome/browser/extensions/extension_history_apitest.cc b/chrome/browser/extensions/extension_history_apitest.cc
index 9815ac8..1e882be 100644
--- a/chrome/browser/extensions/extension_history_apitest.cc
+++ b/chrome/browser/extensions/extension_history_apitest.cc
@@ -11,7 +11,7 @@
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, FLAKY_History) {
host_resolver()->AddRule("www.a.com", "127.0.0.1");
host_resolver()->AddRule("www.b.com", "127.0.0.1");
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("history")) << message_;
}
diff --git a/chrome/browser/extensions/extension_i18n_apitest.cc b/chrome/browser/extensions/extension_i18n_apitest.cc
index 2798a72..5d52795 100644
--- a/chrome/browser/extensions/extension_i18n_apitest.cc
+++ b/chrome/browser/extensions/extension_i18n_apitest.cc
@@ -5,5 +5,6 @@
#include "chrome/browser/extensions/extension_apitest.h"
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, I18N) {
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("i18n")) << message_;
}
diff --git a/chrome/browser/extensions/extension_tabs_apitest.cc b/chrome/browser/extensions/extension_tabs_apitest.cc
index 886308c..df108f3 100644
--- a/chrome/browser/extensions/extension_tabs_apitest.cc
+++ b/chrome/browser/extensions/extension_tabs_apitest.cc
@@ -37,34 +37,33 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_Tabs) {
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabGetCurrent) {
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("tabs/get_current")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabConnect) {
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("tabs/connect")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabOnRemoved) {
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("tabs/on_removed")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleTabJpeg) {
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab",
"test_jpeg.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleTabPng) {
- ASSERT_TRUE(test_server()->Start());
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab",
"test_png.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabsOnUpdated) {
- ASSERT_TRUE(test_server()->Start());
-
+ ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionTest("tabs/on_updated")) << message_;
}
diff --git a/chrome/browser/extensions/extension_test_api.cc b/chrome/browser/extensions/extension_test_api.cc
index b5f64ba..9fe1749 100644
--- a/chrome/browser/extensions/extension_test_api.cc
+++ b/chrome/browser/extensions/extension_test_api.cc
@@ -12,6 +12,18 @@
#include "chrome/browser/extensions/extensions_quota_service.h"
#include "chrome/common/notification_service.h"
+namespace {
+
+// If you see this error in your test, you need to set the config state
+// to be returned by chrome.test.getConfig(). Do this by calling
+// ExtensionTestGetConfigFunction::set_test_config_state(Value* state)
+// in test set up.
+const char kNoTestConfigDataError[] = "Test configuration was not set.";
+
+} // namespace
+
+ExtensionTestPassFunction::~ExtensionTestPassFunction() {}
+
bool ExtensionTestPassFunction::RunImpl() {
NotificationService::current()->Notify(
NotificationType::EXTENSION_TEST_PASSED,
@@ -20,6 +32,8 @@ bool ExtensionTestPassFunction::RunImpl() {
return true;
}
+ExtensionTestFailFunction::~ExtensionTestFailFunction() {}
+
bool ExtensionTestFailFunction::RunImpl() {
std::string message;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &message));
@@ -30,12 +44,16 @@ bool ExtensionTestFailFunction::RunImpl() {
return true;
}
+ExtensionTestLogFunction::~ExtensionTestLogFunction() {}
+
bool ExtensionTestLogFunction::RunImpl() {
std::string message;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &message));
return true;
}
+ExtensionTestQuotaResetFunction::~ExtensionTestQuotaResetFunction() {}
+
bool ExtensionTestQuotaResetFunction::RunImpl() {
ExtensionsService* service = profile()->GetExtensionsService();
ExtensionsQuotaService* quota = service->quota_service();
@@ -44,6 +62,9 @@ bool ExtensionTestQuotaResetFunction::RunImpl() {
return true;
}
+ExtensionTestCreateIncognitoTabFunction::
+ ~ExtensionTestCreateIncognitoTabFunction() {}
+
bool ExtensionTestCreateIncognitoTabFunction::RunImpl() {
std::string url;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &url));
@@ -61,9 +82,34 @@ bool ExtensionTestSendMessageFunction::RunImpl() {
Details<std::string>(&message));
return true;
}
+ExtensionTestSendMessageFunction::~ExtensionTestSendMessageFunction() {}
void ExtensionTestSendMessageFunction::Reply(const std::string& message) {
result_.reset(Value::CreateStringValue(message));
SendResponse(true);
Release(); // balanced in RunImpl
}
+
+// static
+void ExtensionTestGetConfigFunction::set_test_config_state(
+ DictionaryValue* value) {
+ TestConfigState* test_config_state = Singleton<TestConfigState>::get();
+ test_config_state->set_config_state(value);
+}
+
+ExtensionTestGetConfigFunction::TestConfigState::TestConfigState()
+ : config_state_(NULL) {}
+
+ExtensionTestGetConfigFunction::~ExtensionTestGetConfigFunction() {}
+
+bool ExtensionTestGetConfigFunction::RunImpl() {
+ TestConfigState* test_config_state = Singleton<TestConfigState>::get();
+
+ if (!test_config_state->config_state()) {
+ error_ = kNoTestConfigDataError;
+ return false;
+ }
+
+ result_.reset(test_config_state->config_state()->DeepCopy());
+ return true;
+}
diff --git a/chrome/browser/extensions/extension_test_api.h b/chrome/browser/extensions/extension_test_api.h
index e0b8dce..27b55dc 100644
--- a/chrome/browser/extensions/extension_test_api.h
+++ b/chrome/browser/extensions/extension_test_api.h
@@ -6,34 +6,36 @@
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TEST_API_H_
#pragma once
+#include "base/singleton.h"
+#include "base/values.h"
#include "chrome/browser/extensions/extension_function.h"
class ExtensionTestPassFunction : public SyncExtensionFunction {
- ~ExtensionTestPassFunction() {}
+ ~ExtensionTestPassFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.notifyPass")
};
class ExtensionTestFailFunction : public SyncExtensionFunction {
- ~ExtensionTestFailFunction() {}
+ ~ExtensionTestFailFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.notifyFail")
};
class ExtensionTestLogFunction : public SyncExtensionFunction {
- ~ExtensionTestLogFunction() {}
+ ~ExtensionTestLogFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.log")
};
class ExtensionTestQuotaResetFunction : public SyncExtensionFunction {
- ~ExtensionTestQuotaResetFunction() {}
+ ~ExtensionTestQuotaResetFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.resetQuota")
};
class ExtensionTestCreateIncognitoTabFunction : public SyncExtensionFunction {
- ~ExtensionTestCreateIncognitoTabFunction() {}
+ ~ExtensionTestCreateIncognitoTabFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.createIncognitoTab")
};
@@ -45,9 +47,40 @@ class ExtensionTestSendMessageFunction : public AsyncExtensionFunction {
void Reply(const std::string& message);
private:
- ~ExtensionTestSendMessageFunction() {}
+ ~ExtensionTestSendMessageFunction();
virtual bool RunImpl();
DECLARE_EXTENSION_FUNCTION_NAME("test.sendMessage")
};
+class ExtensionTestGetConfigFunction : public SyncExtensionFunction {
+ public:
+ // Set the dictionary returned by chrome.test.getConfig().
+ // Does not take ownership of |value|.
+ static void set_test_config_state(DictionaryValue* value);
+
+ private:
+ // Tests that set configuration state do so by calling
+ // set_test_config_state() as part of test set up, and unsetting it
+ // during tear down. This singleton class holds a pointer to that
+ // state, owned by the test code.
+ class TestConfigState {
+ public:
+ void set_config_state(DictionaryValue* config_state) {
+ config_state_ = config_state;
+ }
+ const DictionaryValue* config_state() {
+ return config_state_;
+ }
+ private:
+ friend struct DefaultSingletonTraits<TestConfigState>;
+ TestConfigState();
+ DictionaryValue* config_state_;
+ DISALLOW_COPY_AND_ASSIGN(TestConfigState);
+ };
+
+ ~ExtensionTestGetConfigFunction();
+ virtual bool RunImpl();
+ DECLARE_EXTENSION_FUNCTION_NAME("test.getConfig")
+};
+
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TEST_API_H_
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json
index bcf8b4d..dcd73f0 100644
--- a/chrome/common/extensions/api/extension_api.json
+++ b/chrome/common/extensions/api/extension_api.json
@@ -690,7 +690,7 @@
"url": {
"type": "string",
"description": "A URL or list of URLs to open as tabs in the window. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.",
- "optional": true,
+ "optional": true,
"choices": [
{"type": "string"},
{"type": "array", "items": {"type": "string"}}
@@ -2667,9 +2667,9 @@
"type": "string",
"optional": true,
"description": "The text for the context selection, if any."
- },
+ },
"editable": {
- "type": "string",
+ "type": "string",
"description": "A flag indicating whether the element is editable (text input, textarea, etc.)."
}
}
@@ -2726,7 +2726,7 @@
"$ref": "Tab",
"description": "The details of the tab where the click took place."
}
- ]
+ ]
},
"parentId": {
"type": "integer",
@@ -3404,6 +3404,36 @@
"types": [],
"functions": [
{
+ "name": "getConfig",
+ "type": "function",
+ "description": "Gives configuration options set by the test.",
+ "parameters": [
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {
+ "type": "object",
+ "name": "testConfig",
+ "properties": {
+ "testServer": {
+ "type": "object",
+ "optional": true,
+ "description": "Details on the test server used to mock network responses. Will be set only if test calls ExtensionApiTest::StartTestServer().",
+ "properties": {
+ "port": {
+ "type": "integer",
+ "description": "The port on which the test server is listening.",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
"name": "notifyFail",
"type": "function",
"description": "Notify the browser process that test code running in the extension failed. This is only used for internal unit testing.",
@@ -4074,7 +4104,7 @@
"type": "function",
"optional": "true",
"parameters": []
- }
+ }
]
}
],
@@ -4091,7 +4121,7 @@
"type": "function",
"parameters": [
{
- "name": "id",
+ "name": "id",
"type": "string",
"description": "The id of the extension or app that was uninstalled."
}
@@ -4185,9 +4215,9 @@
"type": "string",
"description": "The email address to use to pre-populate the login dialog (can be an empty string)."
},
- {
- "name": "callback",
- "type": "function",
+ {
+ "name": "callback",
+ "type": "function",
"optional": "true",
"parameters": [
{
diff --git a/chrome/test/data/extensions/api_test/clipboard/test.js b/chrome/test/data/extensions/api_test/clipboard/test.js
index 8a50a6f..9377129 100644
--- a/chrome/test/data/extensions/api_test/clipboard/test.js
+++ b/chrome/test/data/extensions/api_test/clipboard/test.js
@@ -1,68 +1,73 @@
// Clipboard API test for Chrome.
// browser_tests.exe --gtest_filter=ExtensionApiTest.Clipboard
-const TEST_URL = "http://localhost:1337/files/extensions/test_file.html";
+const TEST_URL_TMPL = "http://localhost:PORT/files/extensions/test_file.html";
-function setupWindow(callback) {
- chrome.tabs.getSelected(null, function(tab) {
- chrome.tabs.update(tab.id, {"url": TEST_URL}, callback);
- });
-}
+chrome.test.getConfig(function(config) {
-chrome.test.runTests([
- function executeCopy() {
- var onRequestCompleted = chrome.test.listenForever(
- chrome.extension.onRequest,
- function(request, sender, sendResponse) {
- if (request == "start test") {
- chrome.experimental.clipboard.executeCopy(
- sender.tab.id,
- chrome.test.callbackPass());
- } else if (request == "copy event") {
- onRequestCompleted();
- } else {
- chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ var TEST_URL = TEST_URL_TMPL.replace(/PORT/, config.testServer.port);
+
+ function setupWindow(callback) {
+ chrome.tabs.getSelected(null, function(tab) {
+ chrome.tabs.update(tab.id, {"url": TEST_URL}, callback);
+ });
+ }
+
+ chrome.test.runTests([
+ function executeCopy() {
+ var onRequestCompleted = chrome.test.listenForever(
+ chrome.extension.onRequest,
+ function(request, sender, sendResponse) {
+ if (request == "start test") {
+ chrome.experimental.clipboard.executeCopy(
+ sender.tab.id,
+ chrome.test.callbackPass());
+ } else if (request == "copy event") {
+ onRequestCompleted();
+ } else {
+ chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ }
}
- }
- );
- setupWindow();
- },
- function executeCut() {
- var onRequestCompleted = chrome.test.listenForever(
- chrome.extension.onRequest,
- function(request, sender, sendResponse) {
- if (request == "start test") {
- chrome.experimental.clipboard.executeCut(
- sender.tab.id,
- chrome.test.callbackPass());
- } else if (request == "cut event") {
- onRequestCompleted();
- } else {
- chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ );
+ setupWindow();
+ },
+ function executeCut() {
+ var onRequestCompleted = chrome.test.listenForever(
+ chrome.extension.onRequest,
+ function(request, sender, sendResponse) {
+ if (request == "start test") {
+ chrome.experimental.clipboard.executeCut(
+ sender.tab.id,
+ chrome.test.callbackPass());
+ } else if (request == "cut event") {
+ onRequestCompleted();
+ } else {
+ chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ }
}
- }
- );
- setupWindow();
- },
- function executePaste() {
- var onRequestCompleted = chrome.test.listenForever(
- chrome.extension.onRequest,
- function(request, sender, sendResponse) {
- if (request == "start test") {
- chrome.experimental.clipboard.executePaste(
- sender.tab.id,
- chrome.test.callbackPass());
- } else if (request == "paste event") {
- onRequestCompleted();
- } else {
- chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ );
+ setupWindow();
+ },
+ function executePaste() {
+ var onRequestCompleted = chrome.test.listenForever(
+ chrome.extension.onRequest,
+ function(request, sender, sendResponse) {
+ if (request == "start test") {
+ chrome.experimental.clipboard.executePaste(
+ sender.tab.id,
+ chrome.test.callbackPass());
+ } else if (request == "paste event") {
+ onRequestCompleted();
+ } else {
+ chrome.test.fail("Unexpected request: " + JSON.stringify(request));
+ }
}
- }
- );
- setupWindow();
- },
- function domPaste() {
- document.body.addEventListener('paste', chrome.test.callbackPass());
- document.execCommand('paste');
- }
-]);
+ );
+ setupWindow();
+ },
+ function domPaste() {
+ document.body.addEventListener('paste', chrome.test.callbackPass());
+ document.execCommand('paste');
+ }
+ ]);
+});
diff --git a/chrome/test/data/extensions/api_test/history/test.js b/chrome/test/data/extensions/api_test/history/test.js
index f916f5d..708fd8d 100644
--- a/chrome/test/data/extensions/api_test/history/test.js
+++ b/chrome/test/data/extensions/api_test/history/test.js
@@ -7,497 +7,507 @@ var assertEq = chrome.test.assertEq;
var GOOGLE_URL = 'http://www.google.com/';
var PICASA_URL = 'http://www.picasa.com/';
-var A_RELATIVE_URL =
- 'http://www.a.com:1337/files/extensions/api_test/history/a.html';
-var B_RELATIVE_URL =
- 'http://www.b.com:1337/files/extensions/api_test/history/b.html';
-
-/**
-* A helper function to flip the setTimeout arguments and make the code more
-* readable.
-* @param {number} seconds The number of seconds to wait.
-* @param {function} callback Closure.
-*/
-function waitAFewSeconds(seconds, callback) {
- setTimeout(callback, seconds * 1000);
-};
-
-/**
-* Object used for listening to the chrome.history.onVisited events. The global
-* object 'itemVisited' stores the last item received.
-*/
-var itemVisitedCallback = null;
-function itemVisitedListener(visited) {
- if (null != itemVisitedCallback) {
- itemVisitedCallback(visited);
+
+chrome.test.getConfig(function(config) {
+
+ var fixPort = function(url) {
+ return url.replace(/PORT/, config.testServer.port);
};
-};
-
-function removeItemVisitedListener() {
- chrome.history.onVisited.removeListener(itemVisitedListener);
- itemVisitedCallback = null;
-}
-
-function setItemVisitedListener(callback) {
- chrome.history.onVisited.addListener(itemVisitedListener);
- itemVisitedCallback = callback;
-}
-
-function setNextItemVisitedListener(callback) {
- itemVisitedCallback = callback;
-}
-
-/**
-* An object used for listening to the chrome.history.onVisitRemoved events. The
-* global object 'itemRemovedInfo' stores the information from the last callback.
-*/
-var itemRemovedCallback = null;
-function itemRemovedListener(removed) {
- if (null != itemRemovedCallback) {
- itemRemovedCallback(removed);
+ var A_RELATIVE_URL = fixPort(
+ 'http://www.a.com:PORT/files/extensions/api_test/history/a.html');
+ var B_RELATIVE_URL = fixPort(
+ 'http://www.b.com:PORT/files/extensions/api_test/history/b.html');
+
+
+ /**
+ * A helper function to flip the setTimeout arguments and make the code
+ * more readable.
+ * @param {number} seconds The number of seconds to wait.
+ * @param {function} callback Closure.
+ */
+ function waitAFewSeconds(seconds, callback) {
+ setTimeout(callback, seconds * 1000);
};
-};
-
-function removeItemRemovedListener() {
- chrome.history.onVisited.removeListener(itemRemovedListener);
- itemRemovedCallback = null;
-}
-
-function setItemRemovedListener(callback) {
- chrome.history.onVisitRemoved.addListener(itemRemovedListener);
- itemRemovedCallback = callback;
-}
-
-function setNextItemRemovedListener(callback) {
- itemRemovedCallback = callback;
-}
-
-/**
-* An object used for listening to the chrome.history.onVisitRemoved events. Set
-* 'tabCompleteCallback' to a function to add extra processing to the callback.
-* The global object 'tabsCompleteData' contains a list of the last known state
-* of every tab.
-*/
-var tabCompleteCallback = null;
-var tabsCompleteData = {};
-function tabsCompleteListener(tabId, changeInfo) {
- if (changeInfo && changeInfo.status) {
- tabsCompleteData[tabId] = changeInfo.status;
+
+ /**
+ * Object used for listening to the chrome.history.onVisited events. The
+ * global object 'itemVisited' stores the last item received.
+ */
+ var itemVisitedCallback = null;
+ function itemVisitedListener(visited) {
+ if (null != itemVisitedCallback) {
+ itemVisitedCallback(visited);
+ };
};
- if (null != tabCompleteCallback) {
- tabCompleteCallback();
+
+ function removeItemVisitedListener() {
+ chrome.history.onVisited.removeListener(itemVisitedListener);
+ itemVisitedCallback = null;
+ }
+
+ function setItemVisitedListener(callback) {
+ chrome.history.onVisited.addListener(itemVisitedListener);
+ itemVisitedCallback = callback;
+ }
+
+ function setNextItemVisitedListener(callback) {
+ itemVisitedCallback = callback;
+ }
+
+ /**
+ * An object used for listening to the chrome.history.onVisitRemoved events.
+ * The global object 'itemRemovedInfo' stores the information from the last
+ * callback.
+ */
+ var itemRemovedCallback = null;
+ function itemRemovedListener(removed) {
+ if (null != itemRemovedCallback) {
+ itemRemovedCallback(removed);
+ };
};
-};
-
-/**
-* Queries the entire history for items, calling the closure with an argument
-* specifying the the number of items in the query.
-* @param {function(number)} callback The closure.
-*/
-function countItemsInHistory(callback) {
- var query = {'text': ''};
- chrome.history.search(query, function(results) {
- callback(results.length);
- });
-};
-
-/**
-* Populates the history by calling addUrl for each url in the array urls.
-* @param {Array.<string>} urls The array of urls to populate the history.
-* @param {function} callback Closure.
-*/
-function populateHistory(urls, callback) {
- urls.forEach(function(url) {
- chrome.history.addUrl({ 'url': url });
- });
- callback();
-};
-
-chrome.test.runTests([
- // All the tests require a blank state to start from. This test is run
- // first to insure that state can be acheived.
- function clearHistory() {
- chrome.history.deleteAll(pass(function() {
- countItemsInHistory(pass(function(count) {
- assertEq(0, count);
- }));
- }));
- },
-
- function basicSearch() {
- // basicSearch callback.
- function basicSearchTestVerification() {
- removeItemVisitedListener();
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(GOOGLE_URL, results[0].url);
-
- // The test has succeeded.
- chrome.test.succeed();
- });
+
+ function removeItemRemovedListener() {
+ chrome.history.onVisited.removeListener(itemRemovedListener);
+ itemRemovedCallback = null;
+ }
+
+ function setItemRemovedListener(callback) {
+ chrome.history.onVisitRemoved.addListener(itemRemovedListener);
+ itemRemovedCallback = callback;
+ }
+
+ function setNextItemRemovedListener(callback) {
+ itemRemovedCallback = callback;
+ }
+
+ /**
+ * An object used for listening to the chrome.history.onVisitRemoved events.
+ * Set 'tabCompleteCallback' to a function to add extra processing to the
+ * callback. The global object 'tabsCompleteData' contains a list of the
+ * last known state of every tab.
+ */
+ var tabCompleteCallback = null;
+ var tabsCompleteData = {};
+ function tabsCompleteListener(tabId, changeInfo) {
+ if (changeInfo && changeInfo.status) {
+ tabsCompleteData[tabId] = changeInfo.status;
};
+ if (null != tabCompleteCallback) {
+ tabCompleteCallback();
+ };
+ };
- // basicSearch entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(basicSearchTestVerification);
- populateHistory([GOOGLE_URL], function() { });
+ /**
+ * Queries the entire history for items, calling the closure with an argument
+ * specifying the the number of items in the query.
+ * @param {function(number)} callback The closure.
+ */
+ function countItemsInHistory(callback) {
+ var query = {'text': ''};
+ chrome.history.search(query, function(results) {
+ callback(results.length);
+ });
+ }
+
+ /**
+ * Populates the history by calling addUrl for each url in the array urls.
+ * @param {Array.<string>} urls The array of urls to populate the history.
+ * @param {function} callback Closure.
+ */
+ function populateHistory(urls, callback) {
+ urls.forEach(function(url) {
+ chrome.history.addUrl({ 'url': url });
});
- },
+ callback();
+ }
+
+ chrome.test.runTests([
+ // All the tests require a blank state to start from. This test is run
+ // first to insure that state can be acheived.
+ function clearHistory() {
+ chrome.history.deleteAll(pass(function() {
+ countItemsInHistory(pass(function(count) {
+ assertEq(0, count);
+ }));
+ }));
+ },
- function timeScopedSearch() {
- var startDate = {};
- var endDate = {};
+ function basicSearch() {
+ // basicSearch callback.
+ function basicSearchTestVerification() {
+ removeItemVisitedListener();
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(GOOGLE_URL, results[0].url);
- function timeScopedSearchTestVerification() {
- removeItemVisitedListener();
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ };
- var query = { 'text': '',
- 'startTime': startDate.getTime(),
- 'endTime': endDate.getTime() };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(GOOGLE_URL, results[0].url);
+ // basicSearch entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(basicSearchTestVerification);
+ populateHistory([GOOGLE_URL], function() { });
+ });
+ },
- // The test has succeeded.
- chrome.test.succeed();
- });
- };
+ function timeScopedSearch() {
+ var startDate = {};
+ var endDate = {};
- function onAddedItem() {
- // Set the next test callback.
- setNextItemVisitedListener(timeScopedSearchTestVerification);
+ function timeScopedSearchTestVerification() {
+ removeItemVisitedListener();
- // Chrome has seconds resolution, so we must wait in order to search
- // a range.
- waitAFewSeconds(2, function() {
- endDate = new Date();
- endDate.setTime(endDate.getTime() - 500);
- populateHistory([PICASA_URL], function() { });
- });
- };
+ var query = { 'text': '',
+ 'startTime': startDate.getTime(),
+ 'endTime': endDate.getTime() };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(GOOGLE_URL, results[0].url);
- // timeScopedSearch entry point.
- chrome.history.deleteAll(function() {
- // Set the test callback.
- setItemVisitedListener(onAddedItem);
- // Set the start time a few seconds in the past.
- startDate = new Date();
- startDate.setTime(startDate.getTime() - 1000);
- populateHistory([GOOGLE_URL], function() { });
- });
- },
-
- function searchWithIntegerTimes() {
- chrome.history.deleteAll(function() {
- // Search with an integer time range.
- var query = { 'text': '',
- 'startTime': 0,
- 'endTime': 12345678 };
- chrome.history.search(query, function(results) {
- assertEq(0, results.length);
- chrome.test.succeed();
- });
- });
- },
-
- // Give time epochs x,y,z and history events A,B which occur in the sequence
- // x A y B z, this test scopes the search to the interval [y,z] to test that
- // [x,y) is excluded. The previous test scoped to the interval [x,y].
- function timeScopedSearch2() {
- var startDate = {};
- var endDate = {};
-
- function timeScopedSearch2TestVerification() {
- removeItemVisitedListener();
-
- endDate = new Date();
- endDate.setTime(endDate.getTime() + 1000);
- var query = { 'text': '',
- 'startTime': startDate.getTime(),
- 'endTime': endDate.getTime() };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(PICASA_URL, results[0].url);
-
- // The test has succeeded.
- chrome.test.succeed();
- });
- };
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ };
- function onAddedItem() {
- // Set the next test callback.
- setNextItemVisitedListener(timeScopedSearch2TestVerification);
+ function onAddedItem() {
+ // Set the next test callback.
+ setNextItemVisitedListener(timeScopedSearchTestVerification);
- // Chrome has seconds resolution, so we must wait in order to search
- // a range.
- waitAFewSeconds(2, function() {
+ // Chrome has seconds resolution, so we must wait in order to search
+ // a range.
+ waitAFewSeconds(2, function() {
+ endDate = new Date();
+ endDate.setTime(endDate.getTime() - 500);
+ populateHistory([PICASA_URL], function() { });
+ });
+ };
+
+ // timeScopedSearch entry point.
+ chrome.history.deleteAll(function() {
+ // Set the test callback.
+ setItemVisitedListener(onAddedItem);
+ // Set the start time a few seconds in the past.
startDate = new Date();
startDate.setTime(startDate.getTime() - 1000);
- populateHistory([PICASA_URL], function() { });
+ populateHistory([GOOGLE_URL], function() { });
});
- };
+ },
+
+ function searchWithIntegerTimes() {
+ chrome.history.deleteAll(function() {
+ // Search with an integer time range.
+ var query = { 'text': '',
+ 'startTime': 0,
+ 'endTime': 12345678 };
+ chrome.history.search(query, function(results) {
+ assertEq(0, results.length);
+ chrome.test.succeed();
+ });
+ });
+ },
- // timeScopedSearch entry point.
- chrome.history.deleteAll(function() {
- // Set the test callback.
- setItemVisitedListener(onAddedItem);
- populateHistory([GOOGLE_URL], function() { });
- });
- },
+ // Give time epochs x,y,z and history events A,B which occur in the sequence
+ // x A y B z, this test scopes the search to the interval [y,z] to test that
+ // [x,y) is excluded. The previous test scoped to the interval [x,y].
+ function timeScopedSearch2() {
+ var startDate = {};
+ var endDate = {};
- function lengthScopedSearch() {
- var urls = [GOOGLE_URL, PICASA_URL];
- var urlsAdded = 0;
+ function timeScopedSearch2TestVerification() {
+ removeItemVisitedListener();
- function lengthScopedSearchTestVerification() {
- // Ensure all urls have been added.
- urlsAdded += 1;
- if (urlsAdded < urls.length)
- return;
+ endDate = new Date();
+ endDate.setTime(endDate.getTime() + 1000);
+ var query = { 'text': '',
+ 'startTime': startDate.getTime(),
+ 'endTime': endDate.getTime() };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(PICASA_URL, results[0].url);
- removeItemVisitedListener();
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ }
+
+ function onAddedItem() {
+ // Set the next test callback.
+ setNextItemVisitedListener(timeScopedSearch2TestVerification);
- var query = { 'text': '', 'maxResults': 1 };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(PICASA_URL, results[0].url);
+ // Chrome has seconds resolution, so we must wait in order to search
+ // a range.
+ waitAFewSeconds(2, function() {
+ startDate = new Date();
+ startDate.setTime(startDate.getTime() - 1000);
+ populateHistory([PICASA_URL], function() { });
+ });
+ };
- // The test has succeeded.
- chrome.test.succeed();
+ // timeScopedSearch entry point.
+ chrome.history.deleteAll(function() {
+ // Set the test callback.
+ setItemVisitedListener(onAddedItem);
+ populateHistory([GOOGLE_URL], function() { });
});
- };
+ },
- // lengthScopedSearch entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(lengthScopedSearchTestVerification);
- populateHistory(urls, function() { });
- });
- },
-
- function fullTextSearch() {
- chrome.history.deleteAll(function() {
- // The continuation of the test after the windows have been opened.
- var validateTest = function() {
- // Continue with the test.
- // A title search for www.a.com should find a.
- var query = { 'text': 'www.a.com' };
+ function lengthScopedSearch() {
+ var urls = [GOOGLE_URL, PICASA_URL];
+ var urlsAdded = 0;
+
+ function lengthScopedSearchTestVerification() {
+ // Ensure all urls have been added.
+ urlsAdded += 1;
+ if (urlsAdded < urls.length)
+ return;
+
+ removeItemVisitedListener();
+
+ var query = { 'text': '', 'maxResults': 1 };
chrome.history.search(query, function(results) {
assertEq(1, results.length);
- assertEq(A_RELATIVE_URL, results[0].url);
+ assertEq(PICASA_URL, results[0].url);
- // Text in the body of b.html.
- query = { 'text': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(B_RELATIVE_URL, results[0].url);
-
- // The test has succeeded.
- chrome.test.succeed();
- });
+ // The test has succeeded.
+ chrome.test.succeed();
});
};
- // Setup a callback object for tab events.
- var urls = [A_RELATIVE_URL, B_RELATIVE_URL];
- var tabIds = [];
+ // lengthScopedSearch entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(lengthScopedSearchTestVerification);
+ populateHistory(urls, function() { });
+ });
+ },
+
+ function fullTextSearch() {
+ chrome.history.deleteAll(function() {
+ // The continuation of the test after the windows have been opened.
+ var validateTest = function() {
+ // Continue with the test.
+ // A title search for www.a.com should find a.
+ var query = { 'text': 'www.a.com' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(A_RELATIVE_URL, results[0].url);
- function listenerCallback() {
- if (tabIds.length < urls.length) {
- return;
+ // Text in the body of b.html.
+ query = { 'text': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(B_RELATIVE_URL, results[0].url);
+
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ });
};
- // Ensure both tabs have completed loading.
- for (var index = 0, id; id = tabIds[index]; index++) {
- if (!tabsCompleteData[id] ||
- tabsCompleteData[id] != 'complete') {
+ // Setup a callback object for tab events.
+ var urls = [A_RELATIVE_URL, B_RELATIVE_URL];
+ var tabIds = [];
+
+ function listenerCallback() {
+ if (tabIds.length < urls.length) {
return;
- };
- };
+ }
+
+ // Ensure both tabs have completed loading.
+ for (var index = 0, id; id = tabIds[index]; index++) {
+ if (!tabsCompleteData[id] ||
+ tabsCompleteData[id] != 'complete') {
+ return;
+ };
+ }
+
+ // Unhook callbacks.
+ tabCompleteCallback = null;
+ chrome.tabs.onUpdated.removeListener(tabsCompleteListener);
+
+ // Allow indexing to occur.
+ waitAFewSeconds(2, function() {
+ validateTest();
+ });
+ }
- // Unhook callbacks.
- tabCompleteCallback = null;
- chrome.tabs.onUpdated.removeListener(tabsCompleteListener);
+ tabCompleteCallback = listenerCallback;
+ chrome.tabs.onUpdated.addListener(tabsCompleteListener);
- // Allow indexing to occur.
- waitAFewSeconds(2, function() {
- validateTest();
+ // Navigate to a few pages.
+ urls.forEach(function(url) {
+ chrome.tabs.create({ 'url': url }, function(tab) {
+ tabIds.push(tab.id);
+ });
});
- };
+ });
+ },
- tabCompleteCallback = listenerCallback;
- chrome.tabs.onUpdated.addListener(tabsCompleteListener);
+ function getVisits() {
+ // getVisits callback.
+ function getVisitsTestVerification() {
+ removeItemVisitedListener();
- // Navigate to a few pages.
- urls.forEach(function(url) {
- chrome.tabs.create({ 'url': url }, function(tab) {
- tabIds.push(tab.id);
+ // Verify that we received the url.
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(GOOGLE_URL, results[0].url);
+
+ var id = results[0].id;
+ chrome.history.getVisits({ 'url': GOOGLE_URL }, function(results) {
+ assertEq(1, results.length);
+ assertEq(id, results[0].id);
+
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
});
- });
- });
- },
+ };
- function getVisits() {
- // getVisits callback.
- function getVisitsTestVerification() {
- removeItemVisitedListener();
+ // getVisits entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(getVisitsTestVerification);
+ populateHistory([GOOGLE_URL], function() { });
+ });
+ },
- // Verify that we received the url.
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(GOOGLE_URL, results[0].url);
+ function deleteUrl() {
+ function deleteUrlTestVerification() {
+ removeItemRemovedListener();
- var id = results[0].id;
- chrome.history.getVisits({ 'url': GOOGLE_URL }, function(results) {
- assertEq(1, results.length);
- assertEq(id, results[0].id);
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(0, results.length);
// The test has succeeded.
chrome.test.succeed();
});
- });
- };
+ }
- // getVisits entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(getVisitsTestVerification);
- populateHistory([GOOGLE_URL], function() { });
- });
- },
+ function onAddedItem() {
+ removeItemVisitedListener();
- function deleteUrl() {
- function deleteUrlTestVerification() {
- removeItemRemovedListener();
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(GOOGLE_URL, results[0].url);
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(0, results.length);
+ chrome.history.deleteUrl({ 'url': GOOGLE_URL });
+ });
+ }
- // The test has succeeded.
- chrome.test.succeed();
+ // deleteUrl entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(onAddedItem);
+ setItemRemovedListener(deleteUrlTestVerification);
+ populateHistory([GOOGLE_URL], function() { });
});
- };
+ },
- function onAddedItem() {
- removeItemVisitedListener();
+ function deleteRange() {
+ var urls = [GOOGLE_URL, PICASA_URL];
+ var startDate = {};
+ var endDate = {};
+ var itemsAdded = 0;
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(GOOGLE_URL, results[0].url);
+ function deleteRangeTestVerification() {
+ removeItemRemovedListener();
- chrome.history.deleteUrl({ 'url': GOOGLE_URL });
- });
- };
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(PICASA_URL, results[0].url);
- // deleteUrl entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(onAddedItem);
- setItemRemovedListener(deleteUrlTestVerification);
- populateHistory([GOOGLE_URL], function() { });
- });
- },
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ }
- function deleteRange() {
- var urls = [GOOGLE_URL, PICASA_URL];
- var startDate = {};
- var endDate = {};
- var itemsAdded = 0;
+ function onAddedItem() {
+ itemsAdded += 1;
- function deleteRangeTestVerification() {
- removeItemRemovedListener();
+ if (itemsAdded < urls.length) {
+ // Chrome has seconds resolution, so we must wait to search a range.
+ waitAFewSeconds(2, function() {
+ endDate = new Date();
+ endDate.setTime(endDate.getTime() - 1000);
+ populateHistory([urls[itemsAdded]], function() { });
+ });
+ return;
+ }
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(PICASA_URL, results[0].url);
+ removeItemVisitedListener();
+ chrome.history.deleteRange({ 'startTime': startDate.getTime(),
+ 'endTime': endDate.getTime() },
+ function() { });
+ }
- // The test has succeeded.
- chrome.test.succeed();
- });
- };
+ // deletRange entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(onAddedItem);
+ setItemRemovedListener(deleteRangeTestVerification);
- function onAddedItem() {
- itemsAdded += 1;
+ startDate = new Date();
+ startDate.setTime(startDate.getTime() - 1000);
- if (itemsAdded < urls.length) {
- // Chrome has seconds resolution, so we must wait to search a range.
- waitAFewSeconds(2, function() {
- endDate = new Date();
- endDate.setTime(endDate.getTime() - 1000);
- populateHistory([urls[itemsAdded]], function() { });
- });
- return;
- };
+ populateHistory([urls[itemsAdded]], function() { });
+ });
+ },
- removeItemVisitedListener();
- chrome.history.deleteRange({ 'startTime': startDate.getTime(),
- 'endTime': endDate.getTime() },
- function() { });
- };
+ // Suppose we have time epochs x,y,z and history events A,B which occur
+ // in the sequence x A y B z. The previous deleteRange test deleted the
+ // range [x,y], this test deletes the range [y,z].
+ function deleteRange2() {
+ var urls = [GOOGLE_URL, PICASA_URL];
+ var startDate = {};
+ var endDate = {};
+ var itemsAdded = 0;
- // deletRange entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(onAddedItem);
- setItemRemovedListener(deleteRangeTestVerification);
+ function deleteRange2TestVerification() {
+ removeItemRemovedListener();
- startDate = new Date();
- startDate.setTime(startDate.getTime() - 1000);
+ var query = { 'text': '' };
+ chrome.history.search(query, function(results) {
+ assertEq(1, results.length);
+ assertEq(GOOGLE_URL, results[0].url);
- populateHistory([urls[itemsAdded]], function() { });
- });
- },
-
- // Suppose we have time epochs x,y,z and history events A,B which occur in the
- // sequence x A y B z. The previous deleteRange test deleted the range [x,y],
- // this test deletes the range [y,z].
- function deleteRange2() {
- var urls = [GOOGLE_URL, PICASA_URL];
- var startDate = {};
- var endDate = {};
- var itemsAdded = 0;
-
- function deleteRange2TestVerification() {
- removeItemRemovedListener();
-
- var query = { 'text': '' };
- chrome.history.search(query, function(results) {
- assertEq(1, results.length);
- assertEq(GOOGLE_URL, results[0].url);
-
- // The test has succeeded.
- chrome.test.succeed();
- });
- };
+ // The test has succeeded.
+ chrome.test.succeed();
+ });
+ }
- function onAddedItem() {
- itemsAdded += 1;
+ function onAddedItem() {
+ itemsAdded += 1;
- if (itemsAdded < urls.length) {
- // Chrome has seconds resolution, so we must wait to search a range.
- waitAFewSeconds(2, function() {
- startDate = new Date();
- startDate.setTime(startDate.getTime() - 1000);
- populateHistory([urls[itemsAdded]], function() { });
- });
- return;
- };
+ if (itemsAdded < urls.length) {
+ // Chrome has seconds resolution, so we must wait to search a range.
+ waitAFewSeconds(2, function() {
+ startDate = new Date();
+ startDate.setTime(startDate.getTime() - 1000);
+ populateHistory([urls[itemsAdded]], function() { });
+ });
+ return;
+ }
- removeItemVisitedListener();
+ removeItemVisitedListener();
- endDate = new Date();
- endDate.setTime(endDate.getTime() + 1000);
- chrome.history.deleteRange({ 'startTime': startDate.getTime(),
- 'endTime': endDate.getTime() },
- function() { });
- };
+ endDate = new Date();
+ endDate.setTime(endDate.getTime() + 1000);
+ chrome.history.deleteRange({'startTime': startDate.getTime(),
+ 'endTime': endDate.getTime() },
+ function() { });
+ }
+
+ // deletRange entry point.
+ chrome.history.deleteAll(function() {
+ setItemVisitedListener(onAddedItem);
+ setItemRemovedListener(deleteRange2TestVerification);
+ populateHistory([urls[itemsAdded]], function() { });
+ });
+ },
+ ]);
- // deletRange entry point.
- chrome.history.deleteAll(function() {
- setItemVisitedListener(onAddedItem);
- setItemRemovedListener(deleteRange2TestVerification);
- populateHistory([urls[itemsAdded]], function() { });
- });
- },
-]);
+});
diff --git a/chrome/test/data/extensions/api_test/i18n/test.js b/chrome/test/data/extensions/api_test/i18n/test.js
index 40807f42..4c4671b 100644
--- a/chrome/test/data/extensions/api_test/i18n/test.js
+++ b/chrome/test/data/extensions/api_test/i18n/test.js
@@ -2,38 +2,45 @@
// browser_tests.exe --gtest_filter=ExtensionApiTest.I18N --lib=browser_tests
var testCallback = chrome.test.testCallback;
+var callbackPass = chrome.test.callbackPass;
-chrome.test.runTests([
- function getAcceptLanguages() {
- chrome.i18n.getAcceptLanguages(chrome.test.callbackPass(function(results) {
- chrome.test.assertEq(results.length, 2);
- chrome.test.assertEq(results[0], "en-US");
- chrome.test.assertEq(results[1], "en");
- }));
- },
- function getMessage() {
- var message = chrome.i18n.getMessage("simple_message");
- chrome.test.assertEq(message, "Simple message");
+chrome.test.getConfig(function(config) {
- message = chrome.i18n.getMessage("message_with_placeholders",
+ var TEST_FILE_URL = "http://localhost:PORT/files/extensions/test_file.html"
+ .replace(/PORT/, config.testServer.port);
+
+ chrome.test.runTests([
+ function getAcceptLanguages() {
+ chrome.i18n.getAcceptLanguages(callbackPass(function(results) {
+ chrome.test.assertEq(results.length, 2);
+ chrome.test.assertEq(results[0], "en-US");
+ chrome.test.assertEq(results[1], "en");
+ }));
+ },
+ function getMessage() {
+ var message = chrome.i18n.getMessage("simple_message");
+ chrome.test.assertEq(message, "Simple message");
+
+ message = chrome.i18n.getMessage("message_with_placeholders",
["Cira", "John"]);
- chrome.test.assertEq(message, "Cira and John work for Google");
+ chrome.test.assertEq(message, "Cira and John work for Google");
- message = chrome.i18n.getMessage("message_with_one_placeholder", "19");
- chrome.test.assertEq(message, "Number of errors: 19");
+ message = chrome.i18n.getMessage("message_with_one_placeholder", "19");
+ chrome.test.assertEq(message, "Number of errors: 19");
- chrome.test.succeed();
- },
- function getMessageFromContentScript() {
- chrome.extension.onRequest.addListener(
- function(request, sender, sendResponse) {
- chrome.test.assertEq(request, "Number of errors: 19");
- }
- );
- chrome.test.log("Creating tab...");
- chrome.tabs.create({
- url: "http://localhost:1337/files/extensions/test_file.html"
- });
- chrome.test.succeed();
- }
-]);
+ chrome.test.succeed();
+ },
+ function getMessageFromContentScript() {
+ chrome.extension.onRequest.addListener(
+ function(request, sender, sendResponse) {
+ chrome.test.assertEq(request, "Number of errors: 19");
+ }
+ );
+ chrome.test.log("Creating tab...");
+ chrome.tabs.create({
+ url: TEST_FILE_URL
+ });
+ chrome.test.succeed();
+ }
+ ]);
+});
diff --git a/chrome/test/data/extensions/api_test/tabs/connect/test.js b/chrome/test/data/extensions/api_test/tabs/connect/test.js
index 16c8b0e..d3d969b 100644
--- a/chrome/test/data/extensions/api_test/tabs/connect/test.js
+++ b/chrome/test/data/extensions/api_test/tabs/connect/test.js
@@ -9,90 +9,95 @@ var pass = chrome.test.callbackPass;
var assertEq = chrome.test.assertEq;
var assertTrue = chrome.test.assertTrue;
-chrome.test.runTests([
- function setupConnect() {
- // The web page that our content script will be injected into.
- var relativePath = '/files/extensions/api_test/tabs/basics/relative.html';
- var testUrl = 'http://localhost:1337' + relativePath;
+chrome.test.getConfig(function(config) {
- setupWindow([testUrl], pass(function(winId, tabIds) {
- testTabId = tabIds[0];
- waitForAllTabs(pass());
- }));
- },
+ chrome.test.runTests([
+ function setupConnect() {
+ // The web page that our content script will be injected into.
+ var relativePath = '/files/extensions/api_test/tabs/basics/relative.html';
+ var testUrl =
+ ['http://localhost:PORT'.replace(/PORT/, config.testServer.port),
+ relativePath].join('');
- function connectMultipleConnects() {
- var connectCount = 0;
- function connect10() {
- var port = chrome.tabs.connect(testTabId);
+ setupWindow([testUrl], pass(function(winId, tabIds) {
+ testTabId = tabIds[0];
+ waitForAllTabs(pass());
+ }));
+ },
+
+ function connectMultipleConnects() {
+ var connectCount = 0;
+ function connect10() {
+ var port = chrome.tabs.connect(testTabId);
+ chrome.test.listenOnce(port.onMessage, function(msg) {
+ assertEq(++connectCount, msg.connections);
+ if (connectCount < 10)
+ connect10();
+ });
+ port.postMessage("GET");
+ }
+ connect10();
+ },
+
+ function connectName() {
+ var name = "akln3901n12la";
+ var port = chrome.tabs.connect(testTabId, {"name": name});
chrome.test.listenOnce(port.onMessage, function(msg) {
- assertEq(++connectCount, msg.connections);
- if (connectCount < 10)
- connect10();
+ assertEq(name, msg.name);
+
+ var port = chrome.tabs.connect(testTabId);
+ chrome.test.listenOnce(port.onMessage, function(msg) {
+ assertEq('', msg.name);
+ });
+ port.postMessage("GET");
});
port.postMessage("GET");
- }
- connect10();
- },
-
- function connectName() {
- var name = "akln3901n12la";
- var port = chrome.tabs.connect(testTabId, {"name": name});
- chrome.test.listenOnce(port.onMessage, function(msg) {
- assertEq(name, msg.name);
+ },
+ function connectPostMessageTypes() {
var port = chrome.tabs.connect(testTabId);
+ // Test the content script echoes the message back.
+ var echoMsg = {"num": 10, "string": "hi", "array": [1,2,3,4,5],
+ "obj":{"dec": 1.0}};
chrome.test.listenOnce(port.onMessage, function(msg) {
- assertEq('', msg.name);
+ assertEq(echoMsg.num, msg.num);
+ assertEq(echoMsg.string, msg.string);
+ assertEq(echoMsg.array[4], msg.array[4]);
+ assertEq(echoMsg.obj.dec, msg.obj.dec);
});
- port.postMessage("GET");
- });
- port.postMessage("GET");
- },
-
- function connectPostMessageTypes() {
- var port = chrome.tabs.connect(testTabId);
- // Test the content script echoes the message back.
- var echoMsg = {"num": 10, "string": "hi", "array": [1,2,3,4,5],
- "obj":{"dec": 1.0}};
- chrome.test.listenOnce(port.onMessage, function(msg) {
- assertEq(echoMsg.num, msg.num);
- assertEq(echoMsg.string, msg.string);
- assertEq(echoMsg.array[4], msg.array[4]);
- assertEq(echoMsg.obj.dec, msg.obj.dec);
- });
- port.postMessage(echoMsg);
- },
+ port.postMessage(echoMsg);
+ },
- function connectPostManyMessages() {
- var port = chrome.tabs.connect(testTabId);
- var count = 0;
- var done = chrome.test.listenForever(port.onMessage, function(msg) {
- assertEq(count++, msg);
- if (count == 999) {
- done();
+ function connectPostManyMessages() {
+ var port = chrome.tabs.connect(testTabId);
+ var count = 0;
+ var done = chrome.test.listenForever(port.onMessage, function(msg) {
+ assertEq(count++, msg);
+ if (count == 999) {
+ done();
+ }
+ });
+ for (var i = 0; i < 1000; i++) {
+ port.postMessage(i);
}
- });
- for (var i = 0; i < 1000; i++) {
- port.postMessage(i);
- }
- },
+ },
- /* TODO: Enable this test once we do checking on the tab id for
- chrome.tabs.connect (crbug.com/27565).
- function connectNoTab() {
- chrome.tabs.create({}, pass(function(tab) {
- chrome.tabs.remove(tab.id, pass(function() {
- var port = chrome.tabs.connect(tab.id);
- assertEq(null, port);
+ /* TODO: Enable this test once we do checking on the tab id for
+ chrome.tabs.connect (crbug.com/27565).
+ function connectNoTab() {
+ chrome.tabs.create({}, pass(function(tab) {
+ chrome.tabs.remove(tab.id, pass(function() {
+ var port = chrome.tabs.connect(tab.id);
+ assertEq(null, port);
+ }));
}));
- }));
- }, */
+ }, */
- function sendRequest() {
- var request = "test";
- chrome.tabs.sendRequest(testTabId, request, pass(function(response) {
- assertEq(request, response);
- }));
- }
-]);
+ function sendRequest() {
+ var request = "test";
+ chrome.tabs.sendRequest(testTabId, request, pass(function(response) {
+ assertEq(request, response);
+ }));
+ }
+ ]);
+});