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

Side by Side Diff: chrome/browser/chrome_site_per_process_browsertest.cc

Issue 2538353002: fix external protocol handling for OOPIFs (Closed)
Patch Set: rebase Created 4 years 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/files/file_path.h" 6 #include "base/files/file_path.h"
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
11 #include "chrome/browser/external_protocol/external_protocol_handler.h"
12 #include "chrome/browser/external_protocol/external_protocol_handler_unittest.cc "
alexmos 2016/12/01 19:21:13 Why do you need this? Is this for FakeExternalPro
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
13 #include "chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h"
11 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 16 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/test/base/in_process_browser_test.h" 17 #include "chrome/test/base/in_process_browser_test.h"
15 #include "chrome/test/base/ui_test_utils.h" 18 #include "chrome/test/base/ui_test_utils.h"
16 #include "components/guest_view/browser/guest_view_manager_delegate.h" 19 #include "components/guest_view/browser/guest_view_manager_delegate.h"
17 #include "components/guest_view/browser/test_guest_view_manager.h" 20 #include "components/guest_view/browser/test_guest_view_manager.h"
18 #include "content/public/browser/interstitial_page.h" 21 #include "content/public/browser/interstitial_page.h"
19 #include "content/public/browser/notification_observer.h" 22 #include "content/public/browser/notification_observer.h"
20 #include "content/public/browser/notification_service.h" 23 #include "content/public/browser/notification_service.h"
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 test_guest_view_manager()->WaitForSingleGuestCreated(); 358 test_guest_view_manager()->WaitForSingleGuestCreated();
356 359
357 // Now detach the frame and observe that the guest is destroyed. 360 // Now detach the frame and observe that the guest is destroyed.
358 content::WebContentsDestroyedWatcher observer(guest_web_contents); 361 content::WebContentsDestroyedWatcher observer(guest_web_contents);
359 EXPECT_TRUE(ExecuteScript( 362 EXPECT_TRUE(ExecuteScript(
360 active_web_contents, 363 active_web_contents,
361 "document.body.removeChild(document.querySelector('iframe'));")); 364 "document.body.removeChild(document.querySelector('iframe'));"));
362 observer.Wait(); 365 observer.Wait();
363 EXPECT_EQ(0U, test_guest_view_manager()->GetNumGuestsActive()); 366 EXPECT_EQ(0U, test_guest_view_manager()->GetNumGuestsActive());
364 } 367 }
368
369 class RunsAtSomePointExternalProtocolHandlerDelegate
alexmos 2016/12/01 19:21:13 Maybe name this MailtoExternalProtocolHandlerDeleg
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
370 : public ExternalProtocolHandler::Delegate {
371 public:
372 bool has_triggered_external_protocol = false;
alexmos 2016/12/01 19:21:13 Usually, this would go under private:, and the nam
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
373 void RunExternalProtocolDialog(const GURL& url,
374 int render_process_host_id,
375 int routing_id,
376 ui::PageTransition page_transition,
377 bool has_user_gesture) override {}
378 scoped_refptr<shell_integration::DefaultProtocolClientWorker>
alexmos 2016/12/01 19:21:13 Let's separate out individual functions with blank
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
379 CreateShellWorker(
380 const shell_integration::DefaultWebClientWorkerCallback& callback,
381 const std::string& protocol) override {
382 return new FakeExternalProtocolHandlerWorker(
alexmos 2016/12/01 19:21:13 Instead of this, can you just return "new shell_in
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
383 callback, protocol, shell_integration::NOT_DEFAULT);
384 }
385 ExternalProtocolHandler::BlockState GetBlockState(
386 const std::string& scheme) override {
387 return ExternalProtocolHandler::GetBlockState(scheme);
388 }
389 void BlockRequest() override {}
390 void LaunchUrlWithoutSecurityCheck(
391 const GURL& url,
392 content::WebContents* web_contents) override {
393 if (!web_contents)
394 return;
395 has_triggered_external_protocol = true;
alexmos 2016/12/01 19:21:14 Perhaps we should also save the |url| and |web_con
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
396 }
397 void FinishedProcessingCheck() override {}
398 };
399
400 IN_PROC_BROWSER_TEST_F(ChromeSitePerProcessTest,
alexmos 2016/12/01 19:21:14 It's a good idea to describe the test in a comment
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
401 ExternalProtocolCrossSiteNavigation) {
alexmos 2016/12/01 19:21:13 I think the test name should convey that an extern
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
402 RunsAtSomePointExternalProtocolHandlerDelegate* delegate =
alexmos 2016/12/01 19:21:13 No need to use new/delete; this can just be a stac
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
403 new RunsAtSomePointExternalProtocolHandlerDelegate();
404 ChromeResourceDispatcherHostDelegate::
405 SetExternalProtocolHandlerDelegateForTesting(delegate);
406
407 // Load an ordinary page to cause a new render view
408 // host to be created for the WebContents.
alexmos 2016/12/01 19:21:13 I don't think these details are important to the t
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
409 GURL start_url(embedded_test_server()->GetURL(
410 "a.com", "//cross_site_iframe_factory.html?a()"));
alexmos 2016/12/01 19:21:13 No need to use cross_site_iframe_factory here, sin
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
411
412 // TODO(davidsac): this does not appear to return a boolean to check that it
413 // works???
alexmos 2016/12/01 19:21:14 Yes, this is a known issue that I've been hoping t
davidsac (gone - try alexmos) 2016/12/12 19:15:47 Done.
414 ui_test_utils::NavigateToURL(browser(), start_url);
415
416 // Navigate to a page with a cross-site iframe that triggers a mailto:
417 // external protocol request.
alexmos 2016/12/01 19:21:13 I'd make this comment more about why you couldn't
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
418 GURL mailto_url(
419 embedded_test_server()->GetURL("c.com", "/auto_mailto_main_frame.html"));
alexmos 2016/12/01 19:21:13 You could avoid adding this new file by using an e
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
420
421 // TODO(davidsac): this does not appear to return a boolean to check that it
422 // works???
alexmos 2016/12/01 19:21:13 Same comment as for NavigateToURL above.
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
423 ui_test_utils::NavigateToURL(browser(), mailto_url);
424
425 EXPECT_TRUE(delegate->has_triggered_external_protocol);
426 delete delegate;
427 }
alexmos 2016/12/01 19:21:13 Since SetExternalProtocolHandlerDelegateForTesting
davidsac (gone - try alexmos) 2016/12/12 19:15:46 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698