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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc

Issue 2302913003: Add SafeBrowsingNavigationObserver to listen to navigation events (Closed)
Patch Set: nit Created 4 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 #include "chrome/browser/safe_browsing/safe_browsing_navigation_observer.h"
5
6 #include "base/strings/stringprintf.h"
7 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/download/download_prefs.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/sessions/session_tab_helper.h"
11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/common/pref_names.h"
14 #include "chrome/test/base/in_process_browser_test.h"
15 #include "chrome/test/base/ui_test_utils.h"
16 #include "components/prefs/pref_service.h"
17 #include "content/public/browser/browser_context.h"
18 #include "content/public/browser/download_item.h"
19 #include "content/public/browser/download_manager.h"
20 #include "content/public/browser/notification_service.h"
21 #include "content/public/test/browser_test_utils.h"
22 #include "content/public/test/test_utils.h"
23 #include "net/dns/mock_host_resolver.h"
24 #include "net/test/embedded_test_server/embedded_test_server.h"
25 #include "url/gurl.h"
26 #include "url/url_canon.h"
27
28 namespace safe_browsing {
29
30 const char kSingleFrameTestURL[] =
31 "/safe_browsing/download_protection/navigation_observer/"
32 "navigation_observer_tests.html";
33 const char kMultiFrameTestURL[] =
34 "/safe_browsing/download_protection/navigation_observer/"
35 "navigation_observer_multi_frame_tests.html";
36 const char kRedirectURL[] =
37 "/safe_browsing/download_protection/navigation_observer/redirect.html";
38 const char kDownloadDataURL[] =
39 "data:application/octet-stream;base64,a2poYWxrc2hkbGtoYXNka2xoYXNsa2RoYWxra"
40 "GtoYWxza2hka2xzamFoZGxramhhc2xka2hhc2xrZGgKYXNrZGpoa2FzZGpoYWtzaGRrYXNoZGt"
41 "oYXNrZGhhc2tkaGthc2hka2Foc2RraGFrc2hka2FzaGRraGFzCmFza2pkaGFrc2hkbSxjbmtza"
42 "mFoZGtoYXNrZGhhc2tka2hrYXNkCjg3MzQ2ODEyNzQ2OGtqc2hka2FoZHNrZGhraApha3NqZGt"
43 "hc2Roa3NkaGthc2hka2FzaGtkaAohISomXkAqJl4qYWhpZGFzeWRpeWlhc1xcb1wKa2Fqc2Roa"
44 "2FzaGRrYXNoZGsKYWtzamRoc2tkaAplbmQK";
45 const char kIframeDirectDownloadURL[] =
46 "/safe_browsing/download_protection/navigation_observer/iframe.html";
47 const char kIframeRetargetingURL[] =
48 "/safe_browsing/download_protection/navigation_observer/"
49 "iframe_retargeting.html";
50 const char kDownloadItemURL[] = "/safe_browsing/download_protection/signed.exe";
51
52 // Test class to help create SafeBrowsingNavigationObservers for each
53 // WebContents before they are actually installed through AttachTabHelper.
54 class TestNavigationObserverManager : public SBNavigationObserverManager {
55 public:
56 TestNavigationObserverManager() : SBNavigationObserverManager() {
57 registrar_.Add(this, chrome::NOTIFICATION_TAB_ADDED,
58 content::NotificationService::AllSources());
59 }
60
61 void Observe(int type,
62 const content::NotificationSource& source,
63 const content::NotificationDetails& details) override {
64 if (type == chrome::NOTIFICATION_TAB_ADDED) {
65 content::WebContents* dest_content =
66 content::Details<content::WebContents>(details).ptr();
67 DCHECK(dest_content);
68 auto observer = new SafeBrowsingNavigationObserver(dest_content, this);
69 DCHECK(observer);
70 } else if (type == chrome::NOTIFICATION_RETARGETING) {
71 RecordRetargeting(details);
72 }
73 }
74
75 protected:
76 ~TestNavigationObserverManager() override {}
77 };
78
79 class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
80 public:
81 SBNavigationObserverBrowserTest() {}
82
83 void SetUpOnMainThread() override {
84 ASSERT_TRUE(embedded_test_server()->Start());
85 host_resolver()->AddRule("*", "127.0.0.1");
86 // Navigate to test page.
87 ui_test_utils::NavigateToURL(
88 browser(), embedded_test_server()->GetURL(kSingleFrameTestURL));
89 observer_manager_ = new TestNavigationObserverManager();
90 observer_ = new SafeBrowsingNavigationObserver(
91 browser()->tab_strip_model()->GetActiveWebContents(),
92 observer_manager_);
93 ASSERT_TRUE(observer_);
94 ASSERT_TRUE(InitialSetup());
95 }
96
97 bool InitialSetup() {
98 if (!browser())
99 return false;
100
101 if (!downloads_directory_.CreateUniqueTempDir())
102 return false;
103
104 // Set up default download path.
105 browser()->profile()->GetPrefs()->SetFilePath(
106 prefs::kDownloadDefaultDirectory, downloads_directory_.path());
107 browser()->profile()->GetPrefs()->SetFilePath(
108 prefs::kSaveFileDefaultDirectory, downloads_directory_.path());
109 browser()->profile()->GetPrefs()->SetBoolean(prefs::kPromptForDownload,
110 false);
111 content::DownloadManager* manager =
112 content::BrowserContext::GetDownloadManager(browser()->profile());
113 DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen();
114 manager->RemoveAllDownloads();
115
116 return true;
117 }
118
119 void TearDownOnMainThread() override { delete observer_; }
120
121 // Most test cases will trigger downloads, though we don't really care if
122 // download completed or not. So we cancel downloads as soon as we record
123 // all the navigation event we need.
124 void CancelDownloads() {
125 std::vector<content::DownloadItem*> download_items;
126 content::DownloadManager* manager =
127 content::BrowserContext::GetDownloadManager(browser()->profile());
128 manager->GetAllDownloads(&download_items);
129 for (auto item : download_items)
130 item->Cancel(true);
131 }
132
133 // This function needs javascript support, only works on
134 // navigation_observer_tests.html and
135 // navigation_observer_multi_frame_tests.html.
136 void ClickTestLink(const char* test_name, int navigation_count) {
137 content::WebContents* main_web_contents =
138 browser()->tab_strip_model()->GetActiveWebContents();
139 std::string script = base::StringPrintf("clickLink('%s')", test_name);
140 EXPECT_TRUE(content::ExecuteScript(main_web_contents, script));
141 // Wait until all the navigation completes.
142 for (int i = 0; i < navigation_count; i++) {
143 content::WebContents* active_contents =
144 browser()->tab_strip_model()->GetActiveWebContents();
145 content::WaitForLoadStopWithoutSuccessCheck(active_contents);
146 }
147 CancelDownloads();
148 }
149
150 void VerifyNavigationEvent(const GURL& expected_source_url,
151 const GURL& expected_target_url,
152 const GURL& expected_main_frame_url,
153 bool expected_is_user_initiated,
154 bool expected_has_committed,
155 bool expected_is_server_redirect,
156 const GURL& expected_redirect_url,
157 const NavigationEvent& actual_nav_event) {
158 EXPECT_EQ(expected_source_url, actual_nav_event.source_url);
159 EXPECT_EQ(expected_target_url, actual_nav_event.target_url);
160 EXPECT_EQ(expected_main_frame_url, actual_nav_event.main_frame_url);
161 EXPECT_EQ(expected_is_user_initiated, actual_nav_event.is_user_initiated);
162 EXPECT_EQ(expected_has_committed, actual_nav_event.has_committed);
163 EXPECT_EQ(expected_is_server_redirect, actual_nav_event.is_server_redirect);
164 EXPECT_EQ(expected_redirect_url, actual_nav_event.server_redirect_url);
165 }
166
167 SBNavigationObserverManager::NavigationMap* navigation_map() {
168 return observer_manager_->navigation_map();
169 }
170
171 protected:
172 SBNavigationObserverManager* observer_manager_;
173 SafeBrowsingNavigationObserver* observer_;
174
175 private:
176 base::ScopedTempDir downloads_directory_;
177 };
178
179 // Click on a link and start download on the same page.
180 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, DirectDownload) {
181 ClickTestLink("direct_download", 1);
182 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
183 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
184 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
185 ASSERT_TRUE(nav_map);
186 ASSERT_EQ(std::size_t(1), nav_map->size());
187 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
188 // Since this test uses java script to mimic clicking on a link, there is no
189 // actual user gesture, therefore is_user_initiated is false.
190 VerifyNavigationEvent(initial_url, // source_url
191 download_url, // target_url
192 initial_url, // source's main_frame_url
193 false, // is_user_initiated,
194 false, // has_committed
195 false, // is_server_redirect
196 GURL(), // redirect_url
197 nav_map->at(download_url).at(0));
198 }
199
200 // Click on a link with rel="noreferrer" attribute, and start download on the
201 // same page.
202 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
203 DirectDownloadNoReferrer) {
204 ClickTestLink("direct_download_noreferrer", 1);
205 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
206 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
207 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
208 ASSERT_TRUE(nav_map);
209 ASSERT_EQ(std::size_t(1), nav_map->size());
210 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
211 VerifyNavigationEvent(initial_url, download_url, initial_url, false, false,
212 false, GURL(), nav_map->at(download_url).at(0));
213 }
214
215 // Click on a link with rel="noreferrer" attribute, and start download in a
216 // new tab using target=_blank.
217 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
218 DirectDownloadNoReferrerTargetBlank) {
219 ClickTestLink("direct_download_noreferrer_target_blank", 2);
220 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
221 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
222 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
223 ASSERT_TRUE(nav_map);
224 ASSERT_EQ(std::size_t(1), nav_map->size());
225 ASSERT_EQ(std::size_t(2), nav_map->at(download_url).size());
226 VerifyNavigationEvent(initial_url, download_url, initial_url, false, false,
227 false, GURL(), nav_map->at(download_url).at(0));
228 VerifyNavigationEvent(download_url, download_url, download_url, false, false,
229 false, GURL(), nav_map->at(download_url).at(1));
230 }
231
232 // Click on a link which navigates to a page then redirect to download using
233 // META HTTP-EQUIV="refresh". All transitions happen in the same tab.
234 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
235 SingleMetaRefreshRedirect) {
236 ClickTestLink("single_meta_refresh_redirect", 2);
237 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
238 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL);
239 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
240 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
241 ASSERT_TRUE(nav_map);
242 ASSERT_EQ(std::size_t(2), nav_map->size());
243 ASSERT_EQ(std::size_t(1), nav_map->at(redirect_url).size());
244 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
245 VerifyNavigationEvent(initial_url, redirect_url, initial_url, false, true,
246 false, GURL(), nav_map->at(redirect_url).at(0));
247 VerifyNavigationEvent(redirect_url, download_url, redirect_url, false, false,
248 false, GURL(), nav_map->at(download_url).at(0));
249 }
250
251 // Click on a link which navigates to a page then redirect to download using
252 // META HTTP-EQUIV="refresh". First navigation happens in target blank.
253 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
254 SingleMetaRefreshRedirectTargetBlank) {
255 ClickTestLink("single_meta_refresh_redirect_target_blank", 3);
256 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
257 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL);
258 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
259 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
260 ASSERT_TRUE(nav_map);
261 ASSERT_EQ(std::size_t(2), nav_map->size());
262 ASSERT_EQ(std::size_t(2), nav_map->at(redirect_url).size());
263 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
264 VerifyNavigationEvent(initial_url, redirect_url, initial_url, false, false,
265 false, GURL(), nav_map->at(redirect_url).at(0));
266 VerifyNavigationEvent(redirect_url, redirect_url, redirect_url, false, true,
267 false, GURL(), nav_map->at(redirect_url).at(1));
268 VerifyNavigationEvent(redirect_url, download_url, redirect_url, false, false,
269 false, GURL(), nav_map->at(download_url).at(0));
270 }
271
272 // Click on a link which redirects twice before reaching download using
273 // META HTTP-EQUIV="refresh". All transitions happen in the same tab.
274 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
275 MultiMetaRefreshRedirects) {
276 ClickTestLink("multiple_meta_refresh_redirects", 3);
277 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
278 GURL first_redirect_url = embedded_test_server()->GetURL(
279 "/safe_browsing/download_protection/navigation_observer/"
280 "double_redirect.html");
281 GURL second_redirect_url = embedded_test_server()->GetURL(kRedirectURL);
282 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
283 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
284 ASSERT_TRUE(nav_map);
285 ASSERT_EQ(std::size_t(3), nav_map->size());
286 ASSERT_EQ(std::size_t(1), nav_map->at(first_redirect_url).size());
287 ASSERT_EQ(std::size_t(1), nav_map->at(second_redirect_url).size());
288 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
289 VerifyNavigationEvent(initial_url, first_redirect_url, initial_url, false,
290 true, false, GURL(),
291 nav_map->at(first_redirect_url).at(0));
292 VerifyNavigationEvent(first_redirect_url, second_redirect_url,
293 first_redirect_url, false, true, false, GURL(),
294 nav_map->at(second_redirect_url).at(0));
295 VerifyNavigationEvent(second_redirect_url, download_url, second_redirect_url,
296 false, false, false, GURL(),
297 nav_map->at(download_url).at(0));
298 }
299
300 // Click on a link which redirects to download using window.location.href.
301 // All transitions happen in the same tab.
302 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
303 WindowLocationHrefRedirect) {
304 ClickTestLink("window_location_href_redirect", 2);
305 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
306 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
307 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
308 ASSERT_TRUE(nav_map);
309 ASSERT_EQ(std::size_t(2), nav_map->size());
310 ASSERT_EQ(std::size_t(1), nav_map->at(initial_url).size());
311 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
312 VerifyNavigationEvent(initial_url, initial_url, initial_url, false, true,
313 false, GURL(), nav_map->at(initial_url).at(0));
314 VerifyNavigationEvent(initial_url, download_url, initial_url, false, false,
315 false, GURL(), nav_map->at(download_url).at(0));
316 }
317
318 // Click on a link which redirect twice until reaches download using a mixture
319 // of meta refresh and window.location.href. All transitions happen in the same
320 // tab.
321 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, MixRedirects) {
322 ClickTestLink("mix_redirects", 3);
323 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL);
324 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
325 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
326 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
327 ASSERT_TRUE(nav_map);
328 ASSERT_EQ(std::size_t(3), nav_map->size());
329 ASSERT_EQ(std::size_t(1), nav_map->at(initial_url).size());
330 ASSERT_EQ(std::size_t(1), nav_map->at(redirect_url).size());
331 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
332 VerifyNavigationEvent(initial_url, initial_url, initial_url, false, true,
333 false, GURL(), nav_map->at(initial_url).at(0));
334 VerifyNavigationEvent(initial_url, redirect_url, initial_url, false, true,
335 false, GURL(), nav_map->at(redirect_url).at(0));
336 VerifyNavigationEvent(redirect_url, download_url, redirect_url, false, false,
337 false, GURL(), nav_map->at(download_url).at(0));
338 }
339
340 // Use javascript to open download in a new tab.
341 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, NewTabDownload) {
342 ClickTestLink("new_tab_download", 4);
343 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
344 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
345 GURL blank_url = GURL("about:blank");
346 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
347 ASSERT_TRUE(nav_map);
348 ASSERT_EQ(std::size_t(3), nav_map->size());
349 ASSERT_EQ(std::size_t(1), nav_map->at(initial_url).size());
350 ASSERT_EQ(std::size_t(2), nav_map->at(blank_url).size());
351 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
352 VerifyNavigationEvent(initial_url, initial_url, initial_url, false, true,
353 false, GURL(), nav_map->at(initial_url).at(0));
354 VerifyNavigationEvent(initial_url, blank_url, initial_url, false, false,
355 false, GURL(), nav_map->at(blank_url).at(0));
356 // Source and target are at different tabs.
357 EXPECT_FALSE(nav_map->at(blank_url).at(0).source_tab_id ==
358 nav_map->at(blank_url).at(0).target_tab_id);
359 VerifyNavigationEvent(blank_url, blank_url, blank_url, false, false, false,
360 GURL(), nav_map->at(blank_url).at(1));
361 EXPECT_TRUE(nav_map->at(blank_url).at(1).source_tab_id ==
362 nav_map->at(blank_url).at(1).target_tab_id);
363 VerifyNavigationEvent(blank_url, download_url, blank_url, false, false, false,
364 GURL(), nav_map->at(download_url).at(0));
365 EXPECT_TRUE(nav_map->at(download_url).at(0).source_tab_id ==
366 nav_map->at(download_url).at(0).target_tab_id);
367 }
368
369 // Use javascript to open download in a new tab and download has a data url.
370 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
371 NewTabDownloadWithDataURL) {
372 ClickTestLink("new_tab_download_with_data_url", 4);
373 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
374 GURL download_url = GURL(kDownloadDataURL);
375 GURL blank_url = GURL("about:blank");
376 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
377 ASSERT_TRUE(nav_map);
378 ASSERT_EQ(std::size_t(3), nav_map->size());
379 ASSERT_EQ(std::size_t(1), nav_map->at(initial_url).size());
380 ASSERT_EQ(std::size_t(2), nav_map->at(blank_url).size());
381 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
382 VerifyNavigationEvent(initial_url, initial_url, initial_url, false, true,
383 false, GURL(), nav_map->at(initial_url).at(0));
384 VerifyNavigationEvent(initial_url, blank_url, initial_url, false, false,
385 false, GURL(), nav_map->at(blank_url).at(0));
386 // Source and target are at different tabs.
387 EXPECT_FALSE(nav_map->at(blank_url).at(0).source_tab_id ==
388 nav_map->at(blank_url).at(0).target_tab_id);
389 VerifyNavigationEvent(blank_url, blank_url, blank_url, false, false, false,
390 GURL(), nav_map->at(blank_url).at(1));
391 EXPECT_TRUE(nav_map->at(blank_url).at(1).source_tab_id ==
392 nav_map->at(blank_url).at(1).target_tab_id);
393 VerifyNavigationEvent(blank_url, download_url, blank_url, false, false, false,
394 GURL(), nav_map->at(download_url).at(0));
395 EXPECT_TRUE(nav_map->at(download_url).at(0).source_tab_id ==
396 nav_map->at(download_url).at(0).target_tab_id);
397 }
398
399 // TODO(jialiul): Need to figure out why this test is failing on Windows and
400 // flacky on other platforms.
401 #define MAYBE_DownloadViaHTML5FileApi DISABLED_DownloadViaHTML5FileApi
402 // Download via html5 file API.
403 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
404 MAYBE_DownloadViaHTML5FileApi) {
405 ClickTestLink("html5_file_api", 2);
406 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
407 std::string download_url_str =
408 base::StringPrintf("filesystem:%stemporary/test.exe",
409 embedded_test_server()->base_url().spec().c_str());
410 GURL download_url = GURL(download_url_str);
411 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
412 ASSERT_TRUE(nav_map);
413 ASSERT_EQ(std::size_t(2), nav_map->size());
414 ASSERT_EQ(std::size_t(1), nav_map->at(initial_url).size());
415 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
416 VerifyNavigationEvent(initial_url, initial_url, initial_url, false, true,
417 false, GURL(), nav_map->at(initial_url).at(0));
418 VerifyNavigationEvent(initial_url, download_url, initial_url, false, false,
419 false, GURL(), nav_map->at(download_url).at(0));
420 }
421
422 // Click a link in a subframe and start download.
423 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
424 SubFrameDirectDownload) {
425 ui_test_utils::NavigateToURL(
426 browser(), embedded_test_server()->GetURL(kMultiFrameTestURL));
427 EXPECT_TRUE(content::WaitForLoadStop(
428 browser()->tab_strip_model()->GetActiveWebContents()));
429 std::string test_name =
430 base::StringPrintf("%s', '%s", "iframe1", "iframe_direct_download");
431 ClickTestLink(test_name.c_str(), 1);
432 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
433 GURL multi_frame_test_url =
434 embedded_test_server()->GetURL(kMultiFrameTestURL);
435 GURL iframe_url = embedded_test_server()->GetURL(kIframeDirectDownloadURL);
436 GURL iframe_retargeting_url =
437 embedded_test_server()->GetURL(kIframeRetargetingURL);
438 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
439 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
440 ASSERT_TRUE(nav_map);
441 ASSERT_EQ(std::size_t(4), nav_map->size());
442 ASSERT_EQ(std::size_t(1), nav_map->at(multi_frame_test_url).size());
443 ASSERT_EQ(std::size_t(1), nav_map->at(iframe_url).size());
444 ASSERT_EQ(std::size_t(1), nav_map->at(iframe_retargeting_url).size());
445 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
446 VerifyNavigationEvent(initial_url, multi_frame_test_url, initial_url, true,
447 true, false, GURL(),
448 nav_map->at(multi_frame_test_url).at(0));
449 VerifyNavigationEvent(iframe_url, iframe_url, multi_frame_test_url, false,
450 true, false, GURL(), nav_map->at(iframe_url).at(0));
451 VerifyNavigationEvent(iframe_retargeting_url, iframe_retargeting_url,
452 multi_frame_test_url, false, true, false, GURL(),
453 nav_map->at(iframe_retargeting_url).at(0));
454 VerifyNavigationEvent(iframe_url, download_url, multi_frame_test_url, false,
455 false, false, GURL(), nav_map->at(download_url).at(0));
456 }
457
458 // Click a link in a subframe and open download in a new tab.
459 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
460 SubFrameNewTabDownload) {
461 ui_test_utils::NavigateToURL(
462 browser(), embedded_test_server()->GetURL(kMultiFrameTestURL));
463 EXPECT_TRUE(content::WaitForLoadStop(
464 browser()->tab_strip_model()->GetActiveWebContents()));
465 std::string test_name =
466 base::StringPrintf("%s', '%s", "iframe2", "iframe_new_tab_download");
467 ClickTestLink(test_name.c_str(), 4);
468 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
469 GURL multi_frame_test_url =
470 embedded_test_server()->GetURL(kMultiFrameTestURL);
471 GURL iframe_url = embedded_test_server()->GetURL(kIframeDirectDownloadURL);
472 GURL iframe_retargeting_url =
473 embedded_test_server()->GetURL(kIframeRetargetingURL);
474 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL);
475 GURL blank_url = GURL("about:blank");
476 SBNavigationObserverManager::NavigationMap* nav_map = navigation_map();
477 ASSERT_TRUE(nav_map);
478 ASSERT_EQ(std::size_t(5), nav_map->size());
479 ASSERT_EQ(std::size_t(1), nav_map->at(multi_frame_test_url).size());
480 ASSERT_EQ(std::size_t(1), nav_map->at(iframe_url).size());
481 ASSERT_EQ(std::size_t(2), nav_map->at(iframe_retargeting_url).size());
482 ASSERT_EQ(std::size_t(2), nav_map->at(blank_url).size());
483 ASSERT_EQ(std::size_t(1), nav_map->at(download_url).size());
484 VerifyNavigationEvent(initial_url, multi_frame_test_url, initial_url, true,
485 true, false, GURL(),
486 nav_map->at(multi_frame_test_url).at(0));
487 VerifyNavigationEvent(iframe_url, iframe_url, multi_frame_test_url, false,
488 true, false, GURL(), nav_map->at(iframe_url).at(0));
489 VerifyNavigationEvent(iframe_retargeting_url, iframe_retargeting_url,
490 multi_frame_test_url, false, true, false, GURL(),
491 nav_map->at(iframe_retargeting_url).at(0));
492 VerifyNavigationEvent(iframe_retargeting_url, iframe_retargeting_url,
493 multi_frame_test_url, false, true, false, GURL(),
494 nav_map->at(iframe_retargeting_url).at(1));
495 VerifyNavigationEvent(iframe_retargeting_url, blank_url, multi_frame_test_url,
496 false, false, false, GURL(),
497 nav_map->at(blank_url).at(0));
498 VerifyNavigationEvent(blank_url, blank_url, blank_url, false, false, false,
499 GURL(), nav_map->at(blank_url).at(1));
500 VerifyNavigationEvent(blank_url, download_url, blank_url, false, false, false,
501 GURL(), nav_map->at(download_url).at(0));
502 }
503
504 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698