15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/command_line.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sys_info.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/command_updater.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/first_run/first_run.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sessions/session_backend.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sessions/session_service_factory.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/translate/translate_tab_helper.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_command_controller.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_iterator.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_ui_prefs.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/pinned_tab_codec.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/translate/language_detection_details.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/test/base/test_switches.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/favicon_status.h" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/host_zoom_map.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page_delegate.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_service.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/resource_context.h" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/renderer_preferences.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/url_constants.h" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_navigation_observer.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 77b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/mac_util.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_nsautorelease_pool.h" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/cocoa/run_loop_testing.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/rtl.h" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::InterstitialPage; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::HostZoomMap; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContentsObserver; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kBeforeUnloadHTML = 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><title>beforeunload</title></head><body>" 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<script>window.onbeforeunload=function(e){return 'foo'}</script>" 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kOpenNewBeforeUnloadPage = 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "w=window.open(); w.onbeforeunload=function(e){return 'foo'};"; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType* kBeforeUnloadFile = 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("beforeunload.html"); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType* kTitle2File = FILE_PATH_LITERAL("title2.html"); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDocRoot[] = 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("chrome/test/data"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Given a page title, returns the expected window caption string. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 WindowCaptionFromPageTitle(const string16& page_title) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_CHROMEOS) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Mac or ChromeOS, we don't want to suffix the page title with 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the application name. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_title.empty()) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_BROWSER_WINDOW_MAC_TAB_UNTITLED); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_title; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_title.empty()) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_PRODUCT_NAME); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringFUTF16(IDS_BROWSER_WINDOW_TITLE_FORMAT, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_title); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the number of active RenderProcessHosts. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int CountRenderProcessHosts() { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = 0; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (content::RenderProcessHost::iterator i( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::AllHostsIterator()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !i.IsAtEnd(); i.Advance()) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++result; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockTabStripModelObserver : public TabStripModelObserver { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabStripModelObserver() : closing_count_(0) {} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TabClosingAt(TabStripModel* tab_strip_model, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* contents, 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index) OVERRIDE { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++closing_count_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closing_count() const { return closing_count_; } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closing_count_; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockTabStripModelObserver); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class InterstitialObserver : public content::WebContentsObserver { 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialObserver(content::WebContents* web_contents, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& attach_callback, 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& detach_callback) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : WebContentsObserver(web_contents), 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) attach_callback_(attach_callback), 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detach_callback_(detach_callback) { 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidAttachInterstitialPage() OVERRIDE { 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) attach_callback_.Run(); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidDetachInterstitialPage() OVERRIDE { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detach_callback_.Run(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure attach_callback_; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure detach_callback_; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InterstitialObserver); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Causes the browser to swap processes on a redirect to an HTTPS URL. 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class TransferHttpsRedirectsContentBrowserClient 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public chrome::ChromeContentBrowserClient { 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ShouldSwapProcessesForRedirect( 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ResourceContext* resource_context, 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& current_url, 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& new_url) OVERRIDE { 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return new_url.SchemeIs(chrome::kHttpsScheme); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by CloseWithAppMenuOpen. Invokes CloseWindow on the supplied browser. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CloseWindowCallback(Browser* browser) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by CloseWithAppMenuOpen. Posts a CloseWindowCallback and shows the app 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// menu. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RunCloseWithAppMenuCallback(Browser* browser) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowAppMenu is modal under views. Schedule a task that closes the window. 211b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, base::Bind(&CloseWindowCallback, browser)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowAppMenu(browser); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Displays "INTERSTITIAL" while the interstitial is attached. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (InterstitialPage can be used in a test directly, but there would be no way 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to visually tell if it is showing or not.) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestInterstitialPage : public content::InterstitialPageDelegate { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestInterstitialPage(WebContents* tab, bool new_navigation, const GURL& url) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page_ = InterstitialPage::Create( 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab, new_navigation, url , this); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page_->Show(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestInterstitialPage() { } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Proceed() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page_->Proceed(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetHTMLContents() OVERRIDE { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "<h1>INTERSTITIAL</h1>"; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPage* interstitial_page_; // Owns us. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserTest : public ExtensionBrowserTest { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In RTL locales wrap the page title with RTL embedding characters so that it 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // matches the value returned by GetWindowTitle(). 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 LocaleWindowCaptionFromPageTitle(const string16& expected_title) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 page_title = WindowCaptionFromPageTitle(expected_title); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string locale = g_browser_process->GetApplicationLocale(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::i18n::GetTextDirectionForLocale(locale.c_str()) == 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::i18n::RIGHT_TO_LEFT) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::i18n::WrapStringWithLTRFormatting(&page_title); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_title; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do we need to use the above code on POSIX as well? 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_title; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the app extension aptly named "App Test". 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* GetExtension() { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ExtensionSet* extensions = extensions::ExtensionSystem::Get( 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service()->extensions(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ExtensionSet::const_iterator it = extensions->begin(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != extensions->end(); ++it) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*it)->name() == "App Test") 2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return it->get(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Launch the app on a page with no title, check that the app title was set 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correctly. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, NoTitle) { 278558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 279558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 280a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 281558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 282558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 283558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTitle1File))); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(LocaleWindowCaptionFromPageTitle(ASCIIToUTF16("title1.html")), 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->GetWindowTitleForCurrentTab()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 tab_title; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::GetCurrentTabTitle(browser(), &tab_title)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("title1.html"), tab_title); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Launch the app, navigate to a page with a title, check that the app title 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// was set correctly. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, Title) { 298558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 299558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 300a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 301558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 302558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 303558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTitle2File))); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 test_title(ASCIIToUTF16("Title Of Awesomeness")); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(LocaleWindowCaptionFromPageTitle(test_title), 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->GetWindowTitleForCurrentTab()); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 tab_title; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::GetCurrentTabTitle(browser(), &tab_title)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(test_title, tab_title); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, JavascriptAlertActivatesTab) { 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* second_tab = browser()->tab_strip_model()->GetWebContentsAt(1); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(second_tab); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_tab->GetRenderViewHost()->ExecuteJavascriptInWebFrame( 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16(), 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("alert('Activate!');")); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->CloseModalDialog(); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/114859. Times out frequently on Windows. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ThirtyFourTabs DISABLED_ThirtyFourTabs 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ThirtyFourTabs ThirtyFourTabs 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create 34 tabs and verify that a lot of processes have been created. The 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// exact number of processes depends on the amount of memory. Previously we 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// had a hard limit of 31 processes and this test is mainly directed at 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// verifying that we don't crash when we pass this limit. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Warning: this test can take >30 seconds when running on a slow (low 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// memory?) Mac builder. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_ThirtyFourTabs) { 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kTitle2File))); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There is one initial tab. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kTabCount = 34; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int ix = 0; ix != (kTabCount - 1); ++ix) { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), url, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kTabCount, browser()->tab_strip_model()->count()); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See GetMaxRendererProcessCount() in 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content/browser/renderer_host/render_process_host_impl.cc 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the algorithm to decide how many processes to create. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kExpectedProcessCount = 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ARCH_CPU_64_BITS) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::SysInfo::AmountOfPhysicalMemoryMB() >= 2048) { 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(CountRenderProcessHosts(), kExpectedProcessCount); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(CountRenderProcessHosts(), kExpectedProcessCount); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for crbug.com/22004. Reloading a page with a before unload handler and 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// then canceling the dialog should not leave the throbber spinning. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, ReloadThenCancelBeforeUnload) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(std::string("data:text/html,") + kBeforeUnloadHTML); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another page, but click cancel in the dialog. Make sure that 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the throbber stops spinning. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->CloseModalDialog(); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE( 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->IsLoading()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the beforeunload handler so the test can easily exit. 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost()-> 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("onbeforeunload=null;")); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Ensure that a transferred cross-process navigation does not generate 397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// DidStopLoading events until the navigation commits. If it did, then 398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// ui_test_utils::NavigateToURL would proceed before the URL had committed. 399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/243957. 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, NoStopDuringTransferUntilCommit) { 401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Create HTTP and HTTPS servers for a cross-site transition. 402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::SpawnedTestServer https_test_server(net::SpawnedTestServer::TYPE_HTTPS, 404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) net::SpawnedTestServer::kLocalhost, 405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FilePath(kDocRoot)); 406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(https_test_server.Start()); 407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Temporarily replace ContentBrowserClient with one that will cause a 409868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // process swap on all redirects to HTTPS URLs. 410868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TransferHttpsRedirectsContentBrowserClient new_client; 411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::ContentBrowserClient* old_client = 412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetBrowserClientForTesting(&new_client); 413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 414868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL init_url(test_server()->GetURL("files/title1.html")); 415868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), init_url); 416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 417868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Navigate to a same-site page that redirects, causing a transfer. 418868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL dest_url(https_test_server.GetURL("files/title2.html")); 419868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL redirect_url(test_server()->GetURL("server-redirect?" + 420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dest_url.spec())); 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), redirect_url); 422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // We should immediately see the new committed entry. 424868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); 425868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(contents->GetController().GetPendingEntry()); 426868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(dest_url, 427868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) contents->GetController().GetLastCommittedEntry()->GetURL()); 428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Restore previous browser client. 430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetBrowserClientForTesting(old_client); 431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 432868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that a cross-process redirect will only cause the beforeunload 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// handler to run once. 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, SingleBeforeUnloadAfterRedirect) { 436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Create HTTP and HTTPS servers for a cross-site transition. 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer https_test_server(net::SpawnedTestServer::TYPE_HTTPS, 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(kDocRoot)); 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(https_test_server.Start()); 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Temporarily replace ContentBrowserClient with one that will cause a 444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // process swap on all redirects to HTTPS URLs. 445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TransferHttpsRedirectsContentBrowserClient new_client; 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ContentBrowserClient* old_client = 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetBrowserClientForTesting(&new_client); 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate to a page with a beforeunload handler. 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL url(test_server()->GetURL("files/beforeunload.html")); 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate to a URL that redirects to another process and approve the 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // beforeunload dialog that pops up. 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver nav_observer( 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL https_url(https_test_server.GetURL("files/title1.html")); 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL redirect_url(test_server()->GetURL("server-redirect?" + 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) https_url.spec())); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->OpenURL(OpenURLParams(redirect_url, Referrer(), CURRENT_TAB, 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::PAGE_TRANSITION_TYPED, false)); 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE( 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static_cast<JavaScriptAppModalDialog*>(alert)->is_before_unload_dialog()); 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) alert->native_dialog()->AcceptAppModalDialog(); 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) nav_observer.Wait(); 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Restore previous browser client. 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetBrowserClientForTesting(old_client); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for crbug.com/80401. Canceling a before unload dialog should reset 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the URL to the previous page's URL. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CancelBeforeUnloadResetsURL) { 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kBeforeUnloadFile))); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to a page that triggers a cross-site transition. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url2(test_server()->GetURL("files/title1.html")); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->OpenURL(OpenURLParams( 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver host_destroyed_observer( 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel the dialog. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->CloseModalDialog(); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE( 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->IsLoading()); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify there are no pending history items after the dialog is cancelled. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (see crbug.com/93858) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationEntry* entry = browser()->tab_strip_model()-> 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetController().GetPendingEntry(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, entry); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the ShouldClose_ACK to arrive. We can detect it by waiting for 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the pending RVH to be destroyed. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_destroyed_observer.Wait(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, browser()->toolbar_model()->GetURL()); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the beforeunload handler so the test can easily exit. 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost()-> 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("onbeforeunload=null;")); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Crashy on mac. http://crbug.com/38522 Crashy on win too (after 3 years). 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_WIN) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_SingleBeforeUnloadAfterWindowClose \ 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_SingleBeforeUnloadAfterWindowClose 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_SingleBeforeUnloadAfterWindowClose \ 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SingleBeforeUnloadAfterWindowClose 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for crbug.com/11647. A page closed with window.close() should not have 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// two beforeunload dialogs shown. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_SingleBeforeUnloadAfterWindowClose) { 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost()-> 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16(kOpenNewBeforeUnloadPage)); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the new window with JavaScript, which should show a single 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // beforeunload dialog. Then show another alert, to make it easy to verify 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that a second beforeunload dialog isn't shown. 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetWebContentsAt(0)->GetRenderViewHost()-> 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("w.close(); alert('bar');")); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->native_dialog()->AcceptAppModalDialog(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert = ui_test_utils::WaitForAppModalDialog(); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)-> 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_before_unload_dialog()); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->native_dialog()->AcceptAppModalDialog(); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserTest.BeforeUnloadVsBeforeReload times out on Windows. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/130411 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_BeforeUnloadVsBeforeReload DISABLED_BeforeUnloadVsBeforeReload 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_BeforeUnloadVsBeforeReload BeforeUnloadVsBeforeReload 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when a page has an onunload handler, reloading a page shows a 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// different dialog than navigating to a different page. 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_BeforeUnloadVsBeforeReload) { 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(std::string("data:text/html,") + kBeforeUnloadHTML); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reload the page, and check that we get a "before reload" dialog. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(static_cast<JavaScriptAppModalDialog*>(alert)->is_reload()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancel the reload. 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->native_dialog()->CancelAppModalDialog(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another url, and check that we get a "before unload" dialog. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url2(std::string("about:blank")); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->OpenURL(OpenURLParams( 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert = ui_test_utils::WaitForAppModalDialog(); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)->is_reload()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accept the navigation so we end up on a page without a beforeunload hook. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->native_dialog()->AcceptAppModalDialog(); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BeforeUnloadAtQuitWithTwoWindows is a regression test for 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/11842. It opens two windows, one of which has a 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// beforeunload handler and attempts to exit cleanly. 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BeforeUnloadAtQuitWithTwoWindows : public InProcessBrowserTest { 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This test is for testing a specific shutdown behavior. This mimics what 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // happens in InProcessBrowserTest::RunTestOnMainThread and QuitBrowsers, but 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ensures that it happens through the single IDC_EXIT of the test. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cycle both the MessageLoop and the Cocoa runloop twice to flush out any 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chrome work that generates Cocoa work. Do this twice since there are two 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browsers that must be closed. 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CycleRunLoops(); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CycleRunLoops(); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the application event loop to completion, which will cycle the 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // native MessagePump on all platforms. 595b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, 596b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::QuitClosure()); 597b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->Run(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Take care of any remaining Cocoa work. 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CycleRunLoops(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At this point, quit should be for real now. 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0u, chrome::GetTotalBrowserCount()); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A helper function that cycles the MessageLoop, and on Mac, the Cocoa run 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loop. It also drains the NSAutoreleasePool. 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CycleRunLoops() { 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::testing::NSRunLoopRunAllPending(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutoreleasePool()->Recycle(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled, http://crbug.com/159214 . 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BeforeUnloadAtQuitWithTwoWindows, 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_IfThisTestTimesOutItIndicatesFAILURE) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the first browser, set up a page that has a beforeunload handler. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(std::string("data:text/html,") + kBeforeUnloadHTML); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a second browser window at about:blank. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BrowserAddedObserver browser_added_observer; 626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::NewEmptyWindow(browser()->profile(), chrome::GetActiveDesktop()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* second_window = browser_added_observer.WaitForSingleNewBrowser(); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(second_window, GURL("about:blank")); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the application to quit. IDC_EXIT calls AttemptUserExit, which on 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // everything but ChromeOS allows unload handlers to block exit. On that 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // platform, though, it exits unconditionally. See the comment and bug ID 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in AttemptUserExit() in application_lifetime.cc. 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::AttemptExit(); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ExecuteCommand(second_window, IDC_EXIT); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The beforeunload handler will run at exit, ensure it does, and then accept 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it to allow shutdown to proceed. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(alert); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<JavaScriptAppModalDialog*>(alert)->is_before_unload_dialog()); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert->native_dialog()->AcceptAppModalDialog(); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But wait there's more! If this test times out, it likely means that the 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser has not been able to quit correctly, indicating there's a 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // regression of the bug noted above. 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that scripts can fork a new renderer process for a cross-site popup, 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// based on http://www.google.com/chrome/intl/en/webmasters-faq.html#newtab. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The script must open a new tab, set its window.opener to null, and navigate 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it to a cross-site URL. It should also work for meta-refreshes. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See http://crbug.com/93517. 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, NullOpenerRedirectForksProcess) { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisablePopupBlocking); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create http and https servers for a cross-site transition. 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer https_test_server(net::SpawnedTestServer::TYPE_HTTPS, 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(kDocRoot)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(https_test_server.Start()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL http_url(test_server()->GetURL("files/title1.html")); 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL https_url(https_test_server.GetURL(std::string())); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start with an http URL. 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), http_url); 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* oldtab = browser()->tab_strip_model()->GetActiveWebContents(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = oldtab->GetRenderProcessHost(); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open a tab to a blank page, set its opener to null, and redirect it 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cross-site. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string redirect_popup = "w=window.open();"; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirect_popup += "w.opener=null;"; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirect_popup += "w.document.location=\""; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirect_popup += https_url.spec(); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirect_popup += "\";"; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver popup_observer( 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver nav_observer( 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldtab->GetRenderViewHost()-> 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(redirect_popup)); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for popup window to appear and finish navigating. 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_observer.Wait(); 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, browser()->tab_strip_model()->count()); 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* newtab = browser()->tab_strip_model()->GetActiveWebContents(); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(newtab); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(oldtab, newtab); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_observer.Wait(); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(newtab->GetController().GetLastCommittedEntry()); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(https_url.spec(), 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab->GetController().GetLastCommittedEntry()->GetURL().spec()); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Popup window should not be in the opener's process. 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* popup_process = 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab->GetRenderProcessHost(); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(process, popup_process); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open a tab to a blank page, set its opener to null, and use a 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // meta-refresh to navigate it instead. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string refresh_popup = "w=window.open();"; 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refresh_popup += "w.opener=null;"; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refresh_popup += "w.document.write("; 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refresh_popup += "'<META HTTP-EQUIV=\"refresh\" content=\"0; url="; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refresh_popup += https_url.spec(); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refresh_popup += "\">');w.document.close();"; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver popup_observer2( 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver nav_observer2( 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldtab->GetRenderViewHost()-> 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(refresh_popup)); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for popup window to appear and finish navigating. 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_observer2.Wait(); 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3, browser()->tab_strip_model()->count()); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* newtab2 = browser()->tab_strip_model()->GetActiveWebContents(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(newtab2); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(oldtab, newtab2); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_observer2.Wait(); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(newtab2->GetController().GetLastCommittedEntry()); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(https_url.spec(), 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab2->GetController().GetLastCommittedEntry()->GetURL().spec()); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This popup window should also not be in the opener's process. 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* popup_process2 = 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab2->GetRenderProcessHost(); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(process, popup_process2); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that other popup navigations that do not follow the steps at 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://www.google.com/chrome/intl/en/webmasters-faq.html#newtab will not 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fork a new renderer process. 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, OtherRedirectsDontForkProcess) { 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisablePopupBlocking); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create http and https servers for a cross-site transition. 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer https_test_server(net::SpawnedTestServer::TYPE_HTTPS, 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(kDocRoot)); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(https_test_server.Start()); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL http_url(test_server()->GetURL("files/title1.html")); 758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL https_url(https_test_server.GetURL(std::string())); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start with an http URL. 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), http_url); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* oldtab = browser()->tab_strip_model()->GetActiveWebContents(); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = oldtab->GetRenderProcessHost(); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open a tab to a blank page, set its opener to null, and redirect it 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cross-site. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string dont_fork_popup = "w=window.open();"; 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dont_fork_popup += "w.document.location=\""; 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dont_fork_popup += https_url.spec(); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dont_fork_popup += "\";"; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver popup_observer( 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver nav_observer( 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldtab->GetRenderViewHost()-> 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(dont_fork_popup)); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for popup window to appear and finish navigating. 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_observer.Wait(); 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, browser()->tab_strip_model()->count()); 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* newtab = browser()->tab_strip_model()->GetActiveWebContents(); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(newtab); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(oldtab, newtab); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_observer.Wait(); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(newtab->GetController().GetLastCommittedEntry()); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(https_url.spec(), 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab->GetController().GetLastCommittedEntry()->GetURL().spec()); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Popup window should still be in the opener's process. 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* popup_process = 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newtab->GetRenderProcessHost(); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(process, popup_process); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same thing if the current tab tries to navigate itself. 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string navigate_str = "document.location=\""; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigate_str += https_url.spec(); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigate_str += "\";"; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver nav_observer2( 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldtab->GetRenderViewHost()-> 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(navigate_str)); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav_observer2.Wait(); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(oldtab->GetController().GetLastCommittedEntry()); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(https_url.spec(), 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldtab->GetController().GetLastCommittedEntry()->GetURL().spec()); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Original window should still be in the original process. 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* new_process = newtab->GetRenderProcessHost(); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(process, new_process); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that get_process_idle_time() returns reasonable values when compared 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with time deltas measured locally. 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, RenderIdleTime) { 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks start = base::TimeTicks::Now(); 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTitle1File))); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::iterator it( 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::AllHostsIterator()); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; !it.IsAtEnd(); it.Advance()) { 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta renderer_td = 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it.GetCurrentValue()->GetChildProcessIdleTime(); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta browser_td = base::TimeTicks::Now() - start; 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(browser_td >= renderer_td); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test IDC_CREATE_SHORTCUTS command is enabled for url scheme file, ftp, http 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and https and disabled for chrome://, about:// etc. 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(pinkerton): Disable app-mode in the model until we implement it 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on the Mac. http://crbug.com/13148 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CommandCreateAppShortcutFile) { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const base::FilePath::CharType* kEmptyFile = 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("empty.html"); 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL file_url(ui_test_utils::GetTestUrl(base::FilePath( 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kEmptyFile))); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_url.SchemeIs(chrome::kFileScheme)); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), file_url); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CommandCreateAppShortcutHttp) { 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 858c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL http_url(test_server()->GetURL(std::string())); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(http_url.SchemeIs(chrome::kHttpScheme)); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), http_url); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CommandCreateAppShortcutHttps) { 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer test_server(net::SpawnedTestServer::TYPE_HTTPS, 869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(kDocRoot)); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server.Start()); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL https_url(test_server.GetURL("/")); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(https_url.SchemeIs(chrome::kHttpsScheme)); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), https_url); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CommandCreateAppShortcutFtp) { 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer test_server(net::SpawnedTestServer::TYPE_FTP, 883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(kDocRoot)); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server.Start()); 886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL ftp_url(test_server.GetURL(std::string())); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ftp_url.SchemeIs(chrome::kFtpScheme)); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), ftp_url); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, CommandCreateAppShortcutInvalid) { 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Urls that should not have shortcuts. 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL new_tab_url(chrome::kChromeUINewTabURL); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), new_tab_url); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL history_url(chrome::kChromeUIHistoryURL); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), history_url); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL downloads_url(chrome::kChromeUIDownloadsURL); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), downloads_url); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GURL blank_url(content::kAboutBlankURL); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), blank_url); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_CREATE_SHORTCUTS)); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Change a tab into an application window. 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DISABLED: http://crbug.com/72310 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, DISABLED_ConvertTabToAppShortcut) { 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 918c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL http_url(test_server()->GetURL(std::string())); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(http_url.SchemeIs(chrome::kHttpScheme)); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->count()); 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* initial_tab = browser()->tab_strip_model()->GetWebContentsAt(0); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* app_tab = chrome::AddSelectedTabWithURL( 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), http_url, content::PAGE_TRANSITION_TYPED); 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, browser()->tab_strip_model()->count()); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(), 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Normal tabs should accept load drops. 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(initial_tab->GetMutableRendererPrefs()->can_accept_load_drops); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(app_tab->GetMutableRendererPrefs()->can_accept_load_drops); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn |app_tab| into a tab in an app panel. 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ConvertTabToAppWindow(browser(), app_tab); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(), 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the new browser. 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* app_browser = NULL; 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done() && !app_browser; it.Next()) { 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != browser()) 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_browser = *it; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(app_browser); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the tab contents is in the new browser, and not in the old. 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->count()); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(initial_tab, browser()->tab_strip_model()->GetWebContentsAt(0)); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the appliaction browser has a single tab, and that tab contains 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the content that we app-ified. 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, app_browser->tab_strip_model()->count()); 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(app_tab, app_browser->tab_strip_model()->GetWebContentsAt(0)); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Normal tabs should accept load drops. 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(initial_tab->GetMutableRendererPrefs()->can_accept_load_drops); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The tab in an app window should not. 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(app_tab->GetMutableRendererPrefs()->can_accept_load_drops); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_MACOSX) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test RenderView correctly send back favicon url for web page that redirects 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an anchor in javascript body.onload handler. 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_FaviconOfOnloadRedirectToAnchorPage) { 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(test_server()->GetURL("files/onload_redirect_to_anchor.html")); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_favicon_url(test_server()->GetURL("files/test.png")); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationEntry* entry = browser()->tab_strip_model()-> 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetController().GetActiveEntry(); 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_favicon_url.spec(), entry->GetFavicon().url.spec()); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_LINUX) || defined (OS_WIN) 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/83828. On Mac 10.6, the failure rate is 14% 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_FaviconChange DISABLED_FaviconChange 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_FaviconChange FaviconChange 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that an icon can be changed from JS. 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_FaviconChange) { 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const base::FilePath::CharType* kFile = 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("onload_change_favicon.html"); 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL file_url(ui_test_utils::GetTestUrl(base::FilePath( 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kFile))); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_url.SchemeIs(chrome::kFileScheme)); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), file_url); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationEntry* entry = browser()->tab_strip_model()-> 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActiveWebContents()->GetController().GetActiveEntry(); 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const base::FilePath::CharType* kIcon = 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("test1.png"); 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL expected_favicon_url(ui_test_utils::GetTestUrl(base::FilePath( 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kIcon))); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_favicon_url.spec(), entry->GetFavicon().url.spec()); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/172336 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_TabClosingWhenRemovingExtension \ 10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_TabClosingWhenRemovingExtension 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_TabClosingWhenRemovingExtension TabClosingWhenRemovingExtension 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure TabClosing is sent when uninstalling an extension that is an app 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab. 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_TabClosingWhenRemovingExtension) { 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.example.com", "127.0.0.1"); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(test_server()->GetURL("empty.html")); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* model = browser()->tab_strip_model(); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("app/"))); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = GetExtension(); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* app_contents = WebContents::Create( 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents::CreateParams(browser()->profile())); 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::CreateForWebContents(app_contents); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TabHelper* extensions_tab_helper = 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::FromWebContents(app_contents); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_tab_helper->SetExtensionApp(extension_app); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model->AddWebContents(app_contents, 0, content::PageTransitionFromInt(0), 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel::ADD_NONE); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->SetTabPinned(0, true); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabStripModelObserver observer; 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->AddObserver(&observer); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uninstall the extension and make sure TabClosing is sent. 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->UninstallExtension(GetExtension()->id(), false, NULL); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, observer.closing_count()); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->RemoveObserver(&observer); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should only be one tab now. 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->count()); 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Open with --app-id=<id>, and see that an app window opens. 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, AppIdSwitch) { 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app. 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.example.com", "127.0.0.1"); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("app/"))); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = GetExtension(); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kAppId, extension_app->id()); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), command_line, first_run); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launch.OpenApplicationWindow(browser()->profile(), NULL)); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the new browser has an app name. 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(), 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the new browser. 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done() && !new_browser; it.Next()) { 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != browser()) 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_browser = *it; 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser != browser()); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app_name should include the app's ID. 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE( 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->app_name_.find(extension_app->id()), 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string::npos) << new_browser->app_name_; 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the CLD (Compact Language Detection) works properly. 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, PageLanguageDetection) { 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) //std::string lang; 109790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LanguageDetectionDetails details; 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab with a page in English. 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, GURL(test_server()->GetURL("files/english_page.html")), 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_web_contents = 11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TranslateTabHelper* translate_tab_helper = 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TranslateTabHelper::FromWebContents(current_web_contents); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents> source(current_web_contents); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::WindowedNotificationObserverWithDetails< 111090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LanguageDetectionDetails> 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) en_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", translate_tab_helper->language_state().original_language()); 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) en_language_detected_signal.Wait(); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(en_language_detected_signal.GetDetailsFor( 111690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) source.map_key(), &details)); 111790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("en", details.adopted_language); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("en", translate_tab_helper->language_state().original_language()); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now navigate to a page in French. 112190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::WindowedNotificationObserverWithDetails< 112290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LanguageDetectionDetails> 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL( 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(test_server()->GetURL("files/french_page.html"))); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fr_language_detected_signal.Wait(); 112890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) details.adopted_language.clear(); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(fr_language_detected_signal.GetDetailsFor( 113090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) source.map_key(), &details)); 113190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("fr", details.adopted_language); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("fr", translate_tab_helper->language_state().original_language()); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chromeos defaults to restoring the last session, so this test isn't 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// applicable. 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Crashy, http://crbug.com/38522 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RestorePinnedTabs DISABLED_RestorePinnedTabs 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure pinned tabs are restored correctly on start. 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, RestorePinnedTabs) { 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an pinned app tab. 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.example.com", "127.0.0.1"); 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(test_server()->GetURL("empty.html")); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* model = browser()->tab_strip_model(); 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("app/"))); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = GetExtension(); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* app_contents = WebContents::Create( 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents::CreateParams(browser()->profile())); 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::CreateForWebContents(app_contents); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TabHelper* extensions_tab_helper = 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::FromWebContents(app_contents); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_tab_helper->SetExtensionApp(extension_app); 11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model->AddWebContents(app_contents, 0, content::PageTransitionFromInt(0), 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel::ADD_NONE); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->SetTabPinned(0, true); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a non pinned tab. 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a pinned non-app tab. 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 116990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->SetTabPinned(2, true); 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Write out the pinned tabs. 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PinnedTabCodec::WritePinnedTabs(browser()->profile()); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate launching again. 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine dummy(CommandLine::NO_PROGRAM); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IsFirstRun first_run = first_run::IsChromeFirstRun() ? 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::startup::IS_FIRST_RUN : chrome::startup::IS_NOT_FIRST_RUN; 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartupBrowserCreatorImpl launch(base::FilePath(), dummy, first_run); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) launch.profile_ = browser()->profile(); 118190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) launch.ProcessStartupURLs(std::vector<GURL>(), 118290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->host_desktop_type()); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(), 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the new browser. 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done() && !new_browser; it.Next()) { 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != browser()) 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_browser = *it; 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser != browser()); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should get back an additional tab for the app, and another for the 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default home page. 11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3, new_browser->tab_strip_model()->count()); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the state matches. 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* new_model = new_browser->tab_strip_model(); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_model->IsAppTab(0)); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_model->IsAppTab(1)); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_model->IsAppTab(2)); 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_model->IsTabPinned(0)); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_model->IsTabPinned(1)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_model->IsTabPinned(2)); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_model->GetWebContentsAt(2)->GetURL()); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TabHelper::FromWebContents( 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_model->GetWebContentsAt(0))->extension_app() == extension_app); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies we don't crash when closing the last window and the app 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// menu is showing. 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_CloseWithAppMenuOpen DISABLED_CloseWithAppMenuOpen 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_CloseWithAppMenuOpen CloseWithAppMenuOpen 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_CloseWithAppMenuOpen) { 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_defaults::kBrowserAliveWithNoWindows) 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need a message loop running for menus on windows. 1233b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, base::Bind(&RunCloseWithAppMenuCallback, browser())); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, OpenAppWindowLikeNtp) { 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an app 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.example.com", "127.0.0.1"); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("app/"))); 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension_app = GetExtension(); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch it in a window, as AppLauncherHandler::HandleLaunchApp() would. 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* app_window = chrome::OpenApplication( 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::AppLaunchParams(browser()->profile(), extension_app, 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_misc::LAUNCH_WINDOW, NEW_WINDOW)); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(app_window); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Apps launched in a window from the NTP have an extensions tab helper but 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // do not have extension_app set in it. 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extensions::TabHelper::FromWebContents(app_window)); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TabHelper::FromWebContents(app_window)->extension_app()); 1257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(extensions::AppLaunchInfo::GetFullLaunchURL(extension_app), 1258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) app_window->GetURL()); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The launch should have created a new browser. 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile(), 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the new browser. 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = NULL; 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (chrome::BrowserIterator it; !it.done() && !new_browser; it.Next()) { 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*it != browser()) 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_browser = *it; 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_browser != browser()); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_browser->is_app()); 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser's app name should include the extension's id. 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string app_name = new_browser->app_name_; 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(app_name.find(extension_app->id()), std::string::npos) 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Name " << app_name << " should contain id "<< extension_app->id(); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_MACOSX) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure the browser doesn't crash when 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// set_show_state(ui::SHOW_STATE_MAXIMIZED) has been invoked. 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, StartMaximized) { 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::Type types[] = { Browser::TYPE_TABBED, Browser::TYPE_POPUP }; 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(types); ++i) { 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams params(types[i], browser()->profile(), 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type()); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.initial_show_state = ui::SHOW_STATE_MAXIMIZED; 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddBlankTabAndShow(new Browser(params)); 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Aura doesn't support minimized window. crbug.com/104571. 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_StartMinimized DISABLED_StartMinimized 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_StartMinimized StartMinimized 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure the browser doesn't crash when 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// set_show_state(ui::SHOW_STATE_MINIMIZED) has been invoked. 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_StartMinimized) { 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::Type types[] = { Browser::TYPE_TABBED, Browser::TYPE_POPUP }; 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(types); ++i) { 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams params(types[i], browser()->profile(), 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type()); 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.initial_show_state = ui::SHOW_STATE_MINIMIZED; 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddBlankTabAndShow(new Browser(params)); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure the forward button is disabled immediately when navigating 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// forward to a slow-to-commit page. 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, ForwardDisabledOnForward) { 131590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GURL blank_url(content::kAboutBlankURL); 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), blank_url); 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTitle1File))); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver back_nav_load_observer( 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<NavigationController>( 13262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GoBack(browser(), CURRENT_TAB); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) back_nav_load_observer.Wait(); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_FORWARD)); 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver forward_nav_load_observer( 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<NavigationController>( 13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GoForward(browser(), CURRENT_TAB); 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This check will happen before the navigation completes, since the browser 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // won't process the renderer's response until the Wait() call below. 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_FORWARD)); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) forward_nav_load_observer.Wait(); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure certain commands are disabled when Incognito mode is forced. 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, DisableMenuItemsWhenIncognitoIsForced) { 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At the beginning, all commands are enabled. 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_NEW_INCOGNITO_WINDOW)); 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_BOOKMARK_MANAGER)); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set Incognito to FORCED. 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bookmarks & Settings commands should get disabled. 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_BOOKMARK_MANAGER)); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New Incognito Window command, however, should be enabled. 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_NEW_INCOGNITO_WINDOW)); 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = 1372868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new Browser(Browser::CreateParams( 1373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) browser()->profile()->GetOffTheRecordProfile(), 1374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) browser()->host_desktop_type())); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* new_command_updater = 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->command_controller()->command_updater(); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It should have Bookmarks & Settings commands disabled by default. 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled( 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_SHOW_BOOKMARK_MANAGER)); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled(IDC_OPTIONS)); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_NEW_INCOGNITO_WINDOW)); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure New Incognito Window command is disabled when Incognito mode is 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not available. 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoNewIncognitoWindowWhenIncognitoIsDisabled) { 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set Incognito to DISABLED. 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::DISABLED); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure New Incognito Window command is disabled. All remaining commands 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be enabled. 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_NEW_INCOGNITO_WINDOW)); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_BOOKMARK_MANAGER)); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* new_browser = 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new Browser(Browser::CreateParams(browser()->profile(), 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* new_command_updater = 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_browser->command_controller()->command_updater(); 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_command_updater->IsCommandEnabled(IDC_NEW_INCOGNITO_WINDOW)); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_SHOW_BOOKMARK_MANAGER)); 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_command_updater->IsCommandEnabled(IDC_OPTIONS)); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure Extensions and Settings commands are disabled in certain 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// circumstances even though normally they should stay enabled. 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisableExtensionsAndSettingsWhenIncognitoIsDisabled) { 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable extensions. This should disable Extensions menu. 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(browser()->profile())->extension_service()-> 14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_extensions_enabled(false); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set Incognito to DISABLED. 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::DISABLED); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure Manage Extensions command is disabled. 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_NEW_WINDOW)); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_BOOKMARK_MANAGER)); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a popup (non-main-UI-type) browser. Settings command as well 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as Extensions should be disabled. 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup_browser = new Browser( 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* popup_command_updater = 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_browser->command_controller()->command_updater(); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(popup_command_updater->IsCommandEnabled(IDC_MANAGE_EXTENSIONS)); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(popup_command_updater->IsCommandEnabled(IDC_OPTIONS)); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(popup_command_updater->IsCommandEnabled( 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_SHOW_BOOKMARK_MANAGER)); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(popup_command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure Extensions and Settings commands are disabled in certain 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// circumstances even though normally they should stay enabled. 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisableOptionsAndImportMenuItemsConsistently) { 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a popup browser. 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup_browser = new Browser( 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_browser->command_controller()->command_updater(); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OPTIONS and IMPORT_SETTINGS are disabled for a non-normal UI. 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set Incognito to FORCED. 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::SetAvailability(popup_browser->profile()->GetPrefs(), 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::FORCED); 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OPTIONS and IMPORT_SETTINGS are disabled when Incognito is forced. 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set Incognito to AVAILABLE. 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::SetAvailability(popup_browser->profile()->GetPrefs(), 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::ENABLED); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OPTIONS and IMPORT_SETTINGS are still disabled since it is a non-normal UI. 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_OPTIONS)); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_IMPORT_SETTINGS)); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OnZoomLevelChanged(const base::Closure& callback, 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const HostZoomMap::ZoomLevelChange& host) { 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(); 14852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flakes regularly on Windows XP 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/146040 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PageZoom DISABLED_PageZoom 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PageZoom PageZoom 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_PageZoom) { 14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable_plus, enable_minus; 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::ZoomLevelChangedCallback callback( 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&OnZoomLevelChanged, loop_runner->QuitClosure())); 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->AddZoomLevelChangedCallback(callback); 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::Zoom(browser(), content::PAGE_ZOOM_IN); 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->RemoveZoomLevelChangedCallback(callback); 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(contents->GetZoomPercent(&enable_plus, &enable_minus), 110); 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_plus); 15132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_minus); 15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 15172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 15182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::ZoomLevelChangedCallback callback( 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&OnZoomLevelChanged, loop_runner->QuitClosure())); 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->AddZoomLevelChangedCallback(callback); 15232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::Zoom(browser(), content::PAGE_ZOOM_RESET); 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->RemoveZoomLevelChangedCallback(callback); 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(contents->GetZoomPercent(&enable_plus, &enable_minus), 100); 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_plus); 15292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_minus); 15302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 15332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 15352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::ZoomLevelChangedCallback callback( 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&OnZoomLevelChanged, loop_runner->QuitClosure())); 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->AddZoomLevelChangedCallback(callback); 15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::Zoom(browser(), content::PAGE_ZOOM_OUT); 15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap::GetForBrowserContext( 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->RemoveZoomLevelChangedCallback(callback); 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(contents->GetZoomPercent(&enable_plus, &enable_minus), 90); 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_plus); 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(enable_minus); 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Zoom(browser(), content::PAGE_ZOOM_RESET); 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialCommandDisable) { 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.example.com", "127.0.0.1"); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(test_server()->GetURL("empty.html")); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater = 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->command_controller()->command_updater(); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_VIEW_SOURCE)); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_PRINT)); 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SAVE_PAGE)); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_ENCODING_MENU)); 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestInterstitialPage* interstitial = NULL; 15672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialObserver observer(contents, 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->QuitClosure(), 15732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure()); 15742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial = new TestInterstitialPage(contents, false, GURL()); 15752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 15762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(contents->ShowingInterstitialPage()); 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_VIEW_SOURCE)); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_PRINT)); 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SAVE_PAGE)); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_ENCODING_MENU)); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialObserver observer(contents, 15902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure(), 15912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->QuitClosure()); 15922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial->Proceed(); 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 15942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // interstitial is deleted now. 15952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_VIEW_SOURCE)); 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_PRINT)); 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SAVE_PAGE)); 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_ENCODING_MENU)); 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialCloseTab) { 16042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); 16052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 16082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 16092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialObserver observer(contents, 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->QuitClosure(), 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure()); 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Interstitial will delete itself when we close the tab. 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestInterstitialPage(contents, false, GURL()); 16152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 16162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(contents->ShowingInterstitialPage()); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner( 16222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new content::MessageLoopRunner); 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialObserver observer(contents, 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure(), 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->QuitClosure()); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CloseTab(browser()); 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_runner->Run(); 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // interstitial is deleted now. 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockWebContentsObserver : public WebContentsObserver { 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit MockWebContentsObserver(WebContents* web_contents) 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : WebContentsObserver(web_contents), 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) got_user_gesture_(false) { 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidGetUserGesture() OVERRIDE { 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) got_user_gesture_ = true; 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool got_user_gesture() const { 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return got_user_gesture_; 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_got_user_gesture(bool got_it) { 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) got_user_gesture_ = got_it; 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool got_user_gesture_; 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockWebContentsObserver); 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, UserGesturesReported) { 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Regression test for http://crbug.com/110707. Also tests that a user 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // gesture is sent when a normal navigation (via e.g. the omnibox) is 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // performed. 16622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = 16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWebContentsObserver mock_observer(web_contents); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(test_server()->GetURL("empty.html")); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(mock_observer.got_user_gesture()); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_observer.set_got_user_gesture(false); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(mock_observer.got_user_gesture()); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(ben): this test was never enabled. It has bit-rotted since being added. 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It originally lived in browser_unittest.cc, but has been moved here to make 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// room for real browser unit tests. 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserTest2 : public InProcessBrowserTest { 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserTest2() { 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver_proc_ = new net::RuleBasedHostResolverProc(NULL); 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Avoid making external DNS lookups. In this test we don't need this 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to succeed. 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver_proc_->AddSimulatedFailure("*.google.com"); 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_host_resolver_proc_.Init(host_resolver_proc_.get()); 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::RuleBasedHostResolverProc> host_resolver_proc_; 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ScopedDefaultHostResolverProc scoped_host_resolver_proc_; 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest2, NoTabsInPopups) { 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::RegisterAppPrefs(L"Test"); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We start with a normal browser with one tab. 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a popup browser with a single blank foreground tab. 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup_browser = new Browser( 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddBlankTabAt(popup_browser, -1, true); 17062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup_browser->tab_strip_model()->count()); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try opening another tab in the popup browser. 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabWithURLParams params1(url, content::PAGE_TRANSITION_TYPED); 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_browser->AddTabWithURL(¶ms1); 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(popup_browser, params1.target); 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup should still only have one tab. 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, popup_browser->tab_strip_model()->count()); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The normal browser should now have two. 17172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an app frame browser with a single blank foreground tab. 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* app_browser = new Browser(Browser::CreateParams::CreateForApp( 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Test", browser()->profile(), false)); 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddBlankTabAt(app_browser, -1, true); 17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try opening another tab in the app browser. 172690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddTabWithURLParams params2(GURL(content::kAboutBlankURL), 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_browser->AddTabWithURL(¶ms2); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(app_browser, params2.target); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup should still only have one tab. 17322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_browser->tab_strip_model()->count()); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The normal browser should now have three. 17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, browser()->tab_strip_model()->count()); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an app frame popup browser with a single blank foreground tab. 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* app_popup_browser = new Browser(Browser::CreateParams::CreateForApp( 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Test", browser()->profile(), false)); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddBlankTabAt(app_popup_browser, -1, true); 17412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_popup_browser->tab_strip_model()->count()); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now try opening another tab in the app popup browser. 174490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddTabWithURLParams params3(GURL(content::kAboutBlankURL), 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_popup_browser->AddTabWithURL(¶ms3); 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(app_popup_browser, params3.target); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup should still only have one tab. 17502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, app_popup_browser->tab_strip_model()->count()); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The normal browser should now have four. 17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4, browser()->tab_strip_model()->count()); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the additional browsers. 17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popup_browser->tab_strip_model()->CloseAllTabs(); 17572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_browser->tab_strip_model()->CloseAllTabs(); 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_popup_browser->tab_strip_model()->CloseAllTabs(); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1762a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, WindowOpenClose) { 1763a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 1764a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) switches::kDisablePopupBlocking); 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = ui_test_utils::GetTestUrl( 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), base::FilePath().AppendASCII("window.close.html")); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 title = ASCIIToUTF16("Title Of Awesomeness"); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher( 17702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), title); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// GTK doesn't use the Browser's fullscreen state. 17762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 17772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Mac disabled: http://crbug.com/169820 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(TOOLKIT_GTK) && !defined(OS_MACOSX) && \ 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !(defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)) 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, FullscreenBookmarkBar) { 1781558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1782558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 1783a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1784558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 1785558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 1786558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 17872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ToggleBookmarkBar(browser()); 17882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 17892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 17902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(browser()->window()->IsFullscreen()); 17912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 17932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_CHROMEOS) 1794b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // TODO(jamescook): If immersive fullscreen is disabled by default, test 1795b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // for BookmarkBar::HIDDEN. 1796b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 17972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 17982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state()); 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 18002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 18022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShowModalDialogTest : public BrowserTest { 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowModalDialogTest() {} 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisablePopupBlocking); 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ShowModalDialogTest, BasicTest) { 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This navigation should show a modal dialog that will be immediately 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closed, but the fact that it was shown should be recorded. 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = ui_test_utils::GetTestUrl( 18162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), base::FilePath().AppendASCII("showmodaldialog.html")); 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 expected_title(ASCIIToUTF16("SUCCESS")); 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher( 18202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), expected_title); 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that we set a mark on successful dialog show. 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, DisallowFileUrlUniversalAccessTest) { 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = ui_test_utils::GetTestUrl( 18292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 18302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("fileurl_universalaccess.html")); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 expected_title(ASCIIToUTF16("Disallowed")); 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher( 18342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), expected_title); 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.AlsoWaitForTitle(ASCIIToUTF16("Allowed")); 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KioskModeTest : public BrowserTest { 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KioskModeTest() {} 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kKioskMode); 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)) 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/103912 18512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_EnableKioskModeTest DISABLED_EnableKioskModeTest 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_EnableKioskModeTest EnableKioskModeTest 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(KioskModeTest, MAYBE_EnableKioskModeTest) { 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if browser is in fullscreen mode. 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(browser()->window()->IsFullscreen()); 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(browser()->window()->IsFullscreenBubbleVisible()); 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test verifies that Chrome can be launched with a user-data-dir path 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// which contains non ASCII characters. 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LaunchBrowserWithNonAsciiUserDatadir : public BrowserTest { 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchBrowserWithNonAsciiUserDatadir() {} 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath tmp_profile = temp_dir_.path().AppendASCII("tmp_profile"); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_profile = tmp_profile.Append(L"Test Chrome G\u00E9raldine"); 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(tmp_profile)); 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchPath(switches::kUserDataDir, tmp_profile); 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(LaunchBrowserWithNonAsciiUserDatadir, 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNonAsciiUserDataDir) { 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the window is present. 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(browser()); 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests to ensure that the browser continues running in the background after 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the last window closes. 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RunInBackgroundTest : public BrowserTest { 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunInBackgroundTest() {} 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kKeepAliveForTest); 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(RunInBackgroundTest, RunInBackgroundBasicTest) { 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser window, then open a new one - the browser should keep 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // running. 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = browser()->profile(); 19032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Browser>(browser())); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser()); 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, chrome::GetTotalBrowserCount()); 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BrowserAddedObserver browser_added_observer; 1912eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::NewEmptyWindow(profile, chrome::GetActiveDesktop()); 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_added_observer.WaitForSingleNewBrowser(); 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests to ensure that the browser continues running in the background after 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the last window closes. 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NoStartupWindowTest : public BrowserTest { 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NoStartupWindowTest() {} 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoStartupWindow); 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kKeepAliveForTest); 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoStartupWindowTest, NoStartupWindowBasicTest) { 1931558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1932558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // kNoStartupWindow doesn't make sense in Metro+Ash. 1933558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1934558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 1935558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 1936558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No browser window should be started by default. 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, chrome::GetTotalBrowserCount()); 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starting a browser window should work just fine. 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BrowserAddedObserver browser_added_observer; 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateBrowser(ProfileManager::GetDefaultProfile()); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_added_observer.WaitForSingleNewBrowser(); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chromeos needs to track app windows because it considers them to be part of 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// session state. 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS) 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NoStartupWindowTest, DontInitSessionServiceForApps) { 1952558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1953558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // kNoStartupWindow doesn't make sense in Metro+Ash. 1954558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1955558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 1956558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 1957558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = ProfileManager::GetDefaultProfile(); 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionService* session_service = 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionServiceFactory::GetForProfile(profile); 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(session_service->processed_any_commands()); 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::BrowserAddedObserver browser_added_observer; 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateBrowserForApp("blah", profile); 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_added_observer.WaitForSingleNewBrowser(); 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(session_service->processed_any_commands()); 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // !defined(OS_CHROMEOS) 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test needs to be placed outside the anonymous namespace because we 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// need to access private type of Browser. 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppModeTest : public BrowserTest { 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppModeTest() {} 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = ui_test_utils::GetTestUrl( 19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), base::FilePath().AppendASCII("title1.html")); 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kApp, url.spec()); 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AppModeTest, EnableAppModeTest) { 1986ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1987ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 1988a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1989ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 1990ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 1991ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that an application browser window loads correctly. 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the browser is in application mode. 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(browser()->is_app()); 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Confirm about:version contains some expected content. 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserTest, AboutVersion) { 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutVersionURL)); 20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(ui_test_utils::FindInPage(tab, ASCIIToUTF16("WebKit"), true, true, 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL), 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(ui_test_utils::FindInPage(tab, ASCIIToUTF16("OS"), true, true, 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL), 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(ui_test_utils::FindInPage(tab, ASCIIToUTF16("JavaScript"), true, 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, NULL, NULL), 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static const base::FilePath::CharType* kTestDir = 20142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("click_modifier"); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kFirstPageTitle[] = "First window"; 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kSecondPageTitle[] = "New window!"; 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ClickModifierTest : public InProcessBrowserTest { 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClickModifierTest() { 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a url that opens a new window or tab when clicked, via javascript. 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetWindowOpenURL() { 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui_test_utils::GetTestUrl( 20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTestDir), 20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("window_open.html"))); 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a url that follows a simple link when clicked, unless affected by 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modifiers. 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetHrefURL() { 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui_test_utils::GetTestUrl( 20342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kTestDir), 20352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("href.html"))); 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 getFirstPageTitle() { 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ASCIIToUTF16(kFirstPageTitle); 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 getSecondPageTitle() { 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ASCIIToUTF16(kSecondPageTitle); 20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads our test page and simulates a single click using the supplied button 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and modifiers. The click will cause either a navigation or the creation of 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a new window or foreground or background tab. We verify that the expected 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disposition occurs. 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTest(Browser* browser, 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers, 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button, 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition) { 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser, url); 20562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetBrowserCount(browser->profile(), 20572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->host_desktop_type())); 20582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser->tab_strip_model()->count()); 20592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 20602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, web_contents->GetURL()); 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (disposition == CURRENT_TAB) { 20642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 20652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 2066868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::TestNavigationObserver same_tab_observer(web_contents); 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateMouseClick(web_contents, modifiers, button); 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop; 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) same_tab_observer.WaitForObservation( 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&content::RunThisRunLoop, base::Unretained(&run_loop)), 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::GetQuitTaskForRunLoop(&run_loop)); 20722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetBrowserCount(browser->profile(), 20732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->host_desktop_type())); 20742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser->tab_strip_model()->count()); 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(getSecondPageTitle(), web_contents->GetTitle()); 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateMouseClick(web_contents, modifiers, button); 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (disposition == NEW_WINDOW) { 20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, chrome::GetBrowserCount(browser->profile(), 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->host_desktop_type())); 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, chrome::GetBrowserCount(browser->profile(), 20922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->host_desktop_type())); 20932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser->tab_strip_model()->count()); 20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents = browser->tab_strip_model()->GetActiveWebContents(); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadStop(web_contents); 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (disposition == NEW_FOREGROUND_TAB) { 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(getSecondPageTitle(), web_contents->GetTitle()); 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(NEW_BACKGROUND_TAB, disposition); 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(getFirstPageTitle(), web_contents->GetTitle()); 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ClickModifierTest); 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests for clicking on elements with handlers that run window.open. 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenBasicClickTest) { 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = 0; 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_FOREGROUND_TAB; 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(ericu): Alt-click behavior on window.open is platform-dependent and not 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// well defined. Should we add tests so we know if it changes? 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shift-clicks open in a new window. 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenShiftClickTest) { 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ShiftKey; 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_WINDOW; 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Control-clicks open in a background tab. 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On OSX meta [the command key] takes the place of control. 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenControlClickTest) { 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::MetaKey; 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ControlKey; 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_BACKGROUND_TAB; 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Control-shift-clicks open in a foreground tab. 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On OSX meta [the command key] takes the place of control. 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenControlShiftClickTest) { 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::MetaKey; 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ControlKey; 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modifiers |= WebKit::WebInputEvent::ShiftKey; 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_FOREGROUND_TAB; 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Middle-clicks open in a background tab. 21562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 21572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 21582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_WindowOpenMiddleClickTest DISABLED_WindowOpenMiddleClickTest 21592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 21602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_WindowOpenMiddleClickTest WindowOpenMiddleClickTest 21612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 21622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, MAYBE_WindowOpenMiddleClickTest) { 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = 0; 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle; 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_BACKGROUND_TAB; 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shift-middle-clicks open in a foreground tab. 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenShiftMiddleClickTest) { 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ShiftKey; 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle; 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_FOREGROUND_TAB; 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition); 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests for clicking on normal links. 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefBasicClickTest) { 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = 0; 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = CURRENT_TAB; 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(ericu): Alt-click behavior on links is platform-dependent and not well 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// defined. Should we add tests so we know if it changes? 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shift-clicks open in a new window. 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefShiftClickTest) { 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ShiftKey; 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_WINDOW; 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Control-clicks open in a background tab. 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On OSX meta [the command key] takes the place of control. 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefControlClickTest) { 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::MetaKey; 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ControlKey; 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_BACKGROUND_TAB; 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Control-shift-clicks open in a foreground tab. 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On OSX meta [the command key] takes the place of control. 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefControlShiftClickTest) { 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::MetaKey; 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ControlKey; 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modifiers |= WebKit::WebInputEvent::ShiftKey; 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft; 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_FOREGROUND_TAB; 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Middle-clicks open in a background tab. 22252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 22262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 22272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_HrefMiddleClickTest DISABLED_HrefMiddleClickTest 22282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 22292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_HrefMiddleClickTest HrefMiddleClickTest 22302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 22312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, MAYBE_HrefMiddleClickTest) { 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = 0; 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle; 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_BACKGROUND_TAB; 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shift-middle-clicks open in a foreground tab. 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefShiftMiddleClickTest) { 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers = WebKit::WebInputEvent::ShiftKey; 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle; 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = NEW_FOREGROUND_TAB; 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(browser(), GetHrefURL(), modifiers, button, disposition); 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245