Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1059)

Unified Diff: content/browser/devtools/protocol/devtools_protocol_browsertest.cc

Issue 2132673002: Adding Navigation Throttles to DevTools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add missing files Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/protocol/devtools_protocol_browsertest.cc
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
index e6e83576d6626b1eab23df2ea201c6032e936fe0..26cbd845c2bb4f612d8eb2fad59e4395f33b83fe 100644
--- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
+++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -180,6 +180,7 @@ class DevToolsProtocolTest : public ContentBrowserTest,
int last_sent_id_;
std::vector<int> result_ids_;
std::vector<std::string> notifications_;
+ std::unique_ptr<base::DictionaryValue> requested_notification_params_;
private:
void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
@@ -203,6 +204,12 @@ class DevToolsProtocolTest : public ContentBrowserTest,
EXPECT_TRUE(root->GetString("method", &notification));
notifications_.push_back(notification);
if (waiting_for_notification_ == notification) {
+ base::DictionaryValue* params;
+ if (root->GetDictionary("params", &params)) {
+ requested_notification_params_ = params->CreateDeepCopy();
+ } else {
+ requested_notification_params_.reset();
+ }
waiting_for_notification_ = std::string();
base::MessageLoop::current()->QuitNow();
}
@@ -597,4 +604,59 @@ IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, BrowserNewPage) {
EXPECT_EQ(2u, shell()->windows().size());
}
+IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, NavigationThrottle) {
+ NavigateToURLBlockUntilNavigationsComplete(shell(), GURL("about:blank"), 1);
+ ASSERT_TRUE(embedded_test_server()->Start());
+ Attach();
+ SendCommand("Page.enable", nullptr);
+
+ std::unique_ptr<base::DictionaryValue> params(new base::DictionaryValue());
+ params->SetBoolean("enabled", true);
+ SendCommand("Page.setNavigationThrottleEnabled", std::move(params), true);
+
+ GURL test_url = embedded_test_server()->GetURL("/devtools/meta_tag.html");
+ shell()->LoadURL(test_url);
+
+ // Wait for and allow navigation to /devtools/meta_tag.html
+ WaitForNotification("Page.shouldAllowNavigation");
+ ASSERT_TRUE(requested_notification_params_.get());
+ std::string url;
+ ASSERT_TRUE(requested_notification_params_->GetString("url", &url));
+ EXPECT_TRUE(base::EndsWith(url, "/devtools/meta_tag.html",
+ base::CompareCase::SENSITIVE));
+ int navigation_id;
+ ASSERT_TRUE(requested_notification_params_->GetInteger("navigationId",
+ &navigation_id));
+
+ params.reset(new base::DictionaryValue());
+ params->SetString("response", "Proceed");
+ params->SetInteger("navigationId", navigation_id);
+ SendCommand("Page.navigationThrottleResponse", std::move(params), true);
+
+ // Wait for and cancel navigation to /devtools/navigation.html
+ WaitForNotification("Page.shouldAllowNavigation");
+
+ ASSERT_TRUE(requested_notification_params_.get());
+ ASSERT_TRUE(requested_notification_params_->GetString("url", &url));
+ EXPECT_TRUE(base::EndsWith(url, "/devtools/navigation.html",
+ base::CompareCase::SENSITIVE));
+ ASSERT_TRUE(requested_notification_params_->GetInteger("navigationId",
+ &navigation_id));
+
+ params.reset(new base::DictionaryValue());
+ params->SetString("response", "Cancel");
+ params->SetInteger("navigationId", navigation_id);
+ std::string navigating_frame_id;
+ ASSERT_TRUE(requested_notification_params_->GetString("frameId",
+ &navigating_frame_id));
+ SendCommand("Page.navigationThrottleResponse", std::move(params), true);
+
+ // Check the cancellation occurred.
+ WaitForNotification("Page.frameClearedScheduledNavigation");
+ ASSERT_TRUE(requested_notification_params_.get());
+ std::string frame_id;
+ ASSERT_TRUE(requested_notification_params_->GetString("frameId", &frame_id));
+ EXPECT_EQ(frame_id, navigating_frame_id);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698