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

Side by Side Diff: chrome/browser/extensions/app_process_apitest.cc

Issue 10990038: Grant popup blocker bypass based upon extension context type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/extension_apitest.h" 5 #include "chrome/browser/extensions/extension_apitest.h"
6 #include "chrome/browser/extensions/extension_host.h" 6 #include "chrome/browser/extensions/extension_host.h"
7 #include "chrome/browser/extensions/extension_service.h" 7 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/extensions/process_map.h" 8 #include "chrome/browser/extensions/process_map.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 // Opening tabs with window.open should keep the page in the opener's 111 // Opening tabs with window.open should keep the page in the opener's
112 // process. 112 // process.
113 ASSERT_EQ(1u, browser::GetBrowserCount(browser()->profile())); 113 ASSERT_EQ(1u, browser::GetBrowserCount(browser()->profile()));
114 OpenWindow(tab1, base_url.Resolve("path1/empty.html"), true, NULL); 114 OpenWindow(tab1, base_url.Resolve("path1/empty.html"), true, NULL);
115 LOG(INFO) << "WindowOpenHelper 1."; 115 LOG(INFO) << "WindowOpenHelper 1.";
116 OpenWindow(tab2, base_url.Resolve("path2/empty.html"), true, NULL); 116 OpenWindow(tab2, base_url.Resolve("path2/empty.html"), true, NULL);
117 LOG(INFO) << "End of test."; 117 LOG(INFO) << "End of test.";
118 } 118 }
119 }; 119 };
120 120
121 // Omits the disable-popup-blocking flag so we can cover that case.
122 class BlockedAppApiTest : public AppApiTest {
123 protected:
124 void SetUpCommandLine(CommandLine* command_line) {
125 ExtensionApiTest::SetUpCommandLine(command_line);
126 CommandLine::ForCurrentProcess()->AppendSwitch(
127 switches::kAllowHTTPBackgroundPage);
128 }
129 };
130
121 // Tests that hosted apps with the background permission get a process-per-app 131 // Tests that hosted apps with the background permission get a process-per-app
122 // model, since all pages need to be able to script the background page. 132 // model, since all pages need to be able to script the background page.
123 IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcess) { 133 IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcess) {
124 LOG(INFO) << "Start of test."; 134 LOG(INFO) << "Start of test.";
125 135
126 extensions::ProcessMap* process_map = 136 extensions::ProcessMap* process_map =
127 browser()->profile()->GetExtensionService()->process_map(); 137 browser()->profile()->GetExtensionService()->process_map();
128 138
129 host_resolver()->AddRule("*", "127.0.0.1"); 139 host_resolver()->AddRule("*", "127.0.0.1");
130 ASSERT_TRUE(test_server()->Start()); 140 ASSERT_TRUE(test_server()->Start());
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 ASSERT_TRUE(test_server()->Start()); 456 ASSERT_TRUE(test_server()->Start());
447 457
448 GURL base_url = GetTestBaseURL("app_process"); 458 GURL base_url = GetTestBaseURL("app_process");
449 459
450 // Load app and start URL (not in the app). 460 // Load app and start URL (not in the app).
451 const Extension* app = 461 const Extension* app =
452 LoadExtension(test_data_dir_.AppendASCII("app_process")); 462 LoadExtension(test_data_dir_.AppendASCII("app_process"));
453 ASSERT_TRUE(app); 463 ASSERT_TRUE(app);
454 464
455 content::WindowedNotificationObserver popup_observer( 465 content::WindowedNotificationObserver popup_observer(
456 content::NOTIFICATION_RENDER_VIEW_HOST_CREATED, 466 content::NOTIFICATION_RENDER_VIEW_HOST_CREATED,
457 content::NotificationService::AllSources()); 467 content::NotificationService::AllSources());
458 ui_test_utils::NavigateToURL(browser(), 468 ui_test_utils::NavigateToURL(browser(),
459 base_url.Resolve("path3/container.html")); 469 base_url.Resolve("path3/container.html"));
460 EXPECT_FALSE(process_map->Contains( 470 EXPECT_FALSE(process_map->Contains(
461 chrome::GetWebContentsAt(browser(), 0)->GetRenderProcessHost()->GetID())); 471 chrome::GetWebContentsAt(browser(), 0)->GetRenderProcessHost()->GetID()));
462 popup_observer.Wait(); 472 popup_observer.Wait();
463 473
464 // Popup window should be in the app's process. 474 // Popup window should be in the app's process.
465 RenderViewHost* popup_host = 475 RenderViewHost* popup_host =
466 content::Source<RenderViewHost>(popup_observer.source()).ptr(); 476 content::Source<RenderViewHost>(popup_observer.source()).ptr();
467 EXPECT_TRUE(process_map->Contains(popup_host->GetProcess()->GetID())); 477 EXPECT_TRUE(process_map->Contains(popup_host->GetProcess()->GetID()));
468 } 478 }
469 479
480 // Similar to the previous test, but ensure that popup blocking bypass
481 // isn't granted to the iframe. See crbug.com/117446.
482 IN_PROC_BROWSER_TEST_F(BlockedAppApiTest, OpenAppFromIframe) {
483 host_resolver()->AddRule("*", "127.0.0.1");
484 ASSERT_TRUE(test_server()->Start());
485
486 // Load app and start URL (not in the app).
487 const Extension* app =
488 LoadExtension(test_data_dir_.AppendASCII("app_process"));
489 ASSERT_TRUE(app);
490
491 content::WindowedNotificationObserver blocker_observer(
492 chrome::NOTIFICATION_CONTENT_BLOCKED_STATE_CHANGED,
493 content::NotificationService::AllSources());
494 ui_test_utils::NavigateToURL(
495 browser(), GetTestBaseURL("app_process").Resolve("path3/container.html"));
496
497 blocker_observer.Wait();
498 EXPECT_TRUE(*content::Details<bool>(blocker_observer.details()).ptr());
499 }
500
470 // Tests that if an extension launches an app via chrome.tabs.create with an URL 501 // Tests that if an extension launches an app via chrome.tabs.create with an URL
471 // that's not in the app's extent but that redirects to it, we still end up with 502 // that's not in the app's extent but that redirects to it, we still end up with
472 // an app process. See http://crbug.com/99349 for more details. 503 // an app process. See http://crbug.com/99349 for more details.
473 IN_PROC_BROWSER_TEST_F(AppApiTest, OpenAppFromExtension) { 504 IN_PROC_BROWSER_TEST_F(AppApiTest, OpenAppFromExtension) {
474 host_resolver()->AddRule("*", "127.0.0.1"); 505 host_resolver()->AddRule("*", "127.0.0.1");
475 ASSERT_TRUE(StartTestServer()); 506 ASSERT_TRUE(StartTestServer());
476 507
477 LoadExtension(test_data_dir_.AppendASCII("app_process")); 508 LoadExtension(test_data_dir_.AppendASCII("app_process"));
478 const Extension* launcher = 509 const Extension* launcher =
479 LoadExtension(test_data_dir_.AppendASCII("app_launcher")); 510 LoadExtension(test_data_dir_.AppendASCII("app_launcher"));
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 content::Source<NavigationController>( 615 content::Source<NavigationController>(
585 &chrome::GetActiveWebContents(browser())->GetController())); 616 &chrome::GetActiveWebContents(browser())->GetController()));
586 chrome::Reload(browser(), CURRENT_TAB); 617 chrome::Reload(browser(), CURRENT_TAB);
587 observer.Wait(); 618 observer.Wait();
588 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( 619 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool(
589 contents->GetRenderViewHost(), L"", 620 contents->GetRenderViewHost(), L"",
590 L"window.domAutomationController.send(chrome.app.isInstalled)", 621 L"window.domAutomationController.send(chrome.app.isInstalled)",
591 &is_installed)); 622 &is_installed));
592 ASSERT_TRUE(is_installed); 623 ASSERT_TRUE(is_installed);
593 } 624 }
OLDNEW
« no previous file with comments | « no previous file | chrome/renderer/chrome_content_renderer_client.cc » ('j') | chrome/renderer/chrome_content_renderer_client.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698