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

Unified Diff: chrome/browser/safe_browsing/safe_browsing_navigation_observer_unittest.cc

Issue 2302913003: Add SafeBrowsingNavigationObserver to listen to navigation events (Closed)
Patch Set: resolve final nit Created 4 years, 1 month 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
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/safe_browsing_navigation_observer_unittest.cc
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..3c4fde5b4fc065197056484e5306ca12055c8b50
--- /dev/null
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_unittest.cc
@@ -0,0 +1,117 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/safe_browsing/safe_browsing_navigation_observer.h"
+#include "chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "content/public/test/test_renderer_host.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/window_open_disposition.h"
+
+namespace safe_browsing {
+
+class SBNavigationObserverTest : public BrowserWithTestWindowTest {
+ public:
+ SBNavigationObserverTest() {}
+ void SetUp() override {
+ BrowserWithTestWindowTest::SetUp();
+ AddTab(browser(), GURL("http://foo/0"));
+ navigation_observer_manager_ = new SafeBrowsingNavigationObserverManager();
+ navigation_observer_ = new SafeBrowsingNavigationObserver(
+ browser()->tab_strip_model()->GetWebContentsAt(0),
+ navigation_observer_manager_);
+ }
+ void TearDown() override {
+ delete navigation_observer_;
+ BrowserWithTestWindowTest::TearDown();
+ }
+ void VerifyNavigationEvent(const GURL& expected_source_url,
+ const GURL& expected_source_main_frame_url,
+ const GURL& expected_original_request_url,
+ const GURL& expected_destination_url,
+ int expected_source_tab,
+ int expected_target_tab,
+ bool expected_is_user_initiated,
+ bool expected_has_committed,
+ bool expected_has_server_redirect,
+ const NavigationEvent& actual_nav_event) {
+ EXPECT_EQ(expected_source_url, actual_nav_event.source_url);
+ EXPECT_EQ(expected_source_main_frame_url,
+ actual_nav_event.source_main_frame_url);
+ EXPECT_EQ(expected_original_request_url,
+ actual_nav_event.original_request_url);
+ EXPECT_EQ(expected_destination_url, actual_nav_event.destination_url);
+ EXPECT_EQ(expected_source_tab, actual_nav_event.source_tab_id);
+ EXPECT_EQ(expected_target_tab, actual_nav_event.target_tab_id);
+ EXPECT_EQ(expected_is_user_initiated, actual_nav_event.is_user_initiated);
+ EXPECT_EQ(expected_has_committed, actual_nav_event.has_committed);
+ EXPECT_EQ(expected_has_server_redirect,
+ actual_nav_event.has_server_redirect);
+ }
+
+ SafeBrowsingNavigationObserverManager::NavigationMap* navigation_map() {
+ return navigation_observer_manager_->navigation_map();
+ }
+
+ protected:
+ SafeBrowsingNavigationObserverManager* navigation_observer_manager_;
+ SafeBrowsingNavigationObserver* navigation_observer_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SBNavigationObserverTest);
+};
+
+TEST_F(SBNavigationObserverTest, BasicNavigationAndCommit) {
+ // Navigation in current tab.
+ content::NavigationController* controller =
+ &browser()->tab_strip_model()->GetWebContentsAt(0)->GetController();
+ browser()->OpenURL(
+ content::OpenURLParams(GURL("http://foo/1"), content::Referrer(),
+ WindowOpenDisposition::CURRENT_TAB,
+ ui::PAGE_TRANSITION_AUTO_BOOKMARK, false));
+ CommitPendingLoad(controller);
+ int tab_id = SessionTabHelper::IdForTab(controller->GetWebContents());
+ auto nav_map = navigation_map();
+ ASSERT_EQ(std::size_t(1), nav_map->size());
+ ASSERT_EQ(std::size_t(1), nav_map->at(GURL("http://foo/1")).size());
+ VerifyNavigationEvent(GURL("http://foo/0"), // source_url
+ GURL("http://foo/0"), // source_main_frame_url
+ GURL("http://foo/1"), // original_request_url
+ GURL("http://foo/1"), // destination_url
+ tab_id, // source_tab_id
+ tab_id, // target_tab_id
+ true, // is_user_initiated
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(GURL("http://foo/1")).at(0));
+}
+
+TEST_F(SBNavigationObserverTest, ServerRedirect) {
+ content::RenderFrameHostTester* rfh_tester =
+ content::RenderFrameHostTester::For(
+ browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame());
+ rfh_tester->SimulateNavigationStart(GURL("http://foo/3"));
+ GURL redirect("http://redirect/1");
+ rfh_tester->SimulateRedirect(redirect);
+ rfh_tester->SimulateNavigationCommit(redirect);
+ int tab_id = SessionTabHelper::IdForTab(
+ browser()->tab_strip_model()->GetWebContentsAt(0));
+ auto nav_map = navigation_map();
+ ASSERT_EQ(std::size_t(1), nav_map->size());
+ ASSERT_EQ(std::size_t(1), nav_map->at(redirect).size());
+ VerifyNavigationEvent(GURL("http://foo/0"), // source_url
+ GURL("http://foo/0"), // source_main_frame_url
+ GURL("http://foo/3"), // original_request_url
+ GURL("http://redirect/1"), // destination_url
+ tab_id, // source_tab_id
+ tab_id, // target_tab_id
+ false, // is_user_initiated
+ true, // has_committed
+ true, // has_server_redirect
+ nav_map->at(GURL("http://redirect/1")).at(0));
+}
+
+} // namespace safe_browsing
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698