diff options
author | mihaip@chromium.org <mihaip@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-11 18:20:50 +0000 |
---|---|---|
committer | mihaip@chromium.org <mihaip@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-11 18:20:50 +0000 |
commit | d45ce251fa02d368846e01f4b44f893947f5e13e (patch) | |
tree | 1e741b8e6a9312f6fa3213d231294f0ad51ef7b2 /chrome | |
parent | 79538568397b04e8938c487bdd820ba96c933dcb (diff) | |
download | chromium_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')
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> |