| OLD | NEW |
| 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/extension_system.h" | 8 #include "chrome/browser/extensions/extension_system.h" |
| 9 #include "chrome/browser/extensions/process_map.h" | 9 #include "chrome/browser/extensions/process_map.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 chrome::GetWebContentsAt(browser(), 3)->GetRenderProcessHost()); | 218 chrome::GetWebContentsAt(browser(), 3)->GetRenderProcessHost()); |
| 219 | 219 |
| 220 // If one of the popup tabs navigates back to the app, window.opener should | 220 // If one of the popup tabs navigates back to the app, window.opener should |
| 221 // be valid. | 221 // be valid. |
| 222 NavigateInRenderer(chrome::GetWebContentsAt(browser(), 6), app_url); | 222 NavigateInRenderer(chrome::GetWebContentsAt(browser(), 6), app_url); |
| 223 LOG(INFO) << "NavigateTabHelper 3."; | 223 LOG(INFO) << "NavigateTabHelper 3."; |
| 224 EXPECT_EQ(tab->GetRenderProcessHost(), | 224 EXPECT_EQ(tab->GetRenderProcessHost(), |
| 225 chrome::GetWebContentsAt(browser(), 6)->GetRenderProcessHost()); | 225 chrome::GetWebContentsAt(browser(), 6)->GetRenderProcessHost()); |
| 226 bool windowOpenerValid = false; | 226 bool windowOpenerValid = false; |
| 227 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 227 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 228 chrome::GetWebContentsAt(browser(), 6)->GetRenderViewHost(), | 228 chrome::GetWebContentsAt(browser(), 6)->GetRenderViewHost(), L"", |
| 229 "", | 229 L"window.domAutomationController.send(window.opener != null)", |
| 230 "window.domAutomationController.send(window.opener != null)", | |
| 231 &windowOpenerValid)); | 230 &windowOpenerValid)); |
| 232 ASSERT_TRUE(windowOpenerValid); | 231 ASSERT_TRUE(windowOpenerValid); |
| 233 | 232 |
| 234 LOG(INFO) << "End of test."; | 233 LOG(INFO) << "End of test."; |
| 235 } | 234 } |
| 236 | 235 |
| 237 // Test that hosted apps without the background permission use a process per app | 236 // Test that hosted apps without the background permission use a process per app |
| 238 // instance model, such that separate instances are in separate processes. | 237 // instance model, such that separate instances are in separate processes. |
| 239 IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcessInstances) { | 238 IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcessInstances) { |
| 240 TestAppInstancesHelper("app_process_instances"); | 239 TestAppInstancesHelper("app_process_instances"); |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 EXPECT_FALSE(process_map->Contains( | 428 EXPECT_FALSE(process_map->Contains( |
| 430 contents->GetRenderProcessHost()->GetID())); | 429 contents->GetRenderProcessHost()->GetID())); |
| 431 | 430 |
| 432 // Enable app and reload via JavaScript. | 431 // Enable app and reload via JavaScript. |
| 433 EnableExtension(app->id()); | 432 EnableExtension(app->id()); |
| 434 content::WindowedNotificationObserver js_reload_observer( | 433 content::WindowedNotificationObserver js_reload_observer( |
| 435 content::NOTIFICATION_LOAD_STOP, | 434 content::NOTIFICATION_LOAD_STOP, |
| 436 content::Source<NavigationController>( | 435 content::Source<NavigationController>( |
| 437 &chrome::GetActiveWebContents(browser())->GetController())); | 436 &chrome::GetActiveWebContents(browser())->GetController())); |
| 438 ASSERT_TRUE(content::ExecuteJavaScript(contents->GetRenderViewHost(), | 437 ASSERT_TRUE(content::ExecuteJavaScript(contents->GetRenderViewHost(), |
| 439 "", "location.reload();")); | 438 L"", L"location.reload();")); |
| 440 js_reload_observer.Wait(); | 439 js_reload_observer.Wait(); |
| 441 EXPECT_TRUE(process_map->Contains( | 440 EXPECT_TRUE(process_map->Contains( |
| 442 contents->GetRenderProcessHost()->GetID())); | 441 contents->GetRenderProcessHost()->GetID())); |
| 443 | 442 |
| 444 // Disable app and reload via JavaScript. | 443 // Disable app and reload via JavaScript. |
| 445 DisableExtension(app->id()); | 444 DisableExtension(app->id()); |
| 446 content::WindowedNotificationObserver js_reload_observer2( | 445 content::WindowedNotificationObserver js_reload_observer2( |
| 447 content::NOTIFICATION_LOAD_STOP, | 446 content::NOTIFICATION_LOAD_STOP, |
| 448 content::Source<NavigationController>( | 447 content::Source<NavigationController>( |
| 449 &chrome::GetActiveWebContents(browser())->GetController())); | 448 &chrome::GetActiveWebContents(browser())->GetController())); |
| 450 ASSERT_TRUE(content::ExecuteJavaScript(contents->GetRenderViewHost(), | 449 ASSERT_TRUE(content::ExecuteJavaScript(contents->GetRenderViewHost(), |
| 451 "", "location = location;")); | 450 L"", L"location = location;")); |
| 452 js_reload_observer2.Wait(); | 451 js_reload_observer2.Wait(); |
| 453 EXPECT_FALSE(process_map->Contains( | 452 EXPECT_FALSE(process_map->Contains( |
| 454 contents->GetRenderProcessHost()->GetID())); | 453 contents->GetRenderProcessHost()->GetID())); |
| 455 } | 454 } |
| 456 | 455 |
| 457 // Tests that if we have a non-app process (path3/container.html) that has an | 456 // Tests that if we have a non-app process (path3/container.html) that has an |
| 458 // iframe with a URL in the app's extent (path1/iframe.html), then opening a | 457 // iframe with a URL in the app's extent (path1/iframe.html), then opening a |
| 459 // link from that iframe to a new window to a URL in the app's extent (path1/ | 458 // link from that iframe to a new window to a URL in the app's extent (path1/ |
| 460 // empty.html) results in the new window being in an app process. See | 459 // empty.html) results in the new window being in an app process. See |
| 461 // http://crbug.com/89272 for more details. | 460 // http://crbug.com/89272 for more details. |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 | 549 |
| 551 // Wait for app tab to be created and loaded. | 550 // Wait for app tab to be created and loaded. |
| 552 test_navigation_observer.WaitForObservation( | 551 test_navigation_observer.WaitForObservation( |
| 553 base::Bind(&content::RunMessageLoop), | 552 base::Bind(&content::RunMessageLoop), |
| 554 base::Bind(&MessageLoop::Quit, | 553 base::Bind(&MessageLoop::Quit, |
| 555 base::Unretained(MessageLoopForUI::current()))); | 554 base::Unretained(MessageLoopForUI::current()))); |
| 556 | 555 |
| 557 // App has loaded, and chrome.app.isInstalled should be true. | 556 // App has loaded, and chrome.app.isInstalled should be true. |
| 558 bool is_installed = false; | 557 bool is_installed = false; |
| 559 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 558 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 560 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), | 559 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 561 "", | 560 L"window.domAutomationController.send(chrome.app.isInstalled)", |
| 562 "window.domAutomationController.send(chrome.app.isInstalled)", | |
| 563 &is_installed)); | 561 &is_installed)); |
| 564 ASSERT_TRUE(is_installed); | 562 ASSERT_TRUE(is_installed); |
| 565 } | 563 } |
| 566 | 564 |
| 567 // Tests that if we have an app process (path1/container.html) with a non-app | 565 // Tests that if we have an app process (path1/container.html) with a non-app |
| 568 // iframe (path3/iframe.html), then opening a link from that iframe to a new | 566 // iframe (path3/iframe.html), then opening a link from that iframe to a new |
| 569 // window to a same-origin non-app URL (path3/empty.html) should keep the window | 567 // window to a same-origin non-app URL (path3/empty.html) should keep the window |
| 570 // in the app process. | 568 // in the app process. |
| 571 // This is in contrast to OpenAppFromIframe, since here the popup will not be | 569 // This is in contrast to OpenAppFromIframe, since here the popup will not be |
| 572 // missing special permissions and should be scriptable from the iframe. | 570 // missing special permissions and should be scriptable from the iframe. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 | 618 |
| 621 GURL base_url = GetTestBaseURL("app_process"); | 619 GURL base_url = GetTestBaseURL("app_process"); |
| 622 | 620 |
| 623 // Load the app, chrome.app.isInstalled should be true. | 621 // Load the app, chrome.app.isInstalled should be true. |
| 624 ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path1/empty.html")); | 622 ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path1/empty.html")); |
| 625 WebContents* contents = chrome::GetWebContentsAt(browser(), 0); | 623 WebContents* contents = chrome::GetWebContentsAt(browser(), 0); |
| 626 EXPECT_TRUE(process_map->Contains( | 624 EXPECT_TRUE(process_map->Contains( |
| 627 contents->GetRenderProcessHost()->GetID())); | 625 contents->GetRenderProcessHost()->GetID())); |
| 628 bool is_installed = false; | 626 bool is_installed = false; |
| 629 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 627 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 630 contents->GetRenderViewHost(), | 628 contents->GetRenderViewHost(), L"", |
| 631 "", | 629 L"window.domAutomationController.send(chrome.app.isInstalled)", |
| 632 "window.domAutomationController.send(chrome.app.isInstalled)", | |
| 633 &is_installed)); | 630 &is_installed)); |
| 634 ASSERT_TRUE(is_installed); | 631 ASSERT_TRUE(is_installed); |
| 635 | 632 |
| 636 // Crash the tab and reload it, chrome.app.isInstalled should still be true. | 633 // Crash the tab and reload it, chrome.app.isInstalled should still be true. |
| 637 content::CrashTab(chrome::GetActiveWebContents(browser())); | 634 content::CrashTab(chrome::GetActiveWebContents(browser())); |
| 638 content::WindowedNotificationObserver observer( | 635 content::WindowedNotificationObserver observer( |
| 639 content::NOTIFICATION_LOAD_STOP, | 636 content::NOTIFICATION_LOAD_STOP, |
| 640 content::Source<NavigationController>( | 637 content::Source<NavigationController>( |
| 641 &chrome::GetActiveWebContents(browser())->GetController())); | 638 &chrome::GetActiveWebContents(browser())->GetController())); |
| 642 chrome::Reload(browser(), CURRENT_TAB); | 639 chrome::Reload(browser(), CURRENT_TAB); |
| 643 observer.Wait(); | 640 observer.Wait(); |
| 644 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( | 641 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractBool( |
| 645 contents->GetRenderViewHost(), | 642 contents->GetRenderViewHost(), L"", |
| 646 "", | 643 L"window.domAutomationController.send(chrome.app.isInstalled)", |
| 647 "window.domAutomationController.send(chrome.app.isInstalled)", | |
| 648 &is_installed)); | 644 &is_installed)); |
| 649 ASSERT_TRUE(is_installed); | 645 ASSERT_TRUE(is_installed); |
| 650 } | 646 } |
| OLD | NEW |