Index: chrome/common/extensions/extension_unittest.cc |
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc |
index 6ffccba2a5a0fcd846a8aec801a23cc7e1294abd..9798bbdae6b0e2245cb56f89caec710149271177 100644 |
--- a/chrome/common/extensions/extension_unittest.cc |
+++ b/chrome/common/extensions/extension_unittest.cc |
@@ -19,8 +19,10 @@ |
#include "chrome/common/extensions/extension_file_util.h" |
#include "chrome/common/extensions/extension_manifest_constants.h" |
#include "chrome/common/extensions/extension_resource.h" |
+#include "chrome/common/extensions/features/feature.h" |
#include "chrome/common/extensions/permissions/api_permission.h" |
#include "chrome/common/extensions/permissions/permission_set.h" |
+#include "chrome/common/extensions/permissions/socket_permission.h" |
#include "chrome/common/url_constants.h" |
#include "googleurl/src/gurl.h" |
#include "net/base/mime_sniffer.h" |
@@ -30,9 +32,13 @@ |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "ui/gfx/codec/png_codec.h" |
+using extensions::APIPermission; |
using extensions::APIPermissionSet; |
using extensions::Extension; |
+using extensions::Feature; |
using extensions::PermissionSet; |
+using extensions::SocketPermission; |
+using extensions::SocketPermissionData; |
namespace keys = extension_manifest_keys; |
namespace values = extension_manifest_values; |
@@ -444,6 +450,48 @@ TEST(ExtensionTest, EffectiveHostPermissions) { |
EXPECT_TRUE(extension->HasEffectiveAccessToAllHosts()); |
} |
+static bool CheckSocketPermission(scoped_refptr<Extension> extension, |
+ SocketPermissionData::OperationType type, |
+ const char* host, |
+ int port) { |
+ SocketPermission::CheckParam param(type, host, port); |
+ return extension->CheckAPIPermissionWithDetail( |
+ APIPermission::kSocket, ¶m); |
+} |
+ |
+TEST(ExtensionTest, SocketPermissions) { |
+ // Set feature current channel to appropriate value. |
+ Feature::ScopedCurrentChannel scoped_channel( |
+ chrome::VersionInfo::GetChannel()); |
+ scoped_refptr<Extension> extension; |
+ std::string error; |
+ |
+ extension = LoadManifest("socket_permissions", "empty.json"); |
+ EXPECT_FALSE(CheckSocketPermission( |
+ extension, SocketPermissionData::TCP_CONNECT, "www.example.com", 80)); |
+ |
+ extension = LoadManifestUnchecked("socket_permissions", |
+ "socket1.json", |
+ Extension::INTERNAL, Extension::NO_FLAGS, |
+ &error); |
+ EXPECT_TRUE(extension == NULL); |
+ ASSERT_EQ(ExtensionErrorUtils::FormatErrorMessage( |
+ errors::kInvalidPermission, base::IntToString(0)), error); |
+ |
+ extension = LoadManifest("socket_permissions", "socket2.json"); |
+ EXPECT_TRUE(CheckSocketPermission( |
+ extension, SocketPermissionData::TCP_CONNECT, "www.example.com", 80)); |
+ EXPECT_FALSE(CheckSocketPermission( |
+ extension, SocketPermissionData::UDP_BIND, "", 80)); |
+ EXPECT_TRUE(CheckSocketPermission( |
+ extension, SocketPermissionData::UDP_BIND, "", 8888)); |
+ |
+ EXPECT_FALSE(CheckSocketPermission( |
+ extension, SocketPermissionData::UDP_SEND_TO, "example.com", 1900)); |
+ EXPECT_TRUE(CheckSocketPermission( |
+ extension, SocketPermissionData::UDP_SEND_TO, "239.255.255.250", 1900)); |
+} |
+ |
// Returns a copy of |source| resized to |size| x |size|. |
static SkBitmap ResizedCopy(const SkBitmap& source, int size) { |
return skia::ImageOperations::Resize(source, |