| Index: chrome/browser/intents/cws_intents_registry_unittest.cc
|
| diff --git a/chrome/browser/intents/cws_intents_registry_unittest.cc b/chrome/browser/intents/cws_intents_registry_unittest.cc
|
| deleted file mode 100644
|
| index bc095760788b6172f079602e111ef740516f5a65..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/intents/cws_intents_registry_unittest.cc
|
| +++ /dev/null
|
| @@ -1,275 +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 "chrome/browser/intents/cws_intents_registry.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/common/extensions/extension_l10n_util.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -// Create a CWSIntentsRegistry proxy for testing purposes.
|
| -// Needs to be non-anonymous so it can be friended.
|
| -class CWSIntentsRegistryForTest {
|
| -public:
|
| - CWSIntentsRegistryForTest() : registry_(NULL) {}
|
| - ~CWSIntentsRegistryForTest() { delete registry_; }
|
| -
|
| - void reset(net::URLRequestContextGetter* context) {
|
| - delete registry_;
|
| - registry_ = new CWSIntentsRegistry(context);
|
| - }
|
| -
|
| - CWSIntentsRegistry* operator->() { return registry_; }
|
| -
|
| -private:
|
| - CWSIntentsRegistry* registry_;
|
| -};
|
| -
|
| -namespace {
|
| -
|
| -const char kCWSResponseInvalid[] =
|
| - "{\"error\":{"
|
| - "\"errors\":[{"
|
| - "\"domain\":\"global\","
|
| - "\"reason\":\"invalid\","
|
| - "\"message\":\"Invalid mimetype:foo\"}],"
|
| - "\"code\":400,"
|
| - "\"message\":\"Invalid mimetype:foo\"}}\"";
|
| -
|
| -const char kCWSResponseValid[] =
|
| - "{\"kind\":\"chromewebstore#itemList\","
|
| - " \"total_items\":1,"
|
| - " \"start_index\":0,"
|
| - " \"items\":[ "
|
| - " {\"kind\":\"chromewebstore#item\","
|
| - " \"id\":\"nhkckhebbbncbkefhcpcgepcgfaclehe\","
|
| - " \"type\":\"APPLICATION\","
|
| - " \"num_ratings\":0,"
|
| - " \"average_rating\":0.0,"
|
| - " \"manifest\":\"{\\n\\\"update_url\\\":\\"
|
| - "\"http://0.tbhome_staging.dserver.download-qa.td.borg.google.com/"
|
| - "service/update2/crx\\\",\\n \\\"name\\\": \\\"Sidd's Intent App\\\""
|
| - ",\\n \\\"description\\\": \\\"Do stuff\\\",\\n \\\"version\\\": "
|
| - "\\\"1.2.19\\\",\\n \\\"app\\\": {\\n \\\"urls\\\": [ \\n ],"
|
| - "\\n \\\"launch\\\": {\\n \\\"web_url\\\": \\"
|
| - "\"http://siddharthasaha.net/\\\"\\n }\\n },\\n \\\"icons\\\": "
|
| - "{\\n \\\"128\\\": \\\"icon128.png\\\"\\n },\\n \\\"permissions\\\":"
|
| - " [\\n \\\"unlimitedStorage\\\",\\n \\\"notifications\\\"\\n ],\\n"
|
| - " \\\"intents\\\": {\\n \\\"http://webintents.org/edit\\\" : {\\n "
|
| - "\\\"type\\\" : [\\\"image/png\\\", \\\"image/jpg\\\"],\\n \\\"path\\"
|
| - "\" : \\\"//services/edit\\\",\\n \\\"title\\\" : "
|
| - "\\\"Sample Editing Intent\\\",\\n \\\"disposition\\\" : \\\"inline\\"
|
| - "\"\\n },\\n \\\"http://webintents.org/share\\\" : "
|
| - "{\\n \\\"type\\\" : [\\\"text/plain\\\", \\\"image/jpg\\\"],"
|
| - "\\n \\\"path\\\" : \\\"//services/share\\\",\\n \\\"title\\\" : "
|
| - "\\\"Sample sharing Intent\\\",\\n \\\"disposition\\\" : "
|
| - "\\\"inline\\\"\\n }\\n }\\n}\\n\","
|
| - " \"family_safe\":true,"
|
| - " \"icon_url\":\"http://qa-lighthouse.sandbox.google.com/image/"
|
| - "QzPnRCYCBbBGI99ZkGxkp-NNJ488IkkiTyCgynFEeDTJHcw4tHl3csmjTQ\"}]}";
|
| -
|
| -const char kCWSResponseValidL10n[] =
|
| - "{\"kind\":\"chromewebstore#itemList\","
|
| - " \"total_items\":1,"
|
| - " \"start_index\":0,"
|
| - " \"items\":[ "
|
| - " {\"kind\":\"chromewebstore#item\","
|
| - " \"id\":\"nhkckhebbbncbkefhcpcgepcgfaclehe\","
|
| - " \"type\":\"APPLICATION\","
|
| - " \"num_ratings\":0,"
|
| - " \"average_rating\":0.0,"
|
| - " \"manifest\":\"{\\n\\\"update_url\\\":\\"
|
| - "\"http://0.tbhome_staging.dserver.download-qa.td.borg.google.com/"
|
| - "service/update2/crx\\\",\\n \\\"name\\\": \\\"__MSG_name__\\\""
|
| - ",\\n \\\"description\\\": \\\"Do stuff\\\",\\n \\\"version\\\": "
|
| - "\\\"1.2.19\\\",\\n \\\"app\\\": {\\n \\\"urls\\\": [ \\n ],"
|
| - "\\n \\\"launch\\\": {\\n \\\"web_url\\\": \\"
|
| - "\"http://siddharthasaha.net/\\\"\\n }\\n },\\n \\\"icons\\\": "
|
| - "{\\n \\\"128\\\": \\\"icon128.png\\\"\\n },\\n \\\"permissions\\\":"
|
| - " [\\n \\\"unlimitedStorage\\\",\\n \\\"notifications\\\"\\n ],\\n"
|
| - " \\\"intents\\\": {\\n \\\"http://webintents.org/edit\\\" : {\\n "
|
| - "\\\"type\\\" : [\\\"image/png\\\", \\\"image/jpg\\\"],\\n \\\"path\\"
|
| - "\" : \\\"//services/edit\\\",\\n \\\"title\\\" : "
|
| - "\\\"Sample Editing Intent\\\",\\n \\\"disposition\\\" : \\\"inline\\"
|
| - "\"\\n },\\n \\\"http://webintents.org/share\\\" : "
|
| - "{\\n \\\"type\\\" : [\\\"text/plain\\\", \\\"image/jpg\\\"],"
|
| - "\\n \\\"path\\\" : \\\"//services/share\\\",\\n \\\"title\\\" : "
|
| - "\\\"Sample sharing Intent\\\",\\n \\\"disposition\\\" : "
|
| - "\\\"inline\\\"\\n }\\n }\\n}\\n\","
|
| - " \"family_safe\":true,"
|
| - " \"icon_url\":\"http://qa-lighthouse.sandbox.google.com/image/"
|
| - "QzPnRCYCBbBGI99ZkGxkp-NNJ488IkkiTyCgynFEeDTJHcw4tHl3csmjTQ\","
|
| - "\"locale_data\": [";
|
| -
|
| -const char kCWSResponseValidL10nPostfix[] =
|
| -"]}]}";
|
| -
|
| -const char kLocaleDataEn[] =
|
| - "{"
|
| - " \"locale_string\": \"en\","
|
| - " \"title\": \"Localized EN\""
|
| - "}";
|
| -
|
| -const char kLocaleDataDe[] =
|
| - "{"
|
| - " \"locale_string\": \"de\","
|
| - " \"title\": \"Localized DE\""
|
| - "}";
|
| -
|
| -const char kLocaleDataAll[] =
|
| - "{"
|
| - " \"locale_string\": \"all\","
|
| - " \"title\": \"Localized ALL\""
|
| - "}";
|
| -
|
| -const char kValidIconURL[] =
|
| - "http://qa-lighthouse.sandbox.google.com/image/"
|
| - "QzPnRCYCBbBGI99ZkGxkp-NNJ488IkkiTyCgynFEeDTJHcw4tHl3csmjTQ";
|
| -
|
| -const char kValidManifest[] =
|
| - "{\n\"update_url\":\"http://0.tbhome_staging.dserver.download-qa.td.borg."
|
| - "google.com/service/update2/crx\",\n \"name\": \"Sidd's Intent App\",\n"
|
| - " \"description\": \"Do stuff\",\n \"version\": \"1.2.19\",\n \"app\":"
|
| - " {\n \"urls\": [ \n ],\n \"launch\": {\n \"web_url\":"
|
| - " \"http://siddharthasaha.net/\"\n }\n },\n \"icons\": {\n "
|
| - "\"128\": \"icon128.png\"\n },\n \"permissions\": [\n "
|
| - "\"unlimitedStorage\",\n \"notifications\"\n ],\n \"intents\": "
|
| - "{\n \"http://webintents.org/edit\" : {\n \"type\" : ["
|
| - "\"image/png\", \"image/jpg\"],\n \"path\" : \"//services/edit\",\n"
|
| - " \"title\" : \"Sample Editing Intent\",\n \"disposition\" : "
|
| - "\"inline\"\n },\n \"http://webintents.org/share\" : {\n "
|
| - "\"type\" : [\"text/plain\", \"image/jpg\"],\n \"path\" : "
|
| - "\"//services/share\",\n \"title\" : \"Sample sharing Intent\",\n"
|
| - " \"disposition\" : \"inline\"\n }\n }\n}\n";
|
| -
|
| -const char kEditAction[] = "http://webintents.org/edit";
|
| -const char kImagePngType[] = "image/png";
|
| -
|
| -class CWSIntentsRegistryTest : public testing::Test {
|
| - public:
|
| - virtual void SetUp() {
|
| - scoped_refptr<net::TestURLRequestContextGetter> context_getter(
|
| - new net::TestURLRequestContextGetter(ui_loop_.message_loop_proxy()));
|
| - registry_.reset(context_getter);
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - // Pump messages posted by the main thread.
|
| - ui_loop_.RunUntilIdle();
|
| - }
|
| -
|
| - CWSIntentsRegistry::IntentExtensionList WaitForResults() {
|
| - ui_loop_.RunUntilIdle();
|
| - return extensions_;
|
| - }
|
| -
|
| - void Callback(const CWSIntentsRegistry::IntentExtensionList& extensions) {
|
| - extensions_ = extensions;
|
| - }
|
| -
|
| - void RunRequest(const std::string& action, const std::string& mime,
|
| - const std::string& response) {
|
| - extensions_.clear();
|
| -
|
| - net::FakeURLFetcherFactory test_factory;
|
| - test_factory.SetFakeResponse(
|
| - CWSIntentsRegistry::BuildQueryURL(
|
| - ASCIIToUTF16(action),ASCIIToUTF16(mime)).spec(),
|
| - response, true);
|
| -
|
| - registry_->GetIntentServices(ASCIIToUTF16(action),
|
| - ASCIIToUTF16(mime),
|
| - base::Bind(&CWSIntentsRegistryTest::Callback,
|
| - base::Unretained(this)));
|
| - WaitForResults();
|
| - }
|
| -
|
| -
|
| - protected:
|
| - // UI loop MUST be declared first, (and thus destroyed last) to allow posted
|
| - // DeleteSoon() for e.g.TestURLRequestContextGetter.
|
| - MessageLoop ui_loop_;
|
| - CWSIntentsRegistryForTest registry_;
|
| - CWSIntentsRegistry::IntentExtensionList extensions_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(CWSIntentsRegistryTest, ValidQuery) {
|
| - RunRequest(kEditAction, kImagePngType,kCWSResponseValid);
|
| - ASSERT_EQ(1UL, extensions_.size());
|
| -
|
| - EXPECT_EQ(0, extensions_[0].num_ratings);
|
| - EXPECT_EQ(0.0, extensions_[0].average_rating);
|
| - EXPECT_EQ(std::string(kValidManifest), UTF16ToUTF8(extensions_[0].manifest));
|
| - EXPECT_EQ(std::string("nhkckhebbbncbkefhcpcgepcgfaclehe"), extensions_[0].id);
|
| - EXPECT_EQ(std::string("Sidd's Intent App"),
|
| - UTF16ToUTF8(extensions_[0].name));
|
| - EXPECT_EQ(std::string(kValidIconURL), extensions_[0].icon_url.spec());
|
| -}
|
| -
|
| -TEST_F(CWSIntentsRegistryTest, InvalidQuery) {
|
| - RunRequest("foo", "foo",kCWSResponseInvalid);
|
| - EXPECT_EQ(0UL, extensions_.size());
|
| -}
|
| -
|
| -TEST_F(CWSIntentsRegistryTest, BuildQueryURL) {
|
| - const std::string kExpectedURL = "https://www.googleapis.com"
|
| - "/chromewebstore/v1.1b/items/intent"
|
| - "?intent=action&mime_types=mime%2Ftype&start_index=0&num_results=15";
|
| - GURL url = CWSIntentsRegistry::BuildQueryURL(ASCIIToUTF16("action"),
|
| - ASCIIToUTF16("mime/type"));
|
| -
|
| - EXPECT_EQ(kExpectedURL, url.spec().substr(0, kExpectedURL.size()));
|
| -}
|
| -
|
| -// Test for match to the application locale - i.e. if running in "en",
|
| -// registry will use locale_data for "en" key, with or without "all"
|
| -// locale_data present.
|
| -TEST_F(CWSIntentsRegistryTest, LocalizeMatchingLocale) {
|
| - extension_l10n_util::ScopedLocaleForTest restoreLocaleOnExit;
|
| -
|
| - std::string response = kCWSResponseValidL10n;
|
| - response += kLocaleDataEn + std::string(",");
|
| - response += kLocaleDataAll + std::string(",");
|
| - response += kLocaleDataDe;
|
| - response += kCWSResponseValidL10nPostfix;
|
| -
|
| - // Picks the proper locale_data based on application locale.
|
| - extension_l10n_util::SetProcessLocale("en");
|
| - RunRequest(kEditAction, kImagePngType, response);
|
| - ASSERT_EQ(1UL, extensions_.size());
|
| - EXPECT_EQ(std::string("Localized EN"),
|
| - UTF16ToUTF8(extensions_[0].name));
|
| -
|
| - extension_l10n_util::SetProcessLocale("de");
|
| - RunRequest(kEditAction, kImagePngType, response);
|
| - ASSERT_EQ(1UL, extensions_.size());
|
| - EXPECT_EQ(std::string("Localized DE"),
|
| - UTF16ToUTF8(extensions_[0].name));
|
| -
|
| - // Falls back to locale_data for "All" if unknown application locale.
|
| - extension_l10n_util::SetProcessLocale("fr");
|
| - RunRequest(kEditAction, kImagePngType, std::string(kCWSResponseValidL10n) +
|
| - kLocaleDataAll + kCWSResponseValidL10nPostfix);
|
| - ASSERT_EQ(1UL, extensions_.size());
|
| - EXPECT_EQ(std::string("Localized ALL"),
|
| - UTF16ToUTF8(extensions_[0].name));
|
| -
|
| - // Keeps original content if unknown application locale and no "all"
|
| - // localization data exists.
|
| - response = kCWSResponseValidL10n;
|
| - response += kLocaleDataEn;
|
| - response += kCWSResponseValidL10nPostfix;
|
| - extension_l10n_util::SetProcessLocale("de");
|
| - RunRequest(kEditAction, kImagePngType, response);
|
| - ASSERT_EQ(1UL, extensions_.size());
|
| - EXPECT_EQ(std::string("__MSG_name__"),
|
| - UTF16ToUTF8(extensions_[0].name));
|
| -}
|
|
|