| Index: chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc
|
| diff --git a/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc b/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc
|
| deleted file mode 100644
|
| index 4ef912e4f759032fa7a66359b14af6148334d2c9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc
|
| +++ /dev/null
|
| @@ -1,806 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include <algorithm>
|
| -#include <iterator>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/command_line.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/string_util.h"
|
| -#include "base/stringprintf.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/favicon/favicon_service.h"
|
| -#include "chrome/browser/favicon/favicon_service_factory.h"
|
| -#include "chrome/browser/intents/default_web_intent_service.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_commands.h"
|
| -#include "chrome/browser/ui/intents/web_intent_picker.h"
|
| -#include "chrome/browser/ui/intents/web_intent_picker_controller.h"
|
| -#include "chrome/browser/ui/intents/web_intent_picker_model.h"
|
| -#include "chrome/browser/ui/intents/web_intent_picker_model_observer.h"
|
| -#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "chrome/browser/webdata/web_data_service.h"
|
| -#include "chrome/browser/webdata/web_data_service_factory.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "chrome/test/base/in_process_browser_test.h"
|
| -#include "chrome/test/base/ui_test_utils.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_intents_dispatcher.h"
|
| -#include "content/public/test/test_utils.h"
|
| -#include "extensions/common/constants.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/mock_host_resolver.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "ui/gfx/image/image_unittest_util.h"
|
| -#include "ui/gfx/image/image_util.h"
|
| -#include "webkit/glue/web_intent_service_data.h"
|
| -
|
| -namespace {
|
| -
|
| -const string16 kAction1(ASCIIToUTF16("http://webintents.org/share"));
|
| -const string16 kAction2(ASCIIToUTF16("http://www.example.com/foobar"));
|
| -const string16 kType1(ASCIIToUTF16("image/png"));
|
| -const string16 kType2(ASCIIToUTF16("text/*"));
|
| -const GURL kServiceURL1("http://www.google.com");
|
| -const GURL kServiceURL2("http://www.chromium.org");
|
| -const char kDummyExtensionId[] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
|
| -const char kCWSResponseEmpty[] =
|
| - "{\"kind\":\"chromewebstore#itemList\",\"total_items\":0,\"start_index\":0,"
|
| - "\"items\":[]}";
|
| -
|
| -const char kCWSResponseResultFormat[] =
|
| - "{\"kind\":\"chromewebstore#itemList\","
|
| - "\"total_items\":1,"
|
| - "\"start_index\":0,"
|
| - "\"items\":[{"
|
| - "\"kind\":\"chromewebstore#item\","
|
| - "\"id\":\"%s\","
|
| - "\"type\":\"APPLICATION\","
|
| - "\"num_ratings\":0,"
|
| - "\"average_rating\":0.0,"
|
| - "\"manifest\": \"{\\n"
|
| - "\\\"name\\\": \\\"Dummy Share\\\",\\n"
|
| - "\\\"version\\\": \\\"1.0.0.0\\\",\\n"
|
| - "\\\"intents\\\": {\\n"
|
| - "\\\"%s\\\" : {\\n"
|
| - "\\\"type\\\" : [\\\"%s\\\"],\\n"
|
| - "\\\"path\\\" : \\\"share.html\\\",\\n"
|
| - "\\\"title\\\" : \\\"Dummy share!\\\",\\n"
|
| - "\\\"disposition\\\": \\\"inline\\\"\\n"
|
| - "}\\n"
|
| - "}\\n"
|
| - "}\\n\","
|
| - "\"family_safe\":true,"
|
| - "\"icon_url\": \"%s\"}]}";
|
| -
|
| -const char kCWSFakeIconURLFormat[] = "http://example.com/%s/icon.png";
|
| -
|
| -class DummyURLFetcherFactory : public net::URLFetcherFactory {
|
| - public:
|
| - DummyURLFetcherFactory() {}
|
| - virtual ~DummyURLFetcherFactory() {}
|
| -
|
| - virtual net::URLFetcher* CreateURLFetcher(
|
| - int id,
|
| - const GURL& url,
|
| - net::URLFetcher::RequestType request_type,
|
| - net::URLFetcherDelegate* d) OVERRIDE {
|
| - return new net::TestURLFetcher(id, url, d);
|
| - }
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class WebIntentPickerMock : public WebIntentPicker,
|
| - public WebIntentPickerModelObserver {
|
| - public:
|
| - WebIntentPickerMock()
|
| - : num_installed_services_(0),
|
| - num_icons_changed_(0),
|
| - num_extension_icons_changed_(0),
|
| - num_extensions_installed_(0),
|
| - message_loop_started_(false),
|
| - pending_async_completed_(false),
|
| - num_inline_disposition_(0),
|
| - delegate_(NULL) {
|
| - }
|
| -
|
| - void MockClose() {
|
| - delegate_->OnClosing();
|
| - }
|
| -
|
| - // WebIntentPicker implementation.
|
| - virtual void Close() OVERRIDE { StopWaiting(); }
|
| - virtual void SetActionString(const string16& action) OVERRIDE {}
|
| - virtual void OnExtensionInstallSuccess(const std::string& id) OVERRIDE {
|
| - num_extensions_installed_++;
|
| - }
|
| - virtual void OnExtensionInstallFailure(const std::string& id) OVERRIDE {}
|
| - virtual void OnInlineDispositionAutoResize(const gfx::Size& size) OVERRIDE {}
|
| - virtual void OnPendingAsyncCompleted() OVERRIDE {
|
| - StopWaiting();
|
| - }
|
| - virtual void InvalidateDelegate() OVERRIDE {
|
| - delegate_ = NULL;
|
| - }
|
| -
|
| - // WebIntentPickerModelObserver implementation.
|
| - virtual void OnModelChanged(WebIntentPickerModel* model) OVERRIDE {
|
| - num_installed_services_ =
|
| - static_cast<int>(model->GetInstalledServiceCount());
|
| - }
|
| - virtual void OnFaviconChanged(
|
| - WebIntentPickerModel* model, size_t index) OVERRIDE {
|
| - num_icons_changed_++;
|
| - }
|
| - virtual void OnExtensionIconChanged(
|
| - WebIntentPickerModel* model, const std::string& extension_id) OVERRIDE {
|
| - num_extension_icons_changed_++;
|
| - }
|
| - virtual void OnInlineDisposition(
|
| - const string16& title, const GURL& url) OVERRIDE {
|
| - num_inline_disposition_++;
|
| - }
|
| -
|
| - void Wait() {
|
| - if (!pending_async_completed_) {
|
| - message_loop_started_ = true;
|
| - content::RunMessageLoop();
|
| - pending_async_completed_ = false;
|
| - }
|
| - }
|
| -
|
| - void StopWaiting() {
|
| - pending_async_completed_ = true;
|
| - if (message_loop_started_) {
|
| - message_loop_started_ = false;
|
| - MessageLoop::current()->Quit();
|
| - }
|
| - }
|
| -
|
| - int num_installed_services_;
|
| - int num_icons_changed_;
|
| - int num_extension_icons_changed_;
|
| - int num_extensions_installed_;
|
| - bool message_loop_started_;
|
| - bool pending_async_completed_;
|
| - int num_inline_disposition_;
|
| - WebIntentPickerDelegate* delegate_;
|
| -};
|
| -
|
| -class IntentsDispatcherMock : public content::WebIntentsDispatcher {
|
| - public:
|
| - explicit IntentsDispatcherMock(const webkit_glue::WebIntentData& intent)
|
| - : intent_(intent),
|
| - dispatched_(false),
|
| - replied_(false) {}
|
| -
|
| - virtual const webkit_glue::WebIntentData& GetIntent() OVERRIDE {
|
| - return intent_;
|
| - }
|
| -
|
| - virtual void DispatchIntent(content::WebContents* web_contents) OVERRIDE {
|
| - dispatched_ = true;
|
| - }
|
| -
|
| - virtual void ResetDispatch() OVERRIDE {
|
| - }
|
| -
|
| - virtual void SendReply(const webkit_glue::WebIntentReply& reply) OVERRIDE {
|
| - replied_ = true;
|
| - }
|
| -
|
| - virtual void RegisterReplyNotification(
|
| - const base::Callback<void(webkit_glue::WebIntentReplyType)>&) OVERRIDE {
|
| - }
|
| -
|
| - webkit_glue::WebIntentData intent_;
|
| - bool dispatched_;
|
| - bool replied_;
|
| -};
|
| -
|
| -class WebIntentPickerControllerBrowserTest : public InProcessBrowserTest {
|
| - public:
|
| - WebIntentPickerControllerBrowserTest() {}
|
| -
|
| - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
|
| - // We start the test server now instead of in
|
| - // SetUpInProcessBrowserTestFixture so that we can get its port number.
|
| - ASSERT_TRUE(test_server()->Start());
|
| -
|
| - net::HostPortPair host_port = test_server()->host_port_pair();
|
| - command_line->AppendSwitchASCII(
|
| - switches::kAppsGalleryDownloadURL,
|
| - base::StringPrintf(
|
| - "http://www.example.com:%d/files/extensions/intents/%%s.crx",
|
| - host_port.port()));
|
| - command_line->AppendSwitchASCII(
|
| - switches::kAppsGalleryInstallAutoConfirmForTests, "accept");
|
| - }
|
| -
|
| - virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
|
| - host_resolver()->AddRule("www.example.com", "127.0.0.1");
|
| - }
|
| -
|
| - content::WebContents* GetWindowDispositionTarget(
|
| - WebIntentPickerController* controller) {
|
| - return controller->window_disposition_source_;
|
| - }
|
| -
|
| - virtual void SetUpOnMainThread() OVERRIDE {
|
| - // The FakeURLFetcherFactory will return a NULL URLFetcher if a request is
|
| - // created for a URL it doesn't know and there is no default factory.
|
| - // Instead, use this dummy factory to infinitely delay the request.
|
| - default_url_fetcher_factory_.reset(new DummyURLFetcherFactory);
|
| - fake_url_fetcher_factory_.reset(
|
| - new net::FakeURLFetcherFactory(default_url_fetcher_factory_.get()));
|
| -
|
| - web_data_service_ = WebDataServiceFactory::GetForProfile(
|
| - GetBrowser()->profile(), Profile::EXPLICIT_ACCESS);
|
| - favicon_service_ = FaviconServiceFactory::GetForProfile(
|
| - GetBrowser()->profile(), Profile::EXPLICIT_ACCESS);
|
| - controller_ = WebIntentPickerController::FromWebContents(
|
| - GetBrowser()->tab_strip_model()->GetActiveWebContents());
|
| -
|
| - SetupMockPicker();
|
| - controller_->set_model_observer(&picker_);
|
| - picker_.delegate_ = controller_;
|
| -
|
| - CreateFakeIcon();
|
| - }
|
| -
|
| - virtual void SetupMockPicker() {
|
| - controller_->set_picker(&picker_);
|
| - }
|
| -
|
| - virtual Browser* GetBrowser() { return browser(); }
|
| -
|
| - void AddWebIntentService(const string16& action, const GURL& service_url) {
|
| - webkit_glue::WebIntentServiceData service;
|
| - service.action = action;
|
| - service.type = kType1;
|
| - service.service_url = service_url;
|
| - web_data_service_->AddWebIntentService(service);
|
| - }
|
| -
|
| - void AddCWSExtensionServiceEmpty(const string16& action) {
|
| - GURL cws_query_url = CWSIntentsRegistry::BuildQueryURL(action, kType1);
|
| - fake_url_fetcher_factory_->SetFakeResponse(cws_query_url.spec(),
|
| - kCWSResponseEmpty, true);
|
| - }
|
| -
|
| - void AddCWSExtensionServiceWithResult(const std::string& extension_id,
|
| - const string16& action,
|
| - const string16& type) {
|
| - GURL cws_query_url = CWSIntentsRegistry::BuildQueryURL(action, type);
|
| - std::string icon_url;
|
| - std::string escaped_action = net::EscapePath(UTF16ToUTF8(action));
|
| - base::SStringPrintf(&icon_url, kCWSFakeIconURLFormat,
|
| - escaped_action.c_str());
|
| -
|
| - std::string response;
|
| - base::SStringPrintf(&response, kCWSResponseResultFormat,
|
| - extension_id.c_str(),
|
| - UTF16ToUTF8(action).c_str(), UTF16ToUTF8(type).c_str(),
|
| - icon_url.c_str());
|
| - fake_url_fetcher_factory_->SetFakeResponse(cws_query_url.spec(), response,
|
| - true);
|
| -
|
| - fake_url_fetcher_factory_->SetFakeResponse(icon_url, icon_response_,
|
| - true);
|
| - }
|
| -
|
| - void SetDefaultService(const string16& action,
|
| - const std::string& url) {
|
| - DefaultWebIntentService default_service;
|
| - default_service.action = action;
|
| - default_service.type = kType1;
|
| - default_service.user_date = 1000000;
|
| - default_service.service_url = url;
|
| - web_data_service_->AddDefaultWebIntentService(default_service);
|
| - }
|
| -
|
| - void OnSendReturnMessage(
|
| - webkit_glue::WebIntentReplyType reply_type) {
|
| - controller_->OnSendReturnMessage(reply_type);
|
| - }
|
| -
|
| - void OnServiceChosen(
|
| - const GURL& url,
|
| - webkit_glue::WebIntentServiceData::Disposition disposition) {
|
| - controller_->OnServiceChosen(url, disposition,
|
| - WebIntentPickerDelegate::kEnableDefaults);
|
| - }
|
| -
|
| - void OnCancelled() {
|
| - controller_->OnUserCancelledPickerDialog();
|
| - }
|
| -
|
| - void OnExtensionInstallRequested(const std::string& extension_id) {
|
| - controller_->OnExtensionInstallRequested(extension_id);
|
| - }
|
| -
|
| - extensions::WebstoreInstaller* GetWebstoreInstaller() const {
|
| - return controller_->webstore_installer_.get();
|
| - }
|
| -
|
| - void CreateFakeIcon() {
|
| - gfx::Image image(gfx::test::CreateImage());
|
| - scoped_refptr<base::RefCountedMemory> image_data = image.As1xPNGBytes();
|
| - DCHECK(image_data->size());
|
| -
|
| - std::copy(image_data->front(), image_data->front() + image_data->size(),
|
| - std::back_inserter(icon_response_));
|
| - }
|
| -
|
| - void ClickLocationBarButton(content::WebContents* service_web_contents) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| - WebIntentPickerController* service_controller =
|
| - WebIntentPickerController::FromWebContents(service_web_contents);
|
| - service_controller->LocationBarPickerButtonClicked();
|
| - }
|
| -
|
| - void CloseCurrentTab() {
|
| - content::WindowedNotificationObserver tab_close_observer(
|
| - content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
|
| - content::NotificationService::AllSources());
|
| - chrome::CloseTab(browser());
|
| - tab_close_observer.Wait();
|
| - }
|
| -
|
| - WebIntentPickerMock picker_;
|
| - scoped_refptr<WebDataService> web_data_service_;
|
| - FaviconService* favicon_service_;
|
| - WebIntentPickerController* controller_;
|
| - scoped_ptr<DummyURLFetcherFactory> default_url_fetcher_factory_;
|
| - scoped_ptr<net::FakeURLFetcherFactory> fake_url_fetcher_factory_;
|
| - std::string icon_response_;
|
| -};
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest, ChooseService) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceEmpty(kAction1);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| - EXPECT_EQ(2, picker_.num_installed_services_);
|
| - EXPECT_EQ(0, picker_.num_icons_changed_);
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - OnServiceChosen(kServiceURL2,
|
| - webkit_glue::WebIntentServiceData::DISPOSITION_WINDOW);
|
| - ASSERT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(GURL(kServiceURL2),
|
| - tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - EXPECT_TRUE(GetWindowDispositionTarget(
|
| - WebIntentPickerController::FromWebContents(
|
| - tab_strip->GetActiveWebContents())));
|
| -
|
| - EXPECT_TRUE(dispatcher.dispatched_);
|
| -
|
| - OnSendReturnMessage(webkit_glue::WEB_INTENT_REPLY_SUCCESS);
|
| - ASSERT_EQ(1, tab_strip->count());
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - FetchExtensionIcon) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceWithResult(kDummyExtensionId, kAction1, kType1);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| - // Flush all pending worker tasks for PNG decoding.
|
| - content::BrowserThread::GetBlockingPool()->FlushForTesting();
|
| - // Flush all tasks posted from the worker tasks.
|
| - MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(2, picker_.num_installed_services_);
|
| - EXPECT_EQ(0, picker_.num_icons_changed_);
|
| - EXPECT_EQ(1, picker_.num_extension_icons_changed_);
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest, OpenCancelOpen) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceEmpty(kAction1);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| - OnCancelled();
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - OnCancelled();
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - CloseTargetTabReturnToSource) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddCWSExtensionServiceEmpty(kAction1);
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - GURL original = tab_strip->GetActiveWebContents()->GetURL();
|
| -
|
| - // Open a new page, but keep focus on original.
|
| - ui_test_utils::NavigateToURLWithDisposition(
|
| - browser(), GURL(chrome::kChromeUINewTabURL), NEW_BACKGROUND_TAB,
|
| - ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| - ASSERT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(original, tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| - EXPECT_EQ(1, picker_.num_installed_services_);
|
| -
|
| - OnServiceChosen(kServiceURL1,
|
| - webkit_glue::WebIntentServiceData::DISPOSITION_WINDOW);
|
| - ASSERT_EQ(3, tab_strip->count());
|
| - EXPECT_EQ(GURL(kServiceURL1),
|
| - tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - EXPECT_TRUE(dispatcher.dispatched_);
|
| -
|
| - OnSendReturnMessage(webkit_glue::WEB_INTENT_REPLY_SUCCESS);
|
| - ASSERT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(original, tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - CloseCurrentTab();
|
| -}
|
| -
|
| -class WebIntentPickerControllerIncognitoBrowserTest
|
| - : public WebIntentPickerControllerBrowserTest {
|
| - public:
|
| - WebIntentPickerControllerIncognitoBrowserTest() {}
|
| -
|
| - virtual void SetUpOnMainThread() OVERRIDE {
|
| - incognito_browser_ = CreateIncognitoBrowser();
|
| - WebIntentPickerControllerBrowserTest::SetUpOnMainThread();
|
| - }
|
| -
|
| - virtual Browser* GetBrowser() OVERRIDE { return incognito_browser_; }
|
| -
|
| - int pending_async_count() { return controller_->pending_async_count_; }
|
| -
|
| - private:
|
| - Browser* incognito_browser_;
|
| -};
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerIncognitoBrowserTest,
|
| - ShowDialogShouldntCrash) {
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - // This should do nothing for now.
|
| - EXPECT_EQ(0, pending_async_count());
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ExtensionInstallSuccess) {
|
| - const char extension_id[] = "ooodacpbmglpoagccnepcbfhfhpdgddn";
|
| - AddCWSExtensionServiceWithResult(extension_id, kAction1, kType2);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType2;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType2);
|
| - picker_.Wait();
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - ASSERT_EQ(1, tab_strip->count());
|
| - OnExtensionInstallRequested(extension_id);
|
| - picker_.Wait();
|
| - EXPECT_EQ(1, picker_.num_extensions_installed_);
|
| - const extensions::Extension* extension = browser()->profile()->
|
| - GetExtensionService()->GetExtensionById(extension_id, false);
|
| - EXPECT_TRUE(extension);
|
| -
|
| - // Installing an extension should also choose it. Since this extension uses
|
| - // window disposition, it will create a new tab.
|
| - EXPECT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(0, picker_.num_inline_disposition_);
|
| -
|
| - CloseCurrentTab();
|
| -}
|
| -
|
| -// Tests that inline install of an extension using inline disposition works
|
| -// and brings up content as inline content.
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ExtensionInstallSuccessInline) {
|
| - const char extension_id[] = "nnhendkbgefomfgdlnmfhhmihihlljpi";
|
| - AddCWSExtensionServiceWithResult(extension_id, kAction1, kType2);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType2;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType2);
|
| - picker_.Wait();
|
| -
|
| - OnExtensionInstallRequested(extension_id);
|
| - picker_.Wait();
|
| - EXPECT_EQ(1, picker_.num_extensions_installed_);
|
| - const extensions::Extension* extension = browser()->profile()->
|
| - GetExtensionService()->GetExtensionById(extension_id, false);
|
| - EXPECT_TRUE(extension);
|
| -
|
| - // Installing an extension should also choose it. Since this extension uses
|
| - // inline disposition, it will create no tabs and invoke OnInlineDisposition.
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - EXPECT_EQ(1, tab_strip->count());
|
| - EXPECT_EQ(1, picker_.num_inline_disposition_);
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - WebstoreInstallerLifetime) {
|
| - const char extension_id[] = "nnhendkbgefomfgdlnmfhhmihihlljpi";
|
| - AddCWSExtensionServiceWithResult(extension_id, kAction1, kType2);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType2;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType2);
|
| - picker_.Wait();
|
| -
|
| - // We haven't yet created a WebstoreInstaller.
|
| - EXPECT_FALSE(GetWebstoreInstaller());
|
| -
|
| - // While extension install is pending, we have a WebstoreInstaller.
|
| - OnExtensionInstallRequested(extension_id);
|
| - EXPECT_TRUE(GetWebstoreInstaller());
|
| -
|
| - // After extension install the WebstoreInstaller is cleaned up.
|
| - picker_.Wait();
|
| - EXPECT_EQ(1, picker_.num_extensions_installed_);
|
| - EXPECT_FALSE(GetWebstoreInstaller());
|
| -}
|
| -
|
| -// Test that an explicit intent does not trigger loading intents from the
|
| -// registry (skips the picker), and creates the intent service handler
|
| -// immediately.
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ExplicitIntentTest) {
|
| - // Install a target service for the explicit intent.
|
| - const char extension_id[] = "ooodacpbmglpoagccnepcbfhfhpdgddn";
|
| - AddCWSExtensionServiceWithResult(extension_id, kAction1, kType2);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType2;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - controller_->ShowDialog(kAction1, kType2);
|
| - picker_.Wait();
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - OnExtensionInstallRequested(extension_id);
|
| - picker_.Wait();
|
| - ASSERT_EQ(1, picker_.num_extensions_installed_);
|
| - // The intent launches a new tab.
|
| - ASSERT_EQ(2, tab_strip->count());
|
| -
|
| - // Make the controller think nothing is being shown.
|
| - picker_.MockClose();
|
| - SetupMockPicker();
|
| -
|
| - // Now call the explicit intent.
|
| - webkit_glue::WebIntentData explicitIntent;
|
| - explicitIntent.action = kAction1;
|
| - explicitIntent.type = kType2;
|
| - explicitIntent.service = GURL(StringPrintf("%s://%s/%s",
|
| - extensions::kExtensionScheme,
|
| - extension_id,
|
| - "share.html"));
|
| - IntentsDispatcherMock dispatcher2(explicitIntent);
|
| - controller_->SetIntentsDispatcher(&dispatcher2);
|
| - ui_test_utils::WindowedTabAddedNotificationObserver new_tab_observer((
|
| - content::Source<content::WebContentsDelegate>(browser())));
|
| - controller_->ShowDialog(kAction1, kType2);
|
| - new_tab_observer.Wait();
|
| -
|
| - content::WebContents* service_web_contents = new_tab_observer.GetTab();
|
| - DCHECK(service_web_contents);
|
| -
|
| - // Location bar button should not be shown for explicit intents.
|
| - WebIntentPickerController* service_controller =
|
| - WebIntentPickerController::FromWebContents(service_web_contents);
|
| - DCHECK(service_controller);
|
| - EXPECT_FALSE(service_controller->ShowLocationBarPickerButton());
|
| -
|
| - EXPECT_EQ(3, tab_strip->count());
|
| - EXPECT_EQ(0, picker_.num_inline_disposition_);
|
| - EXPECT_FALSE(dispatcher2.replied_);
|
| -
|
| - // num_installed_services_ would be 2 if the intent wasn't explicit.
|
| - EXPECT_EQ(1, picker_.num_installed_services_);
|
| -
|
| - // Close tabs to get rid of them before the dispatchers go out of scope at the
|
| - // end of this method.
|
| - CloseCurrentTab();
|
| - CloseCurrentTab();
|
| -}
|
| -
|
| -// Test that an explicit intent for non-installed extension won't
|
| -// complete.
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ExplicitIntentNoExtensionTest) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceWithResult(kDummyExtensionId, kAction1, kType1);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - intent.service = GURL(StringPrintf("%s://%s/%s",
|
| - extensions::kExtensionScheme,
|
| - kDummyExtensionId,
|
| - UTF16ToASCII(kAction1).c_str()));
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - EXPECT_EQ(1, tab_strip->count());
|
| - EXPECT_EQ(0, picker_.num_inline_disposition_);
|
| - EXPECT_TRUE(dispatcher.replied_);
|
| -
|
| - // num_installed_services_ would be 2 if the intent wasn't explicit.
|
| - EXPECT_EQ(0, picker_.num_installed_services_);
|
| -}
|
| -
|
| -// Test that explicit intents won't load uninstalled non-extensions.
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ExplicitIntentNonExtensionTest) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceWithResult(kDummyExtensionId, kAction1, kType1);
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - intent.service = GURL("http://www.uninstalled.com/");
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - picker_.Wait();
|
| -
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - EXPECT_EQ(1, tab_strip->count());
|
| - EXPECT_EQ(0, picker_.num_inline_disposition_);
|
| -
|
| - // num_installed_services_ would be 2 if the intent wasn't explicit.
|
| - EXPECT_EQ(0, picker_.num_installed_services_);
|
| - EXPECT_TRUE(dispatcher.replied_);
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - DefaultsTest) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceEmpty(kAction1);
|
| -
|
| - SetDefaultService(kAction1, kServiceURL1.spec());
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - ui_test_utils::WindowedTabAddedNotificationObserver new_tab_observer((
|
| - content::Source<content::WebContentsDelegate>(browser())));
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - new_tab_observer.Wait();
|
| - WebIntentPickerController* service_controller =
|
| - WebIntentPickerController::FromWebContents(new_tab_observer.GetTab());
|
| - EXPECT_TRUE(service_controller->ShowLocationBarPickerButton());
|
| -
|
| - EXPECT_EQ(2, picker_.num_installed_services_);
|
| -
|
| - // The tab is shown immediately without needing to call OnServiceChosen.
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - ASSERT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(GURL(kServiceURL1),
|
| - tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - EXPECT_TRUE(dispatcher.dispatched_);
|
| -
|
| - CloseCurrentTab();
|
| -}
|
| -
|
| -IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest,
|
| - ChooseAnotherService) {
|
| - AddWebIntentService(kAction1, kServiceURL1);
|
| - AddWebIntentService(kAction1, kServiceURL2);
|
| - AddCWSExtensionServiceEmpty(kAction1);
|
| -
|
| - // Bring up the picker to get the test-installed services so we can create a
|
| - // default with the right defaulting fingerprint.
|
| - SetDefaultService(kAction1, kServiceURL1.spec());
|
| -
|
| - webkit_glue::WebIntentData intent;
|
| - intent.action = kAction1;
|
| - intent.type = kType1;
|
| - IntentsDispatcherMock dispatcher(intent);
|
| - controller_->SetIntentsDispatcher(&dispatcher);
|
| -
|
| - ui_test_utils::WindowedTabAddedNotificationObserver new_tab_observer((
|
| - content::Source<content::WebContentsDelegate>(browser())));
|
| - controller_->ShowDialog(kAction1, kType1);
|
| - new_tab_observer.Wait();
|
| - content::WebContents* service_web_contents = new_tab_observer.GetTab();
|
| -
|
| - EXPECT_EQ(2, picker_.num_installed_services_);
|
| -
|
| - // The tab is shown immediately without needing to call OnServiceChosen.
|
| - TabStripModel* tab_strip = browser()->tab_strip_model();
|
| - ASSERT_EQ(2, tab_strip->count());
|
| - EXPECT_EQ(GURL(kServiceURL1),
|
| - tab_strip->GetActiveWebContents()->GetURL());
|
| -
|
| - // Simulate click on the location bar use-another-service button.
|
| - content::WindowedNotificationObserver observer(
|
| - chrome::NOTIFICATION_TAB_CLOSING,
|
| - content::NotificationService::AllSources());
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&WebIntentPickerControllerBrowserTest::ClickLocationBarButton,
|
| - base::Unretained(this),
|
| - service_web_contents));
|
| - observer.Wait();
|
| - picker_.Wait();
|
| -
|
| - // The service tab is closed and the picker is shown again
|
| - // on the original tab.
|
| - EXPECT_EQ(1, tab_strip->count());
|
| - EXPECT_EQ(2, picker_.num_installed_services_);
|
| - EXPECT_EQ(0, picker_.num_inline_disposition_);
|
| -}
|
|
|