| 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)); | 
| -} | 
|  |