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..3923f796ba8ca96b9113b328b6db628e97b88ad4 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,49 @@ namespace { |
const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch"; |
const char kBogusId[] = "bogus"; |
+class MockManifestPermission : public ManifestPermission { |
Ivan Šandrk
2017/04/26 13:25:02
I've c/p-ed this from manifest_permission_set_unit
Devlin
2017/04/26 14:58:26
That would work. Another option would be to just
Ivan Šandrk
2017/04/26 17:04:43
TODO it is.
|
+ 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; |
@@ -43,9 +92,16 @@ std::unique_ptr<const PermissionSet> CreatePermissions() { |
apis.insert(APIPermission::kAudio); |
apis.insert(APIPermission::kClipboardRead); |
apis.insert(APIPermission::kFullscreen); |
+ 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 +139,18 @@ 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()); |
+ APIPermissionSet apis; |
+ apis.insert(APIPermission::kClipboardRead); |
+ auto expected_permissions = PermissionSet::CreateDifference( |
Devlin
2017/04/26 14:58:26
nitty nit: This mirrors the code a bit too much. :
Ivan Šandrk
2017/04/26 17:04:44
Good point about the mirroring, I actually had a w
Devlin
2017/04/26 18:34:52
We *used* to have strong rules about not allowing
|
+ *CreatePermissions(), |
+ PermissionSet(apis, ManifestPermissionSet(), |
+ URLPatternSet(), URLPatternSet())); |
+ EXPECT_EQ(*expected_permissions, *granted_permissions); |
// Reset state at the end of test. |
chromeos::LoginState::Shutdown(); |