Index: chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc |
diff --git a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc |
index 4065c34e767debeba2be3093ea56473dd5a53245..f48ca7faec4df9f027867bdfb1d7c794a6c5b1a9 100644 |
--- a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc |
+++ b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos_unittest.cc |
@@ -13,7 +13,13 @@ |
#include "extensions/common/extension.h" |
#include "extensions/common/manifest.h" |
#include "extensions/common/manifest_constants.h" |
+#include "extensions/common/permissions/api_permission.h" |
+#include "extensions/common/permissions/api_permission_set.h" |
+#include "extensions/common/permissions/manifest_permission.h" |
+#include "extensions/common/permissions/manifest_permission_set.h" |
#include "extensions/common/permissions/permission_set.h" |
+#include "extensions/common/url_pattern.h" |
+#include "extensions/common/url_pattern_set.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace extensions { |
@@ -23,6 +29,51 @@ namespace { |
const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch"; |
const char kBogusId[] = "bogus"; |
+// TODO(isandrk, crbug.com/715638): Extract MockManifestPermission into its own |
+// file (since it's duplicated in two places). |
+class MockManifestPermission : public ManifestPermission { |
+ public: |
+ MockManifestPermission(const std::string& name) |
+ : name_(name) { |
+ } |
+ |
+ std::string name() const override { return name_; } |
+ |
+ std::string id() const override { return name(); } |
+ |
+ PermissionIDSet GetPermissions() const override { return PermissionIDSet(); } |
+ |
+ bool FromValue(const base::Value* value) override { return true; } |
+ |
+ std::unique_ptr<base::Value> ToValue() const override { |
+ return base::MakeUnique<base::Value>(); |
+ } |
+ |
+ ManifestPermission* Diff(const ManifestPermission* rhs) const override { |
+ const MockManifestPermission* other = |
+ static_cast<const MockManifestPermission*>(rhs); |
+ EXPECT_EQ(name_, other->name_); |
+ return NULL; |
+ } |
+ |
+ ManifestPermission* Union(const ManifestPermission* rhs) const override { |
+ const MockManifestPermission* other = |
+ static_cast<const MockManifestPermission*>(rhs); |
+ EXPECT_EQ(name_, other->name_); |
+ return new MockManifestPermission(name_); |
+ } |
+ |
+ ManifestPermission* Intersect(const ManifestPermission* rhs) const override { |
+ const MockManifestPermission* other = |
+ static_cast<const MockManifestPermission*>(rhs); |
+ EXPECT_EQ(name_, other->name_); |
+ return new MockManifestPermission(name_); |
+ } |
+ |
+ private: |
+ std::string name_; |
+}; |
+ |
scoped_refptr<Extension> CreateExtension(const std::string& id) { |
std::string error; |
base::DictionaryValue manifest; |
@@ -38,14 +89,23 @@ scoped_refptr<Extension> CreateExtension(const std::string& id) { |
return extension; |
} |
-std::unique_ptr<const PermissionSet> CreatePermissions() { |
+std::unique_ptr<const PermissionSet> CreatePermissions( |
+ bool include_clipboard = true) { |
APIPermissionSet apis; |
apis.insert(APIPermission::kAudio); |
- apis.insert(APIPermission::kClipboardRead); |
apis.insert(APIPermission::kFullscreen); |
+ if (include_clipboard) |
+ apis.insert(APIPermission::kClipboardRead); |
+ ManifestPermissionSet manifest; |
+ manifest.insert(new MockManifestPermission("author")); |
+ manifest.insert(new MockManifestPermission("background")); |
+ URLPatternSet explicit_hosts({ |
+ URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/*"), |
+ URLPattern(URLPattern::SCHEME_ALL, "<all_urls>")}); |
+ URLPatternSet scriptable_hosts({ |
+ URLPattern(URLPattern::SCHEME_ALL, "http://www.wikipedia.com/*")}); |
auto permissions = base::MakeUnique<const PermissionSet>( |
- apis, ManifestPermissionSet(), |
- URLPatternSet(), URLPatternSet()); |
+ apis, manifest, explicit_hosts, scriptable_hosts); |
return permissions; |
} |
@@ -83,13 +143,12 @@ TEST(PermissionsUpdaterDelegateChromeOSTest, |
delegate.InitializePermissions(extension.get(), &granted_permissions); |
EXPECT_EQ(*CreatePermissions(), *granted_permissions); |
- // Bogus extension ID (never whitelisted), ClipboardRead filtered out. |
+ // Bogus extension ID (never whitelisted), ClipboardRead filtered out, |
+ // everything else stays. |
extension = CreateExtension(kBogusId); |
granted_permissions = CreatePermissions(); |
delegate.InitializePermissions(extension.get(), &granted_permissions); |
- EXPECT_FALSE(granted_permissions->HasAPIPermission( |
- APIPermission::kClipboardRead)); |
- EXPECT_EQ(2u, granted_permissions->apis().size()); |
+ EXPECT_EQ(*CreatePermissions(false), *granted_permissions); |
// Reset state at the end of test. |
chromeos::LoginState::Shutdown(); |