summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsamuong <samuong@chromium.org>2015-08-18 10:51:48 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-18 17:52:20 +0000
commita70c817c3fedc624e1957de9e7b9f43de1ebe735 (patch)
tree8c5c791b1702cf6c15f10e6539a314e1bcfb78c7
parent6acb99110c84e4811b7cba0cb17abd71b7734a5d (diff)
downloadchromium_src-a70c817c3fedc624e1957de9e7b9f43de1ebe735.zip
chromium_src-a70c817c3fedc624e1957de9e7b9f43de1ebe735.tar.gz
chromium_src-a70c817c3fedc624e1957de9e7b9f43de1ebe735.tar.bz2
[chromedriver] Use about:blank for dummy frames, to avoid violating CSP.
Using a data: URL makes it easier to detect, but causes CSP errors when we're navigating to a chrome:// URL. BUG= TBR=stgao@chromium.org Review URL: https://codereview.chromium.org/1294273002 Cr-Commit-Position: refs/heads/master@{#343956}
-rw-r--r--chrome/test/chromedriver/chrome/navigation_tracker.cc11
-rw-r--r--chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc1
2 files changed, 8 insertions, 4 deletions
diff --git a/chrome/test/chromedriver/chrome/navigation_tracker.cc b/chrome/test/chromedriver/chrome/navigation_tracker.cc
index 3b7b17f..9275949 100644
--- a/chrome/test/chromedriver/chrome/navigation_tracker.cc
+++ b/chrome/test/chromedriver/chrome/navigation_tracker.cc
@@ -12,9 +12,8 @@
namespace {
-const std::string kDummyFrameUrl =
- "data:text/html,<!--chromedriver dummy frame-->";
-
+const std::string kDummyFrameName = "chromedriver dummy frame";
+const std::string kDummyFrameUrl = "about:blank";
const std::string kUnreachableWebDataURL = "data:text/html,chromewebdata";
} // namespace
@@ -74,6 +73,7 @@ Status NavigationTracker::IsPendingNavigation(const std::string& frame_id,
" document.readyState == 'interactive';"
"if (isLoaded) {"
" var frame = document.createElement('iframe');"
+ " frame.name = '" + kDummyFrameName + "';"
" frame.src = '" + kDummyFrameUrl + "';"
" document.body.appendChild(frame);"
" window.setTimeout(function() {"
@@ -206,10 +206,13 @@ Status NavigationTracker::OnEvent(DevToolsClient* client,
// If a child frame just navigated, check if it is the dummy frame that
// was attached by IsPendingNavigation(). We don't want to track execution
// contexts created and destroyed for this dummy frame.
+ std::string name;
+ if (!params.GetString("frame.name", &name))
+ return Status(kUnknownError, "missing or invalid 'frame.name'");
std::string url;
if (!params.GetString("frame.url", &url))
return Status(kUnknownError, "missing or invalid 'frame.url'");
- if (url == kDummyFrameUrl)
+ if (name == kDummyFrameName && url == kDummyFrameUrl)
params.GetString("frame.id", &dummy_frame_id_);
}
} else if (method == "Runtime.executionContextsCleared") {
diff --git a/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc b/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
index f47d5d3..922c6a8 100644
--- a/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
+++ b/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
@@ -258,6 +258,7 @@ TEST(NavigationTracker, DiscardScheduledNavigationsOnMainFrameCommit) {
base::DictionaryValue params_navigated;
params_navigated.SetString("frame.parentId", "something");
+ params_navigated.SetString("frame.name", std::string());
params_navigated.SetString("frame.url", "http://abc.xyz");
ASSERT_EQ(
kOk,