13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 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) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "apps/app_window.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "apps/app_window_registry.h" 74ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "apps/common/api/app_runtime.h" 8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "apps/launcher.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "apps/ui/native_app_window.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/file_util.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/stl_util.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/devtools/devtools_window.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/permissions/permissions_api.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/component_loader.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_test_message_listener.h" 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/common/pref_names.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager.h" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/devtools_agent_host.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_utils.h" 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/extension_prefs.h" 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/pref_names.h" 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/mock_user_manager.h" 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h" 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chromeos/dbus/fake_dbus_thread_manager.h" 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/fake_power_manager_client.h" 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using apps::AppWindow; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using apps::AppWindowRegistry; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using web_modal::WebContentsModalDialogManager; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochnamespace app_runtime = apps::api::app_runtime; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 654ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochnamespace extensions { 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Non-abstract RenderViewContextMenu class. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppContextMenu : public RenderViewContextMenu { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PlatformAppContextMenu(content::RenderFrameHost* render_frame_host, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : RenderViewContextMenu(render_frame_host, params) {} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasCommandWithId(int command_id) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return menu_model_.GetIndexOfCommandId(command_id) != -1; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewContextMenu implementation. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetAcceleratorForCommandId( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int command_id, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator* accelerator) OVERRIDE { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PlatformInit() OVERRIDE {} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PlatformCancel() OVERRIDE {} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class keeps track of tabs as they are added to the browser. It will be 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "done" (i.e. won't block on Wait()) once |observations| tabs have been added. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabsAddedNotificationObserver 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::WindowedNotificationObserver { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TabsAddedNotificationObserver(size_t observations) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content::WindowedNotificationObserver( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observations_(observations) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed_tabs_.push_back( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Details<WebContents>(details).ptr()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (observed_tabs_.size() == observations_) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver::Observe(type, source, details); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<content::WebContents*>& tabs() { return observed_tabs_; } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t observations_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<content::WebContents*> observed_tabs_; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TabsAddedNotificationObserver); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ScopedPreviewTestingDelegate : PrintPreviewUI::TestingDelegate { 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit ScopedPreviewTestingDelegate(bool auto_cancel) 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : auto_cancel_(auto_cancel), 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) total_page_count_(1), 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rendered_page_count_(0) { 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PrintPreviewUI::SetDelegateForTesting(this); 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ~ScopedPreviewTestingDelegate() { 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PrintPreviewUI::SetDelegateForTesting(NULL); 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // PrintPreviewUI::TestingDelegate implementation. 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual bool IsAutoCancelEnabled() OVERRIDE { 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return auto_cancel_; 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // PrintPreviewUI::TestingDelegate implementation. 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void DidGetPreviewPageCount(int page_count) OVERRIDE { 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) total_page_count_ = page_count; 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // PrintPreviewUI::TestingDelegate implementation. 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidRenderPreviewPage(content::WebContents* preview_dialog) 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OVERRIDE { 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dialog_size_ = preview_dialog->GetContainerBounds().size(); 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++rendered_page_count_; 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHECK(rendered_page_count_ <= total_page_count_); 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (waiting_runner_ && rendered_page_count_ == total_page_count_) { 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiting_runner_->Quit(); 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void WaitUntilPreviewIsReady() { 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHECK(!waiting_runner_); 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (rendered_page_count_ < total_page_count_) { 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiting_runner_ = new content::MessageLoopRunner; 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiting_runner_->Run(); 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiting_runner_ = NULL; 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size dialog_size() { 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return dialog_size_; 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool auto_cancel_; 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int total_page_count_; 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int rendered_page_count_; 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> waiting_runner_; 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size dialog_size_; 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_CHROMEOS) && !defined(OS_WIN) 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool CopyTestDataAndSetCommandLineArg( 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& test_data_file, 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& temp_dir, 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* filename) { 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path = temp_dir.AppendASCII( 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) filename).NormalizePathSeparators(); 1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!(base::CopyFile(test_data_file, path))) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendArgPath(path); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // !defined(OS_CHROMEOS) && !defined(OS_WIN) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestFilePath[] = "platform_apps/launch_files/test.txt"; 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Tests that CreateAppWindow doesn't crash if you close it straight away. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LauncherPlatformAppBrowserTest relies on this behaviour, but is only run for 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ash, so we test that it works here. 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, CreateAndCloseAppWindow) { 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension = LoadAndLaunchPlatformApp("minimal", "Launched"); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AppWindow* window = CreateAppWindow(extension); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CloseAppWindow(window); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that platform apps received the "launch" event when launched. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OnLaunchedEvent) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch")) << message_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that platform apps cannot use certain disabled window properties, but 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// can override them and then use them. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisabledWindowProperties) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/disabled_window_properties")) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, EmptyContextMenu) { 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("minimal", "Launched"); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The empty app doesn't add any context menu items, so its menu should 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only include the developer tools. 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenu) { 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("context_menu", "Launched"); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context_menu app has two context menu items. These, along with a 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // separator and the developer tools, is all that should be in the menu. 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, InstalledAppWithContextMenu) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", false); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallAndLaunchPlatformApp("context_menu"); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the extension to tell us it's initialized its context menus and 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launched a window. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context_menu app has two context menu items. For an installed app 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // these are all that should be in the menu. 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 27290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1)); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE( 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuTextField) { 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("context_menu", "Launched"); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context_menu app has one context menu item. This, along with a 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // separator and the developer tools, is all that should be in the menu. 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.is_editable = true; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuSelection) { 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("context_menu", "Launched"); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context_menu app has one context menu item. This, along with a 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // separator and the developer tools, is all that should be in the menu. 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.selection_text = base::ASCIIToUTF16("Hello World"); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY)); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuClicked) { 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("context_menu_click", "Launched"); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that the menu item shows up 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::ContextMenuParams params; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_url = GURL("http://foo.bar"); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PlatformAppContextMenu> menu; 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu.reset(new PlatformAppContextMenu(web_contents->GetMainFrame(), params)); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Execute the menu item 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionTestMessageListener onclicked_listener("onClicked fired for id1", 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu->ExecuteCommand(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST, 0); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(onclicked_listener.WaitUntilSatisfied()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_DisallowNavigation DISABLED_DisallowNavigation 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_DisallowNavigation DisallowNavigation 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_DisallowNavigation) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabsAddedNotificationObserver observer(2); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/navigation")) << message_; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, observer.tabs().size()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(chrome::kExtensionInvalidRequestURL), 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.tabs()[0]->GetURL().spec()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://chromium.org/", 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.tabs()[1]->GetURL().spec()); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Failing on some Win and Linux buildbots. See crbug.com/354425. 376e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#if (defined(OS_WIN) || defined(OS_LINUX)) && defined(ARCH_CPU_X86) 377e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define MAYBE_Iframes DISABLED_Iframes 378e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#else 379e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define MAYBE_Iframes Iframes 380e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif 381e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_Iframes) { 382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/iframes")) << message_; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that localStorage and WebSQL are disabled for platform apps. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowStorage) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/storage")) << message_; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Restrictions) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/restrictions")) << message_; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that extensions can't use platform-app-only APIs. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, PlatformAppsOnly) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTestIgnoreManifestWarnings( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "platform_apps/apps_only")) << message_; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that platform apps have isolated storage by default. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Isolation) { 403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load a (non-app) page under the "localhost" origin that sets a cookie. 406eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL set_cookie_url = embedded_test_server()->GetURL( 407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/platform_apps/isolation/set_cookie.html"); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replace_host; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_str("localhost"); // Must stay in scope with replace_host. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replace_host.SetHostStr(host_str); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_cookie_url = set_cookie_url.ReplaceComponents(replace_host); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), set_cookie_url, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the cookie is set. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cookie_size; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_value; 420e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ui_test_utils::GetCookies( 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_cookie_url, 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetWebContentsAt(0), 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_size, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_value); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("testCookie=1", cookie_value); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let the platform app request the same URL, and make sure that it doesn't 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see the cookie. 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/isolation")) << message_; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 432868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// See crbug.com/248441 433868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) 434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ExtensionWindowingApis DISABLED_ExtensionWindowingApis 435868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ExtensionWindowingApis ExtensionWindowingApis 437868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 439868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_ExtensionWindowingApis) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initially there should be just the one browser window visible to the 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions API. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common/background_page")); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension)); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // And no app windows. 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0U, GetAppWindowCount()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch a platform app that shows a window. 450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("minimal", "Launched"); 4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, GetAppWindowCount()); 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int app_window_id = GetFirstAppWindow()->session_id().id(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But it's not visible to the extensions API, it still thinks there's just 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one browser window. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It can't look it up by ID either 4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(RunGetWindowFunctionForExtension(app_window_id, extension)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The app can also only see one window (its own). 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jeremya): add an extension function to get an app window by ID, and 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to get a list of all the app windows, so we can test this. 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch another platform app that also shows a window. 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("context_menu", "Launched"); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // There are two total app windows, but each app can only see its own. 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(2U, GetAppWindowCount()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jeremya): as above, this requires more extension functions. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ChromeOS does not support passing arguments on the command line, so the tests 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that rely on this functionality are disabled. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that command line parameters get passed through to platform apps 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// via launchData correctly when launching with a file. 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(benwells/jeremya): tests need a way to specify a handler ID. 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFile) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg(kTestFilePath); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_file")) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that relative paths can be passed through to the platform app. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test doesn't use the normal test infrastructure as it needs to open 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the application differently to all other platform app tests, by setting 4874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// the AppLaunchParams.current_directory field. 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithRelativeFile) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setup the command line 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearCommandLineArgs(); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_test_doc = 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::FromUTF8Unsafe(kTestFilePath); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relative_test_doc = relative_test_doc.NormalizePathSeparators(); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendArgPath(relative_test_doc); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the extension 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("platform_apps/launch_file")); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the test 504a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AppLaunchParams params( 505a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile(), extension, LAUNCH_CONTAINER_NONE, NEW_WINDOW); 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.command_line = *CommandLine::ForCurrentProcess(); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.current_directory = test_data_dir_; 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OpenApplication(params); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!catcher.GetNextResult()) { 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_ = catcher.message(); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(0); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through if the file extension matches. 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFileExtension) { 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg(kTestFilePath); 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_file_by_extension")) 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 523010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Tests that launch data is sent through to a whitelisted extension if the file 524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// extension matches. 525010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 526010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LaunchWhiteListedExtensionWithFile) { 527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetCommandLineArg(kTestFilePath); 528010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "platform_apps/launch_whitelisted_ext_with_file")) 530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) << message_; 531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_LaunchWithFileExtensionAndMimeType DISABLED_LaunchWithFileExtensionAndMimeType 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_LaunchWithFileExtensionAndMimeType LaunchWithFileExtensionAndMimeType 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through if the file extension and MIME type 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// both match. 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MAYBE_LaunchWithFileExtensionAndMimeType) { 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg(kTestFilePath); 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "platform_apps/launch_file_by_extension_and_type")) << message_; 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through for a file with no extension if a 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// handler accepts "". 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFileWithoutExtension) { 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg("platform_apps/launch_files/test"); 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_file_with_no_extension")) 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_WIN) 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through for a file with an empty extension if 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// a handler accepts "". 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFileEmptyExtension) { 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ScopedTempDir temp_dir; 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearCommandLineArgs(); 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(CopyTestDataAndSetCommandLineArg( 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_data_dir_.AppendASCII(kTestFilePath), 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_dir.path(), 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "test.")); 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_file_with_no_extension")) 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through for a file with an empty extension if 573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// a handler accepts *. 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LaunchWithFileEmptyExtensionAcceptAny) { 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ScopedTempDir temp_dir; 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClearCommandLineArgs(); 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(CopyTestDataAndSetCommandLineArg( 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_data_dir_.AppendASCII(kTestFilePath), 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_dir.path(), 582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "test.")); 583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "platform_apps/launch_file_with_any_extension")) << message_; 585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through for a file with no extension if a 589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// handler accepts *. 590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LaunchWithFileWithoutExtensionAcceptAny) { 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg("platform_apps/launch_files/test"); 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "platform_apps/launch_file_with_any_extension")) << message_; 595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through for a file with an extension if a 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// handler accepts *. 599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LaunchWithFileAcceptAnyExtension) { 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg(kTestFilePath); 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "platform_apps/launch_file_with_any_extension")) << message_; 604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that no launch data is sent through if the file has the wrong 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// extension. 608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithWrongExtension) { 609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg(kTestFilePath); 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_wrong_extension")) 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that no launch data is sent through if the file has no extension but 615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the handler requires a specific extension. 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithWrongEmptyExtension) { 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCommandLineArg("platform_apps/launch_files/test"); 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_wrong_extension")) 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no launch data is sent through if the file is of the wrong MIME 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// type. 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithWrongType) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg(kTestFilePath); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_wrong_type")) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no launch data is sent through if the platform app does not 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// provide an intent. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithNoIntent) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg(kTestFilePath); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_no_intent")) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Tests that launch data is sent through when the file has unknown extension 6390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// but the MIME type can be sniffed and the sniffed type matches. 6400529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithSniffableType) { 6410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetCommandLineArg("platform_apps/launch_files/test.unknownextension"); 6420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(RunPlatformAppTest( 6430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "platform_apps/launch_file_by_extension_and_type")) << message_; 6440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 6450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests that launch data is sent through with the MIME type set to 647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// application/octet-stream if the file MIME type cannot be read. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchNoType) { 6490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetCommandLineArg("platform_apps/launch_files/test_binary.unknownextension"); 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest( 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "platform_apps/launch_application_octet_stream")) << message_; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no launch data is sent through if the file does not exist. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchNoFile) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg("platform_apps/launch_files/doesnotexist.txt"); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_invalid")) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no launch data is sent through if the argument is a directory. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithDirectory) { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg("platform_apps/launch_files"); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_invalid")) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no launch data is sent through if there are no arguments passed 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on the command line 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithNothing) { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearCommandLineArgs(); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_nothing")) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that platform apps can use the chrome.fileSystem.getDisplayPath 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// function to get the native file system path of a file they are launched with. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, GetDisplayPath) { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCommandLineArg(kTestFilePath); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/get_display_path")) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 684424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Tests that the file is created if the file does not exist and the app has the 685424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// fileSystem.write permission. 686424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchNewFile) { 687424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedTempDir temp_dir; 688424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 689424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ClearCommandLineArgs(); 690424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 691424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) command_line->AppendArgPath(temp_dir.path().AppendASCII("new_file.txt")); 692424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_new_file")) << message_; 693424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 694424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 695424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OpenLink) { 698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(StartEmbeddedTestServer()); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<content::WebContentsDelegate>(browser())); 702f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("open_link", "Launched"); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, browser()->tab_strip_model()->count()); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MutationEventsDisabled) { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/mutation_events")) << message_; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 711b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// This appears to be unreliable on linux. 712b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// TODO(stevenjb): Investigate and enable 713b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(OS_LINUX) && !defined(USE_ASH) 7145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_AppWindowRestoreState DISABLED_AppWindowRestoreState 715b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#else 7165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MAYBE_AppWindowRestoreState AppWindowRestoreState 717b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 7185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_AppWindowRestoreState) { 719b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/restore_state")); 720b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 721b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 7235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AppWindowAdjustBoundsToBeVisibleOnScreen) { 724f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension = LoadAndLaunchPlatformApp("minimal", "Launched"); 72546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AppWindow* window = CreateAppWindow(extension); 727eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The screen bounds didn't change, the cached bounds didn't need to adjust. 729eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect cached_bounds(80, 100, 400, 400); 730eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect cached_screen_bounds(0, 0, 1600, 900); 731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect current_screen_bounds(0, 0, 1600, 900); 732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Size minimum_size(200, 200); 733eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect bounds; 7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow(window, 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cached_bounds, 7365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cached_screen_bounds, 7375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) current_screen_bounds, 7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) minimum_size, 7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &bounds); 740eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, cached_bounds); 741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 742eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // We have an empty screen bounds, the cached bounds didn't need to adjust. 743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect empty_screen_bounds; 7445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow(window, 7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cached_bounds, 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) empty_screen_bounds, 7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) current_screen_bounds, 7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) minimum_size, 7495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &bounds); 750eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, cached_bounds); 751eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 752eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Cached bounds is completely off the new screen bounds in horizontal 753eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // locations. Expect to reposition the bounds. 754eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect horizontal_out_of_screen_bounds(-800, 100, 400, 400); 7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow( 756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch window, 757eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch horizontal_out_of_screen_bounds, 758eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect(-1366, 0, 1600, 900), 759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch current_screen_bounds, 760eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch minimum_size, 761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &bounds); 762eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, gfx::Rect(0, 100, 400, 400)); 763eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 764eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Cached bounds is completely off the new screen bounds in vertical 765eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // locations. Expect to reposition the bounds. 766eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect vertical_out_of_screen_bounds(10, 1000, 400, 400); 7675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow( 768eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch window, 769eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch vertical_out_of_screen_bounds, 770eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect(-1366, 0, 1600, 900), 771eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch current_screen_bounds, 772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch minimum_size, 773eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &bounds); 774eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, gfx::Rect(10, 500, 400, 400)); 775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // From a large screen resulotion to a small one. Expect it fit on screen. 777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect big_cache_bounds(10, 10, 1000, 1000); 7785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow(window, 7795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) big_cache_bounds, 7805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect(0, 0, 1600, 1000), 7815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect(0, 0, 800, 600), 7825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) minimum_size, 7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &bounds); 784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, gfx::Rect(0, 0, 800, 600)); 785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Don't resize the bounds smaller than minimum size, when the minimum size is 787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // larger than the screen. 7885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CallAdjustBoundsToBeVisibleOnScreenForAppWindow(window, 7895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) big_cache_bounds, 7905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect(0, 0, 1600, 1000), 7915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect(0, 0, 800, 600), 7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size(900, 900), 7935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &bounds); 794eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(bounds, gfx::Rect(0, 0, 900, 900)); 795eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 796eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppDevToolsBrowserTest : public PlatformAppBrowserTest { 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum TestFlags { 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RELAUNCH = 0x1, 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HAS_ID = 0x2, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Runs a test inside a harness that opens DevTools on an app window. 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTestWithDevTools(const char* name, int test_flags); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PlatformAppDevToolsBrowserTest::RunTestWithDevTools( 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name, int test_flags) { 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using content::DevToolsAgentHost; 812f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension = LoadAndLaunchPlatformApp(name, "Launched"); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 8145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AppWindow* window = GetFirstAppWindow(); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(window); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window->window_key().empty(), (test_flags & HAS_ID) == 0); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* rvh = window->web_contents()->GetRenderViewHost(); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(rvh); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Ensure no DevTools open for the AppWindow, then open one. 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(DevToolsAgentHost::HasFor(rvh)); 8225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DevToolsWindow::OpenDevToolsWindow(rvh); 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(DevToolsAgentHost::HasFor(rvh)); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test_flags & RELAUNCH) { 8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Close the AppWindow, and ensure it is gone. 8275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CloseAppWindow(window); 8285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(GetFirstAppWindow()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Relaunch the app and get a new AppWindow. 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver app_loaded_observer( 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 834a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OpenApplication(AppLaunchParams( 835a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile(), extension, LAUNCH_CONTAINER_NONE, NEW_WINDOW)); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_loaded_observer.Wait(); 8375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window = GetFirstAppWindow(); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(window); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DevTools should have reopened with the relaunch. 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh = window->web_contents()->GetRenderViewHost(); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(rvh); 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(DevToolsAgentHost::HasFor(rvh)); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 849868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/246634 850868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS) 851868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ReOpenedWithID DISABLED_ReOpenedWithID 852868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 853868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ReOpenedWithID ReOpenedWithID 854868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 855868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, MAYBE_ReOpenedWithID) { 856ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 857a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Disable this test in Metro+Ash for now (http://crbug.com/262796). 858a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 859ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 860ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTestWithDevTools("minimal_id", RELAUNCH | HAS_ID); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 864868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/246999 8657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_WIN) 866868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ReOpenedWithURL DISABLED_ReOpenedWithURL 867868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 868868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ReOpenedWithURL ReOpenedWithURL 869868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 870868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, MAYBE_ReOpenedWithURL) { 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTestWithDevTools("minimal", RELAUNCH); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that showing a permission request as a constrained window works and is 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correctly parented. 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ConstrainedWindowRequest DISABLED_ConstrainedWindowRequest 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(sail): Enable this on other platforms once http://crbug.com/95455 is 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fixed. 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ConstrainedWindowRequest DISABLED_ConstrainedWindowRequest 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_ConstrainedWindowRequest) { 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PermissionsRequestFunction::SetIgnoreUserGestureForTests(true); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 887f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("optional_permission_request", "Launched"); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension) << "Failed to load extension."; 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* web_contents = GetFirstAppWindowWebContents(); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Verify that the app window has a dialog attached. 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager* web_contents_modal_dialog_manager = 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager::FromWebContents(web_contents); 89658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(web_contents_modal_dialog_manager->IsDialogActive()); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the constrained window and wait for the reply to the permission 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionTestMessageListener listener("PermissionRequestDone", false); 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager::TestApi test_api( 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_modal_dialog_manager); 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_api.CloseAllDialogs(); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(listener.WaitUntilSatisfied()); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that an app calling chrome.runtime.reload will reload the app and 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// relaunch it if it was running. 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ReloadRelaunches) { 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", true); 911f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension = 912f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("reload", &launched_listener); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 9145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(GetFirstAppWindow()); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now tell the app to reload itself 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionTestMessageListener launched_listener2("Launched", false); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) launched_listener.Reply("reload"); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(launched_listener2.WaitUntilSatisfied()); 9205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(GetFirstAppWindow()); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 925cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Simple observer to check for NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED 926cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// events to 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ensure installation does or does not occur in certain scenarios. 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CheckExtensionInstalledObserver : public content::NotificationObserver { 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckExtensionInstalledObserver() : seen_(false) { 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 932cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool seen() const { 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return seen_; 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NotificationObserver: 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Observe(int type, 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(seen_); 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) seen_ = true; 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool seen_; 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationRegistrar registrar_; 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Component App Test 1 of 3: ensure that the initial load of a component 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// extension utilizing a background page (e.g. a v2 platform app) has its 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// background page run and is launchable. Waits for the Launched response from 9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// the script resource in the opened app window. 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PRE_PRE_ComponentAppBackgroundPage) { 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckExtensionInstalledObserver should_install; 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that we wait until the background page is run (to register the 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // OnLaunched listener) before trying to open the application. This is similar 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to LoadAndLaunchPlatformApp, but we want to load as a component extension. 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WindowedNotificationObserver app_loaded_observer( 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = LoadExtensionAsComponent( 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_data_dir_.AppendASCII("platform_apps").AppendASCII("component")); 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension); 9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_loaded_observer.Wait(); 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(should_install.seen()); 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", false); 978a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OpenApplication(AppLaunchParams( 979a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile(), extension, LAUNCH_CONTAINER_NONE, NEW_WINDOW)); 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Component App Test 2 of 3: ensure an installed component app can be launched 9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on a subsequent browser start, without requiring any install/upgrade logic 9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to be run, then perform setup for step 3. 9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PRE_ComponentAppBackgroundPage) { 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Since the component app is now installed, re-adding it in the same profile 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should not cause it to be re-installed. Instead, we wait for the OnLaunched 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in a different observer (which would timeout if not the app was not 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // previously installed properly) and then check this observer to make sure it 994cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // never saw the NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED event. 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckExtensionInstalledObserver should_not_install; 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = LoadExtensionAsComponent( 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_data_dir_.AppendASCII("platform_apps").AppendASCII("component")); 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension); 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", false); 1001a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OpenApplication(AppLaunchParams( 1002a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile(), extension, LAUNCH_CONTAINER_NONE, NEW_WINDOW)); 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(should_not_install.seen()); 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simulate a "downgrade" from version 2 in the test manifest.json to 1. 1008a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(browser()->profile()); 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clear the registered events to ensure they are updated. 10110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extensions::EventRouter::Get(browser()->profile()) 10120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ->SetRegisteredEvents(extension->id(), std::set<std::string>()); 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1014ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DictionaryPrefUpdate update(extension_prefs->pref_service(), 10155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::pref_names::kExtensions); 10165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* dict = update.Get(); 1017ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string key(extension->id()); 1018ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch key += ".manifest.version"; 1019ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch dict->SetString(key, "1"); 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Component App Test 3 of 3: simulate a component extension upgrade that 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// re-adds the OnLaunched event, and allows the app to be launched. 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ComponentAppBackgroundPage) { 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckExtensionInstalledObserver should_install; 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Since we are forcing an upgrade, we need to wait for the load again. 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WindowedNotificationObserver app_loaded_observer( 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = LoadExtensionAsComponent( 10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_data_dir_.AppendASCII("platform_apps").AppendASCII("component")); 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension); 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_loaded_observer.Wait(); 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(should_install.seen()); 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", false); 1038a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OpenApplication(AppLaunchParams( 1039a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile(), extension, LAUNCH_CONTAINER_NONE, NEW_WINDOW)); 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Messaging) { 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionApiTest::ResultCatcher result_catcher; 1046f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("messaging/app2", "Launched"); 1047f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("messaging/app1", "Launched"); 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(result_catcher.GetNextResult()); 10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_WebContentsHasFocus DISABLED_WebContentsHasFocus 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test depends on focus and so needs to be in interactive_ui_tests. 1056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// http://crbug.com/227041 1057c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_WebContentsHasFocus DISABLED_WebContentsHasFocus 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_WebContentsHasFocus) { 1060f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("minimal", "Launched"); 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1LU, GetAppWindowCount()); 10635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(GetFirstAppWindow() 10645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->web_contents() 10655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->GetRenderWidgetHostView() 10665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->HasFocus()); 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 106946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) 1070d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define MAYBE_WindowDotPrintShouldBringUpPrintPreview \ 1071d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DISABLED_WindowDotPrintShouldBringUpPrintPreview 1072424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else 1073d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define MAYBE_WindowDotPrintShouldBringUpPrintPreview \ 1074d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WindowDotPrintShouldBringUpPrintPreview 1075424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif 1076424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1077d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 1078d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MAYBE_WindowDotPrintShouldBringUpPrintPreview) { 10794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedPreviewTestingDelegate preview_delegate(true); 1080424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; 10814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preview_delegate.WaitUntilPreviewIsReady(); 1082d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 1083d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 10844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This test verifies that http://crbug.com/297179 is fixed. 1085d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 1086cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISABLED_ClosingWindowWhilePrintingShouldNotCrash) { 10874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedPreviewTestingDelegate preview_delegate(false); 10884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; 10894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preview_delegate.WaitUntilPreviewIsReady(); 10905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetFirstAppWindow()->GetBaseWindow()->Close(); 10914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 10924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 10934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This test currently only passes on OS X (on other platforms the print preview 10944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// dialog's size is limited by the size of the window being printed). 1095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_MACOSX) 10964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_PrintPreviewShouldNotBeTooSmall \ 10974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISABLED_PrintPreviewShouldNotBeTooSmall 10984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 10994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_PrintPreviewShouldNotBeTooSmall \ 11004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PrintPreviewShouldNotBeTooSmall 11014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 11024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 11044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MAYBE_PrintPreviewShouldNotBeTooSmall) { 11054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Print preview dialogs with widths less than 410 pixels will have preview 11064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // areas that are too small, and ones with heights less than 191 pixels will 11074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // have vertical scrollers for their controls that are too small. 11084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size minimum_dialog_size(410, 191); 11094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedPreviewTestingDelegate preview_delegate(false); 11104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; 11114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preview_delegate.WaitUntilPreviewIsReady(); 11124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_GE(preview_delegate.dialog_size().width(), 11134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) minimum_dialog_size.width()); 11144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_GE(preview_delegate.dialog_size().height(), 11154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) minimum_dialog_size.height()); 11165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetFirstAppWindow()->GetBaseWindow()->Close(); 1117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 1118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 1121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PlatformAppIncognitoBrowserTest : public PlatformAppBrowserTest, 11235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public AppWindowRegistry::Observer { 1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 1126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Tell chromeos to launch in Guest mode, aka incognito. 1127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitch(switches::kIncognito); 1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PlatformAppBrowserTest::SetUpCommandLine(command_line); 1129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 1131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure the file manager actually gets loaded. 1132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ComponentLoader::EnableBackgroundExtensionsForTesting(); 1133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PlatformAppBrowserTest::SetUp(); 1134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // AppWindowRegistry::Observer implementation. 11375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnAppWindowAdded(AppWindow* app_window) OVERRIDE { 1138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) opener_app_ids_.insert(app_window->extension_id()); 1139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 11425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A set of ids of apps we've seen open a app window. 1143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> opener_app_ids_; 1144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppIncognitoBrowserTest, IncognitoComponentApp) { 1147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the file manager app. 1148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* file_manager = extension_service()->GetExtensionById( 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "hhaomjibdihmijegdhdafkllkbggdgoj", false); 1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(file_manager != NULL); 1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* incognito_profile = profile()->GetOffTheRecordProfile(); 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(incognito_profile != NULL); 1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Wait until the file manager has had a chance to register its listener 1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // for the launch event. 11560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventRouter* router = EventRouter::Get(incognito_profile); 1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(router != NULL); 11583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) while (!router->ExtensionHasEventListener( 11593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) file_manager->id(), app_runtime::OnLaunched::kEventName)) { 1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 1161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Listen for new app windows so we see the file manager app launch itself. 11645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AppWindowRegistry* registry = AppWindowRegistry::Get(incognito_profile); 1165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(registry != NULL); 1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->AddObserver(this); 1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) OpenApplication(AppLaunchParams( 11698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) incognito_profile, file_manager, 0, chrome::HOST_DESKTOP_TYPE_NATIVE)); 1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (!ContainsKey(opener_app_ids_, file_manager->id())) { 1172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 1173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class RestartDeviceTest : public PlatformAppBrowserTest { 11774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 11784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RestartDeviceTest() 11794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : power_manager_client_(NULL), 11804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock_user_manager_(NULL) {} 11814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~RestartDeviceTest() {} 11824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // PlatformAppBrowserTest overrides 11844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 11854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PlatformAppBrowserTest::SetUpInProcessBrowserTestFixture(); 11864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) chromeos::FakeDBusThreadManager* dbus_manager = 11888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new chromeos::FakeDBusThreadManager; 1189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus_manager->SetFakeClients(); 1190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) power_manager_client_ = new chromeos::FakePowerManagerClient; 1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus_manager->SetPowerManagerClient( 1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<chromeos::PowerManagerClient>(power_manager_client_)); 1193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chromeos::DBusThreadManager::SetInstanceForTesting(dbus_manager); 11944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 11954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 11974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PlatformAppBrowserTest::SetUpOnMainThread(); 11984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mock_user_manager_ = new chromeos::MockUserManager; 12004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) user_manager_enabler_.reset( 12014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new chromeos::ScopedUserManagerEnabler(mock_user_manager_)); 12024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsUserLoggedIn()) 12044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillRepeatedly(testing::Return(true)); 12054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsLoggedInAsKioskApp()) 12064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .WillRepeatedly(testing::Return(true)); 12074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 12084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 12104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) user_manager_enabler_.reset(); 12114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PlatformAppBrowserTest::CleanUpOnMainThread(); 12124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 12134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 12154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PlatformAppBrowserTest::TearDownInProcessBrowserTestFixture(); 12164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 12174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int num_request_restart_calls() const { 12195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return power_manager_client_->num_request_restart_calls(); 12204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 12214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 12234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::FakePowerManagerClient* power_manager_client_; 12244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::MockUserManager* mock_user_manager_; 12254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; 12264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RestartDeviceTest); 12284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 12294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Tests that chrome.runtime.restart would request device restart in 12314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// ChromeOS kiosk mode. 12324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(RestartDeviceTest, Restart) { 12335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0, num_request_restart_calls()); 12344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionTestMessageListener launched_listener("Launched", true); 1236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension = LoadAndLaunchPlatformApp("restart_device", 1237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &launched_listener); 12384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(extension); 12394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) launched_listener.Reply("restart"); 12414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionTestMessageListener restart_requested_listener("restartRequested", 12424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) false); 12434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(restart_requested_listener.WaitUntilSatisfied()); 12444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 12455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, num_request_restart_calls()); 12464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 12474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 1249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test that when an application is uninstalled and re-install it does not have 12515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// access to the previously set data. 12525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ReinstallDataCleanup) { 12535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The application is installed and launched. After the 'Launched' message is 12545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // acknowledged by the browser process, the application will test that some 12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // data are not installed and then install them. The application will then be 12565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // uninstalled and the same process will be repeated. 12575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string extension_id; 12585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 12605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 1261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("reinstall_data_cleanup", "Launched"); 12625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(extension); 12635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_id = extension->id(); 12645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionApiTest::ResultCatcher result_catcher; 12665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(result_catcher.GetNextResult()); 12675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 12685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UninstallExtension(extension_id); 12705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 12715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 12735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 1274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp("reinstall_data_cleanup", "Launched"); 12755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(extension); 12765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(extension_id, extension->id()); 12775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionApiTest::ResultCatcher result_catcher; 12795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(result_catcher.GetNextResult()); 12805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 12815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 1284