Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5238)

Unified Diff: chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc

Issue 12225076: Delete most web intents code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_);
-}
« no previous file with comments | « chrome/browser/ui/intents/web_intent_picker_controller.cc ('k') | chrome/browser/ui/intents/web_intent_picker_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698