summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormihaip@chromium.org <mihaip@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 18:20:50 +0000
committermihaip@chromium.org <mihaip@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 18:20:50 +0000
commitd45ce251fa02d368846e01f4b44f893947f5e13e (patch)
tree1e741b8e6a9312f6fa3213d231294f0ad51ef7b2 /chrome
parent79538568397b04e8938c487bdd820ba96c933dcb (diff)
downloadchromium_src-d45ce251fa02d368846e01f4b44f893947f5e13e.zip
chromium_src-d45ce251fa02d368846e01f4b44f893947f5e13e.tar.gz
chromium_src-d45ce251fa02d368846e01f4b44f893947f5e13e.tar.bz2
Add test for chrome.tabs.executeScript after the frames have finished loading.
Add a test that verifies that we can still execute scripts after a frame has loaded, even when that frame loaded after the main document has completed. R=aa@chromium.org BUG=78854 TEST=ExecuteScriptApiTest.ExecuteScriptFrameAfterLoad Review URL: http://codereview.chromium.org/6813064 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81122 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/execute_script_apitest.cc6
-rw-r--r--chrome/test/data/extensions/api_test/executescript/frame_after_load/inner.html1
-rw-r--r--chrome/test/data/extensions/api_test/executescript/frame_after_load/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/executescript/frame_after_load/outer.html1
-rw-r--r--chrome/test/data/extensions/api_test/executescript/frame_after_load/test.html39
5 files changed, 54 insertions, 0 deletions
diff --git a/chrome/browser/extensions/execute_script_apitest.cc b/chrome/browser/extensions/execute_script_apitest.cc
index b3110ee..568c85f 100644
--- a/chrome/browser/extensions/execute_script_apitest.cc
+++ b/chrome/browser/extensions/execute_script_apitest.cc
@@ -62,3 +62,9 @@ IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, MAYBE_NavigationRace) {
ASSERT_TRUE(RunExtensionSubtest("executescript/navigation_race",
"javascript_url.html")) << message_;
}
+
+IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFrameAfterLoad) {
+ SetupDelayedHostResolver();
+ ASSERT_TRUE(StartTestServer());
+ ASSERT_TRUE(RunExtensionTest("executescript/frame_after_load")) << message_;
+}
diff --git a/chrome/test/data/extensions/api_test/executescript/frame_after_load/inner.html b/chrome/test/data/extensions/api_test/executescript/frame_after_load/inner.html
new file mode 100644
index 0000000..34da0d9
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/executescript/frame_after_load/inner.html
@@ -0,0 +1 @@
+inner frame contents
diff --git a/chrome/test/data/extensions/api_test/executescript/frame_after_load/manifest.json b/chrome/test/data/extensions/api_test/executescript/frame_after_load/manifest.json
new file mode 100644
index 0000000..bfead54
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/executescript/frame_after_load/manifest.json
@@ -0,0 +1,7 @@
+{
+ "version": "1.0.0.0",
+ "name": "executeScript after frame has loaded test",
+ "description": "Test extension API: executeScript after frame has loaded",
+ "background_page": "test.html",
+ "permissions": ["tabs", "http://a.com/"]
+}
diff --git a/chrome/test/data/extensions/api_test/executescript/frame_after_load/outer.html b/chrome/test/data/extensions/api_test/executescript/frame_after_load/outer.html
new file mode 100644
index 0000000..66adac4
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/executescript/frame_after_load/outer.html
@@ -0,0 +1 @@
+outer document contents
diff --git a/chrome/test/data/extensions/api_test/executescript/frame_after_load/test.html b/chrome/test/data/extensions/api_test/executescript/frame_after_load/test.html
new file mode 100644
index 0000000..6c507d4
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/executescript/frame_after_load/test.html
@@ -0,0 +1,39 @@
+<script>
+
+var baseUrl = 'http://a.com:PORT/files/extensions/api_test/executescript/' +
+ 'frame_after_load/';
+
+chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
+ if (changeInfo.status != 'complete')
+ return;
+
+ chrome.test.runTests([
+ function() {
+ // Tests that we can still execute scripts after a frame has loaded after
+ // the main document has completed.
+ var injectFrameCode = 'var frame = document.createElement("iframe");' +
+ 'frame.src = "' + baseUrl + 'inner.html";' +
+ 'frame.onload = function() {chrome.extension.connect().postMessage("loaded")};' +
+ 'document.body.appendChild(frame)';
+ var postFrameCode = 'chrome.extension.connect().postMessage("done");';
+
+ chrome.self.onConnect.addListener(function(port) {
+ port.onMessage.addListener(function(data) {
+ if (data == 'loaded') {
+ chrome.tabs.executeScript(tabId, {code: postFrameCode});
+ } else if (data == 'done') {
+ chrome.test.succeed();
+ }
+ });
+ });
+ chrome.tabs.executeScript(tabId, {code: injectFrameCode});
+ }
+ ]);
+});
+
+chrome.test.getConfig(function(config) {
+ baseUrl = baseUrl.replace(/PORT/, config.testServer.port);
+ chrome.tabs.create({ url: baseUrl + 'outer.html' });
+});
+
+</script>