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

Side by Side Diff: chrome/common/extensions/extension_manifests_unittest.cc

Issue 9421010: Allow app launch URLs to be localized. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nit Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #if defined(TOOLKIT_GTK) 7 #if defined(TOOLKIT_GTK)
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #endif 9 #endif
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/file_path.h" 12 #include "base/file_path.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/i18n/rtl.h" 14 #include "base/i18n/rtl.h"
15 #include "base/json/json_value_serializer.h" 15 #include "base/json/json_value_serializer.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/path_service.h" 17 #include "base/path_service.h"
18 #include "base/string_number_conversions.h" 18 #include "base/string_number_conversions.h"
19 #include "base/string_util.h" 19 #include "base/string_util.h"
20 #include "base/stringprintf.h" 20 #include "base/stringprintf.h"
21 #include "base/utf_string_conversions.h" 21 #include "base/utf_string_conversions.h"
22 #include "chrome/common/chrome_paths.h" 22 #include "chrome/common/chrome_paths.h"
23 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/extensions/extension.h" 24 #include "chrome/common/extensions/extension.h"
25 #include "chrome/common/extensions/extension_action.h" 25 #include "chrome/common/extensions/extension_action.h"
26 #include "chrome/common/extensions/extension_constants.h" 26 #include "chrome/common/extensions/extension_constants.h"
27 #include "chrome/common/extensions/extension_error_utils.h" 27 #include "chrome/common/extensions/extension_error_utils.h"
28 #include "chrome/common/extensions/extension_l10n_util.h"
28 #include "chrome/common/extensions/file_browser_handler.h" 29 #include "chrome/common/extensions/file_browser_handler.h"
29 #include "chrome/common/extensions/url_pattern.h" 30 #include "chrome/common/extensions/url_pattern.h"
30 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
31 #include "ui/base/l10n/l10n_util.h" 32 #include "ui/base/l10n/l10n_util.h"
32 #include "webkit/glue/web_intent_service_data.h" 33 #include "webkit/glue/web_intent_service_data.h"
33 34
34 namespace { 35 namespace {
35 36
36 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { 37 static void AddPattern(URLPatternSet* extent, const std::string& pattern) {
37 int schemes = URLPattern::SCHEME_ALL; 38 int schemes = URLPattern::SCHEME_ALL;
38 extent->AddPattern(URLPattern(schemes, pattern)); 39 extent->AddPattern(URLPattern(schemes, pattern));
39 } 40 }
40 41
41 } 42 }
42 43
43 namespace errors = extension_manifest_errors; 44 namespace errors = extension_manifest_errors;
44 namespace keys = extension_manifest_keys; 45 namespace keys = extension_manifest_keys;
45 46
46 class ExtensionManifestTest : public testing::Test { 47 class ExtensionManifestTest : public testing::Test {
47 public: 48 public:
48 ExtensionManifestTest() : enable_apps_(true) {} 49 ExtensionManifestTest() : enable_apps_(true) {}
49 50
50 protected: 51 protected:
51 static DictionaryValue* LoadManifestFile(const std::string& filename, 52 static DictionaryValue* LoadManifestFile(const std::string& filename,
52 std::string* error) { 53 std::string* error) {
53 FilePath path; 54 FilePath extension_path;
54 PathService::Get(chrome::DIR_TEST_DATA, &path); 55 PathService::Get(chrome::DIR_TEST_DATA, &extension_path);
55 path = path.AppendASCII("extensions") 56 extension_path = extension_path.AppendASCII("extensions")
56 .AppendASCII("manifest_tests") 57 .AppendASCII("manifest_tests");
57 .AppendASCII(filename.c_str());
58 EXPECT_TRUE(file_util::PathExists(path)) <<
59 "Couldn't find " << path.value();
60 58
61 JSONFileValueSerializer serializer(path); 59 FilePath manifest_path = extension_path.AppendASCII(filename.c_str());
62 return static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error)); 60 EXPECT_TRUE(file_util::PathExists(manifest_path)) <<
61 "Couldn't find " << manifest_path.value();
62
63 JSONFileValueSerializer serializer(manifest_path);
64 DictionaryValue* manifest =
65 static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error));
66
67 // Most unit tests don't need localization, and they'll fail if we try to
68 // localize them, since their manifests don't have a default_locale key.
69 // Only localize manifests that indicate they want to be localized.
70 // Calling LocalizeExtension at this point mirrors
71 // extension_file_util::LoadExtension.
72 if (manifest && filename.find("localized") != std::string::npos)
73 extension_l10n_util::LocalizeExtension(extension_path, manifest, error);
74
75 return manifest;
63 } 76 }
64 77
65 // Helper class that simplifies creating methods that take either a filename 78 // Helper class that simplifies creating methods that take either a filename
66 // to a manifest or the manifest itself. 79 // to a manifest or the manifest itself.
67 class Manifest { 80 class Manifest {
68 public: 81 public:
69 // Purposely not marked explicit for convenience. The vast majority of 82 // Purposely not marked explicit for convenience. The vast majority of
70 // callers pass string literal. 83 // callers pass string literal.
71 Manifest(const char* name) 84 Manifest(const char* name)
72 : name_(name), manifest_(NULL) { 85 : name_(name), manifest_(NULL) {
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 439
427 TEST_F(ExtensionManifestTest, AppLaunchURL) { 440 TEST_F(ExtensionManifestTest, AppLaunchURL) {
428 LoadAndExpectError("launch_path_and_url.json", 441 LoadAndExpectError("launch_path_and_url.json",
429 errors::kLaunchPathAndURLAreExclusive); 442 errors::kLaunchPathAndURLAreExclusive);
430 LoadAndExpectError("launch_path_and_extent.json", 443 LoadAndExpectError("launch_path_and_extent.json",
431 errors::kLaunchPathAndExtentAreExclusive); 444 errors::kLaunchPathAndExtentAreExclusive);
432 LoadAndExpectError("launch_path_invalid_type.json", 445 LoadAndExpectError("launch_path_invalid_type.json",
433 errors::kInvalidLaunchLocalPath); 446 errors::kInvalidLaunchLocalPath);
434 LoadAndExpectError("launch_path_invalid_value.json", 447 LoadAndExpectError("launch_path_invalid_value.json",
435 errors::kInvalidLaunchLocalPath); 448 errors::kInvalidLaunchLocalPath);
449 LoadAndExpectError("launch_path_invalid_localized.json",
450 errors::kInvalidLaunchLocalPath);
436 LoadAndExpectError("launch_url_invalid_type_1.json", 451 LoadAndExpectError("launch_url_invalid_type_1.json",
437 errors::kInvalidLaunchWebURL); 452 errors::kInvalidLaunchWebURL);
438 LoadAndExpectError("launch_url_invalid_type_2.json", 453 LoadAndExpectError("launch_url_invalid_type_2.json",
439 errors::kInvalidLaunchWebURL); 454 errors::kInvalidLaunchWebURL);
440 LoadAndExpectError("launch_url_invalid_type_3.json", 455 LoadAndExpectError("launch_url_invalid_type_3.json",
441 errors::kInvalidLaunchWebURL); 456 errors::kInvalidLaunchWebURL);
457 LoadAndExpectError("launch_url_invalid_localized.json",
458 errors::kInvalidLaunchWebURL);
442 459
443 scoped_refptr<Extension> extension; 460 scoped_refptr<Extension> extension;
444 extension = LoadAndExpectSuccess("launch_local_path.json"); 461 extension = LoadAndExpectSuccess("launch_local_path.json");
445 EXPECT_EQ(extension->url().spec() + "launch.html", 462 EXPECT_EQ(extension->url().spec() + "launch.html",
446 extension->GetFullLaunchURL().spec()); 463 extension->GetFullLaunchURL().spec());
447 464
465 extension = LoadAndExpectSuccess("launch_local_path_localized.json");
466 EXPECT_EQ(extension->url().spec() + "launch.html",
467 extension->GetFullLaunchURL().spec());
468
448 LoadAndExpectError("launch_web_url_relative.json", 469 LoadAndExpectError("launch_web_url_relative.json",
449 errors::kInvalidLaunchWebURL); 470 errors::kInvalidLaunchWebURL);
450 471
451 extension = LoadAndExpectSuccess("launch_web_url_absolute.json"); 472 extension = LoadAndExpectSuccess("launch_web_url_absolute.json");
452 EXPECT_EQ(GURL("http://www.google.com/launch.html"), 473 EXPECT_EQ(GURL("http://www.google.com/launch.html"),
453 extension->GetFullLaunchURL()); 474 extension->GetFullLaunchURL());
475 extension = LoadAndExpectSuccess("launch_web_url_localized.json");
476 EXPECT_EQ(GURL("http://www.google.com/launch.html"),
477 extension->GetFullLaunchURL());
454 } 478 }
455 479
456 TEST_F(ExtensionManifestTest, Override) { 480 TEST_F(ExtensionManifestTest, Override) {
457 LoadAndExpectError("override_newtab_and_history.json", 481 LoadAndExpectError("override_newtab_and_history.json",
458 errors::kMultipleOverrides); 482 errors::kMultipleOverrides);
459 LoadAndExpectError("override_invalid_page.json", 483 LoadAndExpectError("override_invalid_page.json",
460 errors::kInvalidChromeURLOverrides); 484 errors::kInvalidChromeURLOverrides);
461 485
462 scoped_refptr<Extension> extension; 486 scoped_refptr<Extension> extension;
463 487
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 EXPECT_EQ("", extension->page_action()->id()); 1002 EXPECT_EQ("", extension->page_action()->id());
979 EXPECT_EQ(0u, extension->page_action()->icon_paths()->size()); 1003 EXPECT_EQ(0u, extension->page_action()->icon_paths()->size());
980 EXPECT_EQ("", extension->page_action()->GetTitle( 1004 EXPECT_EQ("", extension->page_action()->GetTitle(
981 ExtensionAction::kDefaultTabId)); 1005 ExtensionAction::kDefaultTabId));
982 EXPECT_FALSE(extension->page_action()->HasPopup( 1006 EXPECT_FALSE(extension->page_action()->HasPopup(
983 ExtensionAction::kDefaultTabId)); 1007 ExtensionAction::kDefaultTabId));
984 1008
985 LoadAndExpectError("page_action_manifest_version_2b.json", 1009 LoadAndExpectError("page_action_manifest_version_2b.json",
986 errors::kInvalidPageActionPopup); 1010 errors::kInvalidPageActionPopup);
987 } 1011 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698