OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/utf_string_conversions.h" | 5 #include "base/utf_string_conversions.h" |
6 #include "chrome/browser/extensions/extension_apitest.h" | 6 #include "chrome/browser/extensions/extension_apitest.h" |
7 #include "chrome/browser/extensions/extension_host.h" | 7 #include "chrome/browser/extensions/extension_host.h" |
8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.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" |
11 #include "chrome/browser/ui/browser.h" | 11 #include "chrome/browser/ui/browser.h" |
12 #include "chrome/browser/ui/browser_list.h" | 12 #include "chrome/browser/ui/browser_list.h" |
13 #include "chrome/browser/ui/browser_window.h" | 13 #include "chrome/browser/ui/browser_window.h" |
14 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 14 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
15 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/extensions/extension.h" | 16 #include "chrome/common/extensions/extension.h" |
17 #include "chrome/common/extensions/extension_file_util.h" | 17 #include "chrome/common/extensions/extension_file_util.h" |
18 #include "chrome/common/string_ordinal.h" | 18 #include "chrome/common/string_ordinal.h" |
19 #include "chrome/test/base/ui_test_utils.h" | 19 #include "chrome/test/base/ui_test_utils.h" |
20 #include "content/browser/renderer_host/render_view_host.h" | 20 #include "content/browser/renderer_host/render_view_host.h" |
21 #include "content/browser/tab_contents/tab_contents.h" | 21 #include "content/browser/tab_contents/tab_contents.h" |
22 #include "content/public/browser/navigation_entry.h" | 22 #include "content/public/browser/navigation_entry.h" |
23 #include "content/public/browser/notification_service.h" | 23 #include "content/public/browser/notification_service.h" |
24 #include "content/test/test_navigation_observer.h" | 24 #include "content/test/test_navigation_observer.h" |
25 #include "net/base/mock_host_resolver.h" | 25 #include "net/base/mock_host_resolver.h" |
26 | 26 |
| 27 using content::WebContents; |
| 28 |
27 class AppApiTest : public ExtensionApiTest { | 29 class AppApiTest : public ExtensionApiTest { |
28 protected: | 30 protected: |
29 // Gets the base URL for files for a specific test, making sure that it uses | 31 // Gets the base URL for files for a specific test, making sure that it uses |
30 // "localhost" as the hostname, since that is what the extent is declared | 32 // "localhost" as the hostname, since that is what the extent is declared |
31 // as in the test apps manifests. | 33 // as in the test apps manifests. |
32 GURL GetTestBaseURL(std::string test_directory) { | 34 GURL GetTestBaseURL(std::string test_directory) { |
33 GURL::Replacements replace_host; | 35 GURL::Replacements replace_host; |
34 std::string host_str("localhost"); // must stay in scope with replace_host | 36 std::string host_str("localhost"); // must stay in scope with replace_host |
35 replace_host.SetHostStr(host_str); | 37 replace_host.SetHostStr(host_str); |
36 GURL base_url = test_server()->GetURL( | 38 GURL base_url = test_server()->GetURL( |
(...skipping 11 matching lines...) Expand all Loading... |
48 content::NOTIFICATION_LOAD_STOP, | 50 content::NOTIFICATION_LOAD_STOP, |
49 content::NotificationService::AllSources()); | 51 content::NotificationService::AllSources()); |
50 ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( | 52 ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
51 opener_host, L"", L"window.open('" + UTF8ToWide(url.spec()) + L"');")); | 53 opener_host, L"", L"window.open('" + UTF8ToWide(url.spec()) + L"');")); |
52 | 54 |
53 // The above window.open call is not user-initiated, it will create | 55 // The above window.open call is not user-initiated, it will create |
54 // a popup window instead of a new tab in current window. | 56 // a popup window instead of a new tab in current window. |
55 // Now the active tab in last active window should be the new tab. | 57 // Now the active tab in last active window should be the new tab. |
56 Browser* last_active_browser = BrowserList::GetLastActive(); | 58 Browser* last_active_browser = BrowserList::GetLastActive(); |
57 EXPECT_TRUE(last_active_browser); | 59 EXPECT_TRUE(last_active_browser); |
58 TabContents* newtab = last_active_browser->GetSelectedTabContents(); | 60 WebContents* newtab = last_active_browser->GetSelectedWebContents(); |
59 EXPECT_TRUE(newtab); | 61 EXPECT_TRUE(newtab); |
60 observer.Wait(); | 62 observer.Wait(); |
61 EXPECT_EQ(url, newtab->GetController().GetLastCommittedEntry()->GetURL()); | 63 EXPECT_EQ(url, newtab->GetController().GetLastCommittedEntry()->GetURL()); |
62 if (newtab_process_should_equal_opener) | 64 if (newtab_process_should_equal_opener) |
63 EXPECT_EQ(opener_host->process(), newtab->GetRenderProcessHost()); | 65 EXPECT_EQ(opener_host->process(), newtab->GetRenderProcessHost()); |
64 else | 66 else |
65 EXPECT_NE(opener_host->process(), newtab->GetRenderProcessHost()); | 67 EXPECT_NE(opener_host->process(), newtab->GetRenderProcessHost()); |
66 } | 68 } |
67 | 69 |
68 // Simulates a page navigating itself to an URL, and waits for the navigation. | 70 // Simulates a page navigating itself to an URL, and waits for the navigation. |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION | | 500 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION | |
499 ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); | 501 ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); |
500 EXPECT_FALSE(process_map->Contains( | 502 EXPECT_FALSE(process_map->Contains( |
501 browser()->GetTabContentsAt(0)->GetRenderProcessHost()->GetID())); | 503 browser()->GetTabContentsAt(0)->GetRenderProcessHost()->GetID())); |
502 | 504 |
503 // Wait for popup window to appear. | 505 // Wait for popup window to appear. |
504 GURL app_url = base_url.Resolve("path1/empty.html"); | 506 GURL app_url = base_url.Resolve("path1/empty.html"); |
505 Browser* last_active_browser = BrowserList::GetLastActive(); | 507 Browser* last_active_browser = BrowserList::GetLastActive(); |
506 EXPECT_TRUE(last_active_browser); | 508 EXPECT_TRUE(last_active_browser); |
507 ASSERT_NE(browser(), last_active_browser); | 509 ASSERT_NE(browser(), last_active_browser); |
508 TabContents* newtab = last_active_browser->GetSelectedTabContents(); | 510 WebContents* newtab = last_active_browser->GetSelectedWebContents(); |
509 EXPECT_TRUE(newtab); | 511 EXPECT_TRUE(newtab); |
510 if (!newtab->GetController().GetLastCommittedEntry() || | 512 if (!newtab->GetController().GetLastCommittedEntry() || |
511 newtab->GetController().GetLastCommittedEntry()->GetURL() != app_url) { | 513 newtab->GetController().GetLastCommittedEntry()->GetURL() != app_url) { |
512 // TODO(gbillock): This still looks racy. Need to make a custom | 514 // TODO(gbillock): This still looks racy. Need to make a custom |
513 // observer to intercept new window creation and then look for | 515 // observer to intercept new window creation and then look for |
514 // NAV_ENTRY_COMMITTED on the new tab there. | 516 // NAV_ENTRY_COMMITTED on the new tab there. |
515 ui_test_utils::WindowedNotificationObserver observer( | 517 ui_test_utils::WindowedNotificationObserver observer( |
516 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 518 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
517 content::Source<NavigationController>(&(newtab->GetController()))); | 519 content::Source<NavigationController>(&(newtab->GetController()))); |
518 observer.Wait(); | 520 observer.Wait(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 | 555 |
554 // Wait for app tab to be created and loaded. | 556 // Wait for app tab to be created and loaded. |
555 test_navigation_observer.WaitForObservation( | 557 test_navigation_observer.WaitForObservation( |
556 base::Bind(&ui_test_utils::RunMessageLoop), | 558 base::Bind(&ui_test_utils::RunMessageLoop), |
557 base::Bind(&MessageLoop::Quit, | 559 base::Bind(&MessageLoop::Quit, |
558 base::Unretained(MessageLoopForUI::current()))); | 560 base::Unretained(MessageLoopForUI::current()))); |
559 | 561 |
560 // App has loaded, and chrome.app.isInstalled should be true. | 562 // App has loaded, and chrome.app.isInstalled should be true. |
561 bool is_installed = false; | 563 bool is_installed = false; |
562 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | 564 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
563 browser()->GetSelectedTabContents()->GetRenderViewHost(), L"", | 565 browser()->GetSelectedWebContents()->GetRenderViewHost(), L"", |
564 L"window.domAutomationController.send(chrome.app.isInstalled)", | 566 L"window.domAutomationController.send(chrome.app.isInstalled)", |
565 &is_installed)); | 567 &is_installed)); |
566 ASSERT_TRUE(is_installed); | 568 ASSERT_TRUE(is_installed); |
567 } | 569 } |
568 | 570 |
569 // Tests that if we have an app process (path1/container.html) with a non-app | 571 // Tests that if we have an app process (path1/container.html) with a non-app |
570 // iframe (path3/iframe.html), then opening a link from that iframe to a new | 572 // iframe (path3/iframe.html), then opening a link from that iframe to a new |
571 // window to a same-origin non-app URL (path3/empty.html) should keep the window | 573 // window to a same-origin non-app URL (path3/empty.html) should keep the window |
572 // in the app process. | 574 // in the app process. |
573 // This is in contrast to OpenAppFromIframe, since here the popup will not be | 575 // This is in contrast to OpenAppFromIframe, since here the popup will not be |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 // This is necessary for popup windows without a cross-site transition. | 609 // This is necessary for popup windows without a cross-site transition. |
608 if (browser() == BrowserList::GetLastActive()) { | 610 if (browser() == BrowserList::GetLastActive()) { |
609 // Grab the second window and show it. | 611 // Grab the second window and show it. |
610 ASSERT_TRUE(BrowserList::size() == 2); | 612 ASSERT_TRUE(BrowserList::size() == 2); |
611 Browser* popup_browser = *(++BrowserList::begin()); | 613 Browser* popup_browser = *(++BrowserList::begin()); |
612 popup_browser->window()->Show(); | 614 popup_browser->window()->Show(); |
613 } | 615 } |
614 Browser* last_active_browser = BrowserList::GetLastActive(); | 616 Browser* last_active_browser = BrowserList::GetLastActive(); |
615 EXPECT_TRUE(last_active_browser); | 617 EXPECT_TRUE(last_active_browser); |
616 ASSERT_NE(browser(), last_active_browser); | 618 ASSERT_NE(browser(), last_active_browser); |
617 TabContents* newtab = last_active_browser->GetSelectedTabContents(); | 619 WebContents* newtab = last_active_browser->GetSelectedWebContents(); |
618 EXPECT_TRUE(newtab); | 620 EXPECT_TRUE(newtab); |
619 GURL non_app_url = base_url.Resolve("path3/empty.html"); | 621 GURL non_app_url = base_url.Resolve("path3/empty.html"); |
620 observer.Wait(); | 622 observer.Wait(); |
621 | 623 |
622 // Popup window should be in the app's process. | 624 // Popup window should be in the app's process. |
623 content::RenderProcessHost* popup_process = | 625 content::RenderProcessHost* popup_process = |
624 last_active_browser->GetTabContentsAt(0)->GetRenderProcessHost(); | 626 last_active_browser->GetTabContentsAt(0)->GetRenderProcessHost(); |
625 EXPECT_EQ(process, popup_process); | 627 EXPECT_EQ(process, popup_process); |
626 } | 628 } |
627 | 629 |
(...skipping 14 matching lines...) Expand all Loading... |
642 EXPECT_TRUE(process_map->Contains( | 644 EXPECT_TRUE(process_map->Contains( |
643 contents->GetRenderProcessHost()->GetID())); | 645 contents->GetRenderProcessHost()->GetID())); |
644 bool is_installed = false; | 646 bool is_installed = false; |
645 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | 647 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
646 contents->GetRenderViewHost(), L"", | 648 contents->GetRenderViewHost(), L"", |
647 L"window.domAutomationController.send(chrome.app.isInstalled)", | 649 L"window.domAutomationController.send(chrome.app.isInstalled)", |
648 &is_installed)); | 650 &is_installed)); |
649 ASSERT_TRUE(is_installed); | 651 ASSERT_TRUE(is_installed); |
650 | 652 |
651 // Crash the tab and reload it, chrome.app.isInstalled should still be true. | 653 // Crash the tab and reload it, chrome.app.isInstalled should still be true. |
652 ui_test_utils::CrashTab(browser()->GetSelectedTabContents()); | 654 ui_test_utils::CrashTab(browser()->GetSelectedWebContents()); |
653 ui_test_utils::WindowedNotificationObserver observer( | 655 ui_test_utils::WindowedNotificationObserver observer( |
654 content::NOTIFICATION_LOAD_STOP, | 656 content::NOTIFICATION_LOAD_STOP, |
655 content::Source<NavigationController>( | 657 content::Source<NavigationController>( |
656 &browser()->GetSelectedTabContentsWrapper()->tab_contents()-> | 658 &browser()->GetSelectedTabContentsWrapper()->tab_contents()-> |
657 GetController())); | 659 GetController())); |
658 browser()->Reload(CURRENT_TAB); | 660 browser()->Reload(CURRENT_TAB); |
659 observer.Wait(); | 661 observer.Wait(); |
660 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | 662 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
661 contents->GetRenderViewHost(), L"", | 663 contents->GetRenderViewHost(), L"", |
662 L"window.domAutomationController.send(chrome.app.isInstalled)", | 664 L"window.domAutomationController.send(chrome.app.isInstalled)", |
663 &is_installed)); | 665 &is_installed)); |
664 ASSERT_TRUE(is_installed); | 666 ASSERT_TRUE(is_installed); |
665 } | 667 } |
OLD | NEW |