| Index: chrome/browser/intents/web_intents_registry_unittest.cc
|
| diff --git a/chrome/browser/intents/web_intents_registry_unittest.cc b/chrome/browser/intents/web_intents_registry_unittest.cc
|
| deleted file mode 100644
|
| index 921108a67292b834047e2f6832788d34dc9b1ff5..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/intents/web_intents_registry_unittest.cc
|
| +++ /dev/null
|
| @@ -1,807 +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 "base/bind.h"
|
| -#include "base/file_util.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/json/json_file_value_serializer.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/path_service.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/extensions/test_extension_service.h"
|
| -#include "chrome/browser/intents/default_web_intent_service.h"
|
| -#include "chrome/browser/intents/web_intents_registry.h"
|
| -#include "chrome/browser/webdata/web_data_service.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/extensions/extension.h"
|
| -#include "chrome/common/extensions/extension_manifest_constants.h"
|
| -#include "chrome/common/extensions/extension_set.h"
|
| -#include "chrome/common/extensions/manifest.h"
|
| -#include "chrome/common/extensions/manifest_handler.h"
|
| -#include "chrome/common/extensions/web_intents_handler.h"
|
| -#include "content/public/test/test_browser_thread.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using content::BrowserThread;
|
| -using extensions::Extension;
|
| -using extensions::Manifest;
|
| -using webkit_glue::WebIntentServiceData;
|
| -
|
| -class MockExtensionService: public TestExtensionService {
|
| - public:
|
| - virtual ~MockExtensionService() {}
|
| - MOCK_CONST_METHOD0(extensions, const ExtensionSet*());
|
| - MOCK_CONST_METHOD2(GetExtensionById,
|
| - const Extension*(const std::string&, bool));
|
| - MOCK_CONST_METHOD1(GetInstalledExtension,
|
| - const Extension*(const std::string& id));
|
| -};
|
| -
|
| -namespace {
|
| -
|
| -// TODO(groby): Unify loading functions with extension_manifest_unittest code.
|
| -DictionaryValue* LoadManifestFile(const base::FilePath& path,
|
| - std::string* error) {
|
| - EXPECT_TRUE(file_util::PathExists(path));
|
| - JSONFileValueSerializer serializer(path);
|
| - return static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error));
|
| -}
|
| -
|
| -scoped_refptr<Extension> LoadExtensionWithLocation(
|
| - const std::string& name,
|
| - Manifest::Location location,
|
| - std::string* error) {
|
| - base::FilePath path;
|
| - PathService::Get(chrome::DIR_TEST_DATA, &path);
|
| - path = path.AppendASCII("extensions")
|
| - .AppendASCII("manifest_tests")
|
| - .AppendASCII(name.c_str());
|
| - scoped_ptr<DictionaryValue> value(LoadManifestFile(path, error));
|
| - if (!value.get())
|
| - return NULL;
|
| - return Extension::Create(path.DirName(),
|
| - location,
|
| - *value,
|
| - Extension::NO_FLAGS,
|
| - Extension::GenerateIdForPath(path),
|
| - error);
|
| -}
|
| -
|
| -scoped_refptr<Extension> LoadExtension(const std::string& name,
|
| - std::string* error) {
|
| - return LoadExtensionWithLocation(name, Manifest::INTERNAL, error);
|
| -}
|
| -
|
| -scoped_refptr<Extension> LoadAndExpectSuccess(const std::string& name) {
|
| - std::string error;
|
| - scoped_refptr<Extension> extension = LoadExtension(name, &error);
|
| - EXPECT_TRUE(extension) << name;
|
| - EXPECT_EQ("", error) << name;
|
| - return extension;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class WebIntentsRegistryTest : public testing::Test {
|
| - public:
|
| - WebIntentsRegistryTest()
|
| - : ui_thread_(BrowserThread::UI, &message_loop_),
|
| - db_thread_(BrowserThread::DB) {}
|
| -
|
| - protected:
|
| - virtual void SetUp() {
|
| - db_thread_.Start();
|
| - wds_ = new WebDataService();
|
| - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| - wds_->Init(temp_dir_.path());
|
| - registry_.Initialize(wds_, &extension_service_);
|
| - EXPECT_CALL(extension_service_, extensions()).
|
| - WillRepeatedly(testing::Return(&extensions_));
|
| - EXPECT_CALL(extension_service_, GetExtensionById(testing::_, testing::_)).
|
| - WillRepeatedly(
|
| - testing::Invoke(this, &WebIntentsRegistryTest::GetExtensionById));
|
| - extensions::ManifestHandler::Register(
|
| - extension_manifest_keys::kIntents,
|
| - make_linked_ptr(new extensions::WebIntentsHandler));
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - // Clear all references to wds to force it destruction.
|
| - wds_->ShutdownOnUIThread();
|
| - wds_ = NULL;
|
| -
|
| - // Schedule another task on the DB thread to notify us that it's safe to
|
| - // carry on with the test.
|
| - base::WaitableEvent done(false, false);
|
| - BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
|
| - base::Bind(&base::WaitableEvent::Signal,
|
| - base::Unretained(&done)));
|
| - done.Wait();
|
| - db_thread_.Stop();
|
| - MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
|
| - MessageLoop::current()->Run();
|
| - }
|
| -
|
| - const Extension* GetExtensionById(const std::string& extension_id,
|
| - testing::Unused) {
|
| - for (ExtensionSet::const_iterator iter = extensions_.begin();
|
| - iter != extensions_.end(); ++iter) {
|
| - if ((*iter)->id() == extension_id)
|
| - return &**iter;
|
| - }
|
| -
|
| - return NULL;
|
| - }
|
| -
|
| - MessageLoopForUI message_loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - content::TestBrowserThread db_thread_;
|
| - scoped_refptr<WebDataService> wds_;
|
| - MockExtensionService extension_service_;
|
| - ExtensionSet extensions_;
|
| - WebIntentsRegistry registry_;
|
| - base::ScopedTempDir temp_dir_;
|
| -};
|
| -
|
| -// Base consumer for WebIntentsRegistry results.
|
| -class TestConsumer {
|
| - public:
|
| - // Wait for the UI message loop to terminate - happens when OnIntesQueryDone
|
| - // is invoked.
|
| - void WaitForData() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - MessageLoop::current()->Run();
|
| - }
|
| -};
|
| -
|
| -// Consumer of service lists. Stores result data and
|
| -// terminates UI thread when callback is invoked.
|
| -class ServiceListConsumer : public TestConsumer {
|
| - public:
|
| - void Accept(
|
| - const std::vector<webkit_glue::WebIntentServiceData>& services) {
|
| - services_ = services;
|
| -
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - bool ResultsContain(const webkit_glue::WebIntentServiceData& service) {
|
| - for (size_t i = 0; i < services_.size(); ++i) {
|
| - if (services_[i] == service)
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - // Result data from callback.
|
| - std::vector<webkit_glue::WebIntentServiceData> services_;
|
| -};
|
| -
|
| -// Consume or defaultservice lists. Stores result data and
|
| -// terminates UI thread when callback is invoked.
|
| -class DefaultServiceListConsumer : public TestConsumer {
|
| - public:
|
| - void Accept(const std::vector<DefaultWebIntentService>& services) {
|
| - services_ = services;
|
| -
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - bool ResultsContain(const DefaultWebIntentService& service) {
|
| - for (size_t i = 0; i < services_.size(); ++i) {
|
| - if (services_[i] == service)
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - // Result data from callback.
|
| - std::vector<DefaultWebIntentService> services_;
|
| -};
|
| -
|
| -// Consumer of a default service. Stores result data and
|
| -// terminates UI thread when callback is invoked.
|
| -class DefaultServiceConsumer : public TestConsumer {
|
| - public:
|
| - void Accept(
|
| - const DefaultWebIntentService& default_service) {
|
| - service_ = default_service;
|
| -
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - // Result default data from callback.
|
| - DefaultWebIntentService service_;
|
| -};
|
| -
|
| -TEST_F(WebIntentsRegistryTest, BasicTests) {
|
| - webkit_glue::WebIntentServiceData service;
|
| - service.service_url = GURL("http://google.com");
|
| - service.action = ASCIIToUTF16("share");
|
| - service.type = ASCIIToUTF16("image/*");
|
| - service.title = ASCIIToUTF16("Google's Sharing Service");
|
| -
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - service.type = ASCIIToUTF16("video/*");
|
| - service.title = ASCIIToUTF16("Second Service");
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - service.action = ASCIIToUTF16("search");
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - EXPECT_EQ(2U, consumer.services_.size());
|
| -
|
| - registry_.GetIntentServices(ASCIIToUTF16("search"), ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - EXPECT_EQ(1U, consumer.services_.size());
|
| -
|
| - service.action = ASCIIToUTF16("share");
|
| - service.type = ASCIIToUTF16("image/*");
|
| - registry_.UnregisterIntentService(service);
|
| -
|
| - registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - EXPECT_EQ(1U, consumer.services_.size());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetIntentServicesForExtensionFilter) {
|
| - scoped_refptr<Extension> share_extension(
|
| - LoadAndExpectSuccess("intent_valid.json"));
|
| - scoped_refptr<Extension> edit_extension(
|
| - LoadAndExpectSuccess("intent_valid_2.json"));
|
| - extensions_.Insert(share_extension);
|
| - extensions_.Insert(edit_extension);
|
| - ASSERT_EQ(2U, extensions_.size());
|
| -
|
| - WebIntentsRegistry::IntentServiceList services;
|
| - registry_.GetIntentServicesForExtensionFilter(
|
| - ASCIIToUTF16("http://webintents.org/edit"),
|
| - ASCIIToUTF16("image/*"),
|
| - edit_extension->id(),
|
| - &services);
|
| - ASSERT_EQ(1U, services.size());
|
| -
|
| - EXPECT_EQ(edit_extension->url().spec() + "services/edit",
|
| - services[0].service_url.spec());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetAllIntents) {
|
| - webkit_glue::WebIntentServiceData service;
|
| - service.service_url = GURL("http://google.com");
|
| - service.action = ASCIIToUTF16("share");
|
| - service.type = ASCIIToUTF16("image/*");
|
| - service.title = ASCIIToUTF16("Google's Sharing Service");
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - service.action = ASCIIToUTF16("search");
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetAllIntentServices(base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| -
|
| - if (consumer.services_[0].action != ASCIIToUTF16("share"))
|
| - std::swap(consumer.services_[0], consumer.services_[1]);
|
| -
|
| - service.action = ASCIIToUTF16("share");
|
| - EXPECT_EQ(service, consumer.services_[0]);
|
| -
|
| - service.action = ASCIIToUTF16("search");
|
| - EXPECT_EQ(service, consumer.services_[1]);
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetExtensionIntents) {
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid.json"));
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json"));
|
| - ASSERT_EQ(2U, extensions_.size());
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetAllIntentServices(base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetSomeExtensionIntents) {
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid.json"));
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json"));
|
| - ASSERT_EQ(2U, extensions_.size());
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/edit"),
|
| - ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetIntentsFromMixedSources) {
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid.json"));
|
| - extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json"));
|
| - ASSERT_EQ(2U, extensions_.size());
|
| -
|
| - webkit_glue::WebIntentServiceData service;
|
| - service.service_url = GURL("http://somewhere.com/intent/edit.html");
|
| - service.action = ASCIIToUTF16("http://webintents.org/edit");
|
| - service.type = ASCIIToUTF16("image/*");
|
| - service.title = ASCIIToUTF16("Image Editing Service");
|
| - registry_.RegisterIntentService(service);
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetIntentServices(
|
| - ASCIIToUTF16("http://webintents.org/edit"), ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| -
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, GetIntentsWithMimeAndLiteralMatching) {
|
| - WebIntentServiceData services[] = {
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/*"),
|
| - string16(),
|
| - GURL("http://elsewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/jpeg"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Specific Image Editing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("text/uri-list"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Link Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("text/plain"),
|
| - string16(),
|
| - GURL("http://somewhere2.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("elsewhere"),
|
| - string16(),
|
| - GURL("http://elsewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("somewhere"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("nota/*"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*nomime"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*/nomime"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*/*nomime"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*/*/nomime"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("nomime/*"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("x-type/*"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("x-/*"), // actually a string literal
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Text Sharing Service"))
|
| - };
|
| - registry_.RegisterIntentService(services[0]);
|
| - registry_.RegisterIntentService(services[1]);
|
| - registry_.RegisterIntentService(services[2]);
|
| - registry_.RegisterIntentService(services[3]);
|
| - registry_.RegisterIntentService(services[4]);
|
| - registry_.RegisterIntentService(services[5]);
|
| - registry_.RegisterIntentService(services[6]);
|
| - registry_.RegisterIntentService(services[7]);
|
| - registry_.RegisterIntentService(services[8]);
|
| - registry_.RegisterIntentService(services[9]);
|
| - registry_.RegisterIntentService(services[10]);
|
| - registry_.RegisterIntentService(services[11]);
|
| - registry_.RegisterIntentService(services[12]);
|
| - registry_.RegisterIntentService(services[13]);
|
| -
|
| - ServiceListConsumer consumer;
|
| -
|
| - // Test specific match on both sides.
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("text/uri-list"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| - EXPECT_EQ(services[2], consumer.services_[0]);
|
| -
|
| - // Test specific query, wildcard registration.
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| - EXPECT_EQ(services[0], consumer.services_[0]);
|
| -
|
| - // Test wildcard query, specific registration.
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("text/*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| - EXPECT_EQ(services[2], consumer.services_[0]);
|
| - EXPECT_EQ(services[3], consumer.services_[1]);
|
| -
|
| - // Test wildcard query, wildcard registration.
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| - EXPECT_EQ(services[0], consumer.services_[0]);
|
| - EXPECT_EQ(services[1], consumer.services_[1]);
|
| -
|
| - // Test "catch-all" query.
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(5U, consumer.services_.size());
|
| - EXPECT_TRUE(consumer.ResultsContain(services[0]));
|
| - EXPECT_TRUE(consumer.ResultsContain(services[1]));
|
| - EXPECT_TRUE(consumer.ResultsContain(services[2]));
|
| - EXPECT_TRUE(consumer.ResultsContain(services[3]));
|
| - EXPECT_TRUE(consumer.ResultsContain(services[12]));
|
| -
|
| - // Test retrieve string literal match.
|
| - registry_.GetIntentServices(
|
| - ASCIIToUTF16("http://webintents.org/share"), ASCIIToUTF16("elsewhere"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| - EXPECT_EQ(services[4], consumer.services_[0]);
|
| -
|
| - // Test retrieve MIME-looking type but actually isn't
|
| - // doesn't wildcard match.
|
| - registry_.GetIntentServices(
|
| - ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("nota/mimetype"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(0U, consumer.services_.size());
|
| -
|
| - // Also a MIME-ish type that actually isn't.
|
| - registry_.GetIntentServices(
|
| - ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("x-/mimetype"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(0U, consumer.services_.size());
|
| -
|
| - // Extension MIME type will match wildcard.
|
| - registry_.GetIntentServices(
|
| - ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("x-type/mimetype"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, TestGetAllDefaultIntentServices) {
|
| - DefaultWebIntentService s0;
|
| - s0.action = ASCIIToUTF16("share");
|
| - s0.type = ASCIIToUTF16("text/*");
|
| - // Values here are just dummies to test for preservation.
|
| - s0.user_date = 1;
|
| - s0.suppression = 4;
|
| - s0.service_url = "service_url";
|
| - registry_.RegisterDefaultIntentService(s0);
|
| -
|
| - DefaultWebIntentService s1;
|
| - s1.action = ASCIIToUTF16("pick");
|
| - s1.type = ASCIIToUTF16("image/*");
|
| - // Values here are just dummies to test for preservation.
|
| - s1.user_date = 1;
|
| - s1.suppression = 4;
|
| - s1.service_url = "service_url";
|
| - registry_.RegisterDefaultIntentService(s1);
|
| -
|
| - DefaultWebIntentService s2;
|
| - s2.action = ASCIIToUTF16("save");
|
| - s2.type = ASCIIToUTF16("application/*");
|
| - // Values here are just dummies to test for preservation.
|
| - s2.user_date = 1;
|
| - s2.suppression = 4;
|
| - s2.service_url = "service_url";
|
| - registry_.RegisterDefaultIntentService(s2);
|
| -
|
| - DefaultServiceListConsumer consumer;
|
| -
|
| - registry_.GetAllDefaultIntentServices(
|
| - base::Bind(&DefaultServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - EXPECT_TRUE(consumer.ResultsContain(s0));
|
| - EXPECT_TRUE(consumer.ResultsContain(s1));
|
| - EXPECT_TRUE(consumer.ResultsContain(s2));
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, TestGetDefaults) {
|
| - // Ignore QO-default related calls.
|
| - EXPECT_CALL(extension_service_, GetInstalledExtension(testing::_)).
|
| - WillRepeatedly(testing::ReturnNull());
|
| -
|
| - DefaultWebIntentService default_service;
|
| - default_service.action = ASCIIToUTF16("share");
|
| - default_service.type = ASCIIToUTF16("text/*");
|
| - // Values here are just dummies to test for preservation.
|
| - default_service.user_date = 1;
|
| - default_service.suppression = 4;
|
| - default_service.service_url = "service_url";
|
| - registry_.RegisterDefaultIntentService(default_service);
|
| -
|
| - DefaultServiceConsumer consumer;
|
| -
|
| - // Test we can retrieve default entries by action.
|
| - registry_.GetDefaultIntentService(
|
| - ASCIIToUTF16("share"), ASCIIToUTF16("text/plain"),
|
| - GURL("http://www.google.com/"),
|
| - base::Bind(&DefaultServiceConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - EXPECT_EQ("service_url", consumer.service_.service_url);
|
| - EXPECT_EQ(1, consumer.service_.user_date);
|
| - EXPECT_EQ(4, consumer.service_.suppression);
|
| -
|
| - // Can get for wildcard.
|
| - consumer.service_ = DefaultWebIntentService();
|
| - registry_.GetDefaultIntentService(
|
| - ASCIIToUTF16("share"),
|
| - ASCIIToUTF16("text/*"),
|
| - GURL("http://www.google.com/"),
|
| - base::Bind(&DefaultServiceConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| - consumer.WaitForData();
|
| - EXPECT_EQ("service_url", consumer.service_.service_url);
|
| - EXPECT_EQ(1, consumer.service_.user_date);
|
| - EXPECT_EQ(4, consumer.service_.suppression);
|
| -
|
| - // Test that no action match means we don't retrieve any
|
| - // default entries.
|
| - consumer.service_ = DefaultWebIntentService();
|
| - ASSERT_EQ("", consumer.service_.service_url);
|
| - registry_.GetDefaultIntentService(
|
| - ASCIIToUTF16("no-share"), ASCIIToUTF16("text/plain"),
|
| - GURL("http://www.google.com/"),
|
| - base::Bind(&DefaultServiceConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - EXPECT_EQ("", consumer.service_.service_url);
|
| -
|
| - // Test that no type match means we don't retrieve any
|
| - // default entries (they get filtered out).
|
| - consumer.service_ = DefaultWebIntentService();
|
| - ASSERT_EQ("", consumer.service_.service_url);
|
| - registry_.GetDefaultIntentService(
|
| - ASCIIToUTF16("share"), ASCIIToUTF16("image/plain"),
|
| - GURL("http://www.google.com/"),
|
| - base::Bind(&DefaultServiceConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - EXPECT_EQ("", consumer.service_.service_url);
|
| -
|
| - // Check that a string-literal type won't match.
|
| - consumer.service_ = DefaultWebIntentService();
|
| - ASSERT_EQ("", consumer.service_.service_url);
|
| - registry_.GetDefaultIntentService(
|
| - ASCIIToUTF16("share"),
|
| - ASCIIToUTF16("literal"),
|
| - GURL("http://www.google.com/"),
|
| - base::Bind(&DefaultServiceConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - EXPECT_EQ("", consumer.service_.service_url);
|
| -}
|
| -
|
| -// Verify that collapsing equivalent intents works properly.
|
| -TEST_F(WebIntentsRegistryTest, CollapseIntents) {
|
| - WebIntentsRegistry::IntentServiceList services;
|
| -
|
| - // Add two intents with identical |service_url|, |title|, and |action|.
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")));
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/jpg"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")));
|
| - // Service that differs in disposition.
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")));
|
| - ASSERT_EQ(WebIntentServiceData::DISPOSITION_WINDOW,
|
| - services.back().disposition);
|
| - services.back().disposition = WebIntentServiceData::DISPOSITION_INLINE;
|
| - // Service that differs in title.
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Sharing Service")));
|
| - // Service that differs in |action|.
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share-old"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")));
|
| - // Service that differs in |service_url|.
|
| - services.push_back(
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://zoo.com/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")));
|
| -
|
| - // Only the first two services should be collapsed.
|
| - registry_.CollapseIntents(&services);
|
| - ASSERT_EQ(5UL, services.size());
|
| -
|
| - // Joined services have their mime types combined
|
| - EXPECT_EQ(ASCIIToUTF16("image/png,image/jpg"), services[0].type);
|
| -
|
| - // Verify the remaining services via distinguishing characteristics.
|
| - EXPECT_EQ(WebIntentServiceData::DISPOSITION_INLINE, services[1].disposition);
|
| - EXPECT_EQ(ASCIIToUTF16("Sharing Service"), services[2].title);
|
| - EXPECT_EQ(ASCIIToUTF16("http://webintents.org/share-old"),
|
| - services[3].action);
|
| - EXPECT_EQ(GURL("http://zoo.com/share.html").spec(),
|
| - services[4].service_url.spec());
|
| -}
|
| -
|
| -// Verify that GetIntentServices collapses equivalent intents.
|
| -TEST_F(WebIntentsRegistryTest, GetIntentsCollapsesEquivalentIntents) {
|
| - WebIntentServiceData services[] = {
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/png"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service")),
|
| - WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/jpg"),
|
| - string16(),
|
| - GURL("http://somewhere.com/intent/share.html"),
|
| - ASCIIToUTF16("Image Sharing Service"))
|
| - };
|
| - registry_.RegisterIntentService(services[0]);
|
| - registry_.RegisterIntentService(services[1]);
|
| -
|
| - ServiceListConsumer consumer;
|
| - registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"),
|
| - ASCIIToUTF16("image/*"),
|
| - base::Bind(&ServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| - EXPECT_EQ(ASCIIToUTF16("image/png,image/jpg"), consumer.services_[0].type);
|
| -}
|
| -
|
| -TEST_F(WebIntentsRegistryTest, UnregisterDefaultIntentServicesForServiceURL) {
|
| -
|
| - const GURL service_url_0("http://jibfest.com/dozer");
|
| - const GURL service_url_1("http://kittyfizzer.com/fizz");
|
| -
|
| - DefaultWebIntentService s0;
|
| - s0.action = ASCIIToUTF16("share");
|
| - s0.type = ASCIIToUTF16("text/*");
|
| - // Values here are just dummies to test for preservation.
|
| - s0.user_date = 1;
|
| - s0.suppression = 4;
|
| - s0.service_url = service_url_0.spec();
|
| - registry_.RegisterDefaultIntentService(s0);
|
| -
|
| - DefaultWebIntentService s1;
|
| - s1.action = ASCIIToUTF16("whack");
|
| - s1.type = ASCIIToUTF16("text/*");
|
| - // Values here are just dummies to test for preservation.
|
| - s1.user_date = 1;
|
| - s1.suppression = 4;
|
| - s1.service_url = service_url_1.spec();
|
| - registry_.RegisterDefaultIntentService(s1);
|
| -
|
| - DefaultServiceListConsumer consumer;
|
| -
|
| - registry_.GetAllDefaultIntentServices(
|
| - base::Bind(&DefaultServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - ASSERT_EQ(2U, consumer.services_.size());
|
| -
|
| - registry_.UnregisterServiceDefaults(service_url_0);
|
| - MessageLoop::current()->RunUntilIdle();
|
| -
|
| - registry_.GetAllDefaultIntentServices(
|
| - base::Bind(&DefaultServiceListConsumer::Accept,
|
| - base::Unretained(&consumer)));
|
| -
|
| - consumer.WaitForData();
|
| -
|
| - ASSERT_EQ(1U, consumer.services_.size());
|
| - EXPECT_EQ(service_url_1.spec(), consumer.services_[0].service_url);
|
| -}
|
|
|