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

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

Issue 8424005: Loosen error reporting for hosted app permissions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: moar test Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 for (ExtensionAPIPermissionSet::iterator i = api_perms.begin(); 633 for (ExtensionAPIPermissionSet::iterator i = api_perms.begin();
634 i != api_perms.end(); ++i) { 634 i != api_perms.end(); ++i) {
635 if (*i == ExtensionAPIPermission::kExperimental) 635 if (*i == ExtensionAPIPermission::kExperimental)
636 continue; 636 continue;
637 637
638 ExtensionAPIPermission* permission = info->GetByID(*i); 638 ExtensionAPIPermission* permission = info->GetByID(*i);
639 const char* name = permission->name(); 639 const char* name = permission->name();
640 StringValue* p = new StringValue(name); 640 StringValue* p = new StringValue(name);
641 permissions->Clear(); 641 permissions->Clear();
642 permissions->Append(p); 642 permissions->Append(p);
643 Extension::Location location = Extension::INTERNAL;
644 643
645 // Many permissions are not available to hosted apps. 644 // Some permissions are only available to component hosted apps.
646 if (!permission->is_hosted_app() || permission->is_component_only()) { 645 if (permission->is_component_only()) {
647 LoadAndExpectError(Manifest(manifest.get(), name), 646 LoadAndExpectError(Manifest(manifest.get(), name),
648 errors::kPermissionNotAllowed); 647 errors::kPermissionNotAllowed,
648 Extension::INTERNAL);
649 scoped_refptr<Extension> extension(
650 LoadAndExpectSuccess(Manifest(manifest.get(), name),
651 Extension::COMPONENT));
652 EXPECT_TRUE(extension->GetActivePermissions()->HasAPIPermission(
653 permission->id()));
649 654
650 // ... unless the hosted app is a component app. 655 } else if (!permission->is_hosted_app()) {
651 location = Extension::COMPONENT; 656 // Most normal extension permissions also aren't available to hosted apps.
657 // For these, the error is only reported in strict mode for legacy
658 // reasons: crbug.com/101993.
659 LoadAndExpectError(Manifest(manifest.get(), name),
660 errors::kPermissionNotAllowed,
661 Extension::INTERNAL,
662 Extension::STRICT_ERROR_CHECKS);
663 scoped_refptr<Extension> extension(
664 LoadAndExpectSuccess(Manifest(manifest.get(), name),
665 Extension::INTERNAL));
666 EXPECT_FALSE(extension->GetActivePermissions()->HasAPIPermission(
667 permission->id()));
668
669 // These permissions are also allowed for component hosted apps.
670 extension = LoadAndExpectSuccess(Manifest(manifest.get(), name),
671 Extension::COMPONENT);
672 EXPECT_TRUE(extension->GetActivePermissions()->HasAPIPermission(
673 permission->id()));
674
675 } else {
676 scoped_refptr<Extension> extension(
677 LoadAndExpectSuccess(Manifest(manifest.get(), name)));
678 EXPECT_TRUE(extension->GetActivePermissions()->HasAPIPermission(
679 permission->id()));
652 } 680 }
653
654 LoadAndExpectSuccess(Manifest(manifest.get(), name), location);
655 } 681 }
656 } 682 }
657 683
658 TEST_F(ExtensionManifestTest, ComponentOnlyPermission) { 684 TEST_F(ExtensionManifestTest, ComponentOnlyPermission) {
659 std::string error; 685 std::string error;
660 scoped_ptr<DictionaryValue> manifest( 686 scoped_ptr<DictionaryValue> manifest(
661 LoadManifestFile("init_valid_minimal.json", &error)); 687 LoadManifestFile("init_valid_minimal.json", &error));
662 ASSERT_TRUE(manifest.get()); 688 ASSERT_TRUE(manifest.get());
663 ListValue* permissions = new ListValue(); 689 ListValue* permissions = new ListValue();
664 manifest->Set("permissions", permissions); 690 manifest->Set("permissions", permissions);
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 scoped_refptr<Extension> extension_2( 953 scoped_refptr<Extension> extension_2(
928 LoadAndExpectSuccess("offline_disabled_packaged_app.json")); 954 LoadAndExpectSuccess("offline_disabled_packaged_app.json"));
929 EXPECT_FALSE(extension_2->offline_enabled()); 955 EXPECT_FALSE(extension_2->offline_enabled());
930 scoped_refptr<Extension> extension_3( 956 scoped_refptr<Extension> extension_3(
931 LoadAndExpectSuccess("offline_default_packaged_app.json")); 957 LoadAndExpectSuccess("offline_default_packaged_app.json"));
932 EXPECT_FALSE(extension_3->offline_enabled()); 958 EXPECT_FALSE(extension_3->offline_enabled());
933 scoped_refptr<Extension> extension_4( 959 scoped_refptr<Extension> extension_4(
934 LoadAndExpectSuccess("offline_enabled_hosted_app.json")); 960 LoadAndExpectSuccess("offline_enabled_hosted_app.json"));
935 EXPECT_TRUE(extension_4->offline_enabled()); 961 EXPECT_TRUE(extension_4->offline_enabled());
936 } 962 }
OLDNEW
« chrome/common/extensions/extension.cc ('K') | « chrome/common/extensions/extension.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698