Index: chrome/browser/chrome_content_browser_client.cc |
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc |
index 1186cca10118db9dbc0bf552a093e79395e99d65..05bf455ff58a84aeaad44ed874c8c47a6232cc97 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -79,6 +79,7 @@ |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/extensions/extension_process_policy.h" |
#include "chrome/common/extensions/extension_set.h" |
+#include "chrome/common/extensions/permissions/socket_permission.h" |
#include "chrome/common/logging_chrome.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/render_messages.h" |
@@ -392,6 +393,34 @@ int GetCrashSignalFD(const CommandLine& command_line) { |
} |
#endif // defined(OS_POSIX) && !defined(OS_MACOSX) |
+extensions::SocketPermission::CheckParam ConvertSocketPermissions( |
+ const content::ContentBrowserClient::SocketPermissionParam& params) { |
+ extensions::SocketPermissionData::OperationType type = |
+ extensions::SocketPermissionData::NONE; |
+ switch (params.type) { |
+ case content::ContentBrowserClient::SocketPermissionParam::TCP_CONNECT: |
+ type = extensions::SocketPermissionData::TCP_CONNECT; |
+ break; |
+ |
+ case content::ContentBrowserClient::SocketPermissionParam::TCP_LISTEN: |
+ type = extensions::SocketPermissionData::TCP_LISTEN; |
+ break; |
+ |
+ case content::ContentBrowserClient::SocketPermissionParam::UDP_BIND: |
+ type = extensions::SocketPermissionData::UDP_BIND; |
+ break; |
+ |
+ case content::ContentBrowserClient::SocketPermissionParam::UDP_SEND_TO: |
+ type = extensions::SocketPermissionData::UDP_SEND_TO; |
+ break; |
+ |
+ default: |
+ NOTREACHED(); |
+ } |
+ return extensions::SocketPermission::CheckParam( |
+ type, params.host, params.port); |
+} |
+ |
} // namespace |
namespace chrome { |
@@ -1699,7 +1728,9 @@ void ChromeContentBrowserClient::DidCreatePpapiPlugin( |
} |
bool ChromeContentBrowserClient::AllowPepperSocketAPI( |
- content::BrowserContext* browser_context, const GURL& url) { |
+ content::BrowserContext* browser_context, |
+ const GURL& url, |
+ const SocketPermissionParam& params) { |
if (!url.is_valid()) |
return false; |
@@ -1735,7 +1766,10 @@ bool ChromeContentBrowserClient::AllowPepperSocketAPI( |
if (!extension) |
return false; |
- if (extension->HasAPIPermission(APIPermission::kSocket)) |
+ extensions::SocketPermission::CheckParam extension_params = |
+ ConvertSocketPermissions(params); |
+ if (extension->CheckAPIPermissionWithParam(APIPermission::kSocket, |
+ &extension_params)) |
return true; |
return false; |