| Index: chrome/common/extensions/api/sockets/sockets_manifest_permission.cc
|
| diff --git a/chrome/common/extensions/api/sockets/sockets_manifest_permission.cc b/chrome/common/extensions/api/sockets/sockets_manifest_permission.cc
|
| deleted file mode 100644
|
| index 143ec9b67849edd44980110df7add9f95dbb6aa8..0000000000000000000000000000000000000000
|
| --- a/chrome/common/extensions/api/sockets/sockets_manifest_permission.cc
|
| +++ /dev/null
|
| @@ -1,369 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/common/extensions/api/sockets/sockets_manifest_permission.h"
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/common/extensions/api/manifest_types.h"
|
| -#include "chrome/common/extensions/api/sockets/sockets_manifest_data.h"
|
| -#include "extensions/common/error_utils.h"
|
| -#include "extensions/common/extension_messages.h"
|
| -#include "extensions/common/manifest_constants.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "ipc/ipc_message.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace sockets_errors {
|
| -const char kErrorInvalidHostPattern[] = "Invalid host:port pattern '*'";
|
| -}
|
| -
|
| -namespace errors = sockets_errors;
|
| -using api::manifest_types::Sockets;
|
| -using api::manifest_types::SocketHostPatterns;
|
| -using content::SocketPermissionRequest;
|
| -
|
| -namespace {
|
| -
|
| -static bool ParseHostPattern(
|
| - SocketsManifestPermission* permission,
|
| - content::SocketPermissionRequest::OperationType operation_type,
|
| - const std::string& host_pattern,
|
| - base::string16* error) {
|
| - SocketPermissionEntry entry;
|
| - if (!SocketPermissionEntry::ParseHostPattern(
|
| - operation_type, host_pattern, &entry)) {
|
| - *error = ErrorUtils::FormatErrorMessageUTF16(
|
| - errors::kErrorInvalidHostPattern, host_pattern);
|
| - return false;
|
| - }
|
| - permission->AddPermission(entry);
|
| - return true;
|
| -}
|
| -
|
| -static bool ParseHostPatterns(
|
| - SocketsManifestPermission* permission,
|
| - content::SocketPermissionRequest::OperationType operation_type,
|
| - const scoped_ptr<SocketHostPatterns>& host_patterns,
|
| - base::string16* error) {
|
| - if (!host_patterns)
|
| - return true;
|
| -
|
| - if (host_patterns->as_string) {
|
| - return ParseHostPattern(permission, operation_type,
|
| - *host_patterns->as_string, error);
|
| - }
|
| -
|
| - CHECK(host_patterns->as_strings);
|
| - for (std::vector<std::string>::const_iterator it =
|
| - host_patterns->as_strings->begin();
|
| - it != host_patterns->as_strings->end(); ++it) {
|
| - if (!ParseHostPattern(permission, operation_type, *it, error)) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -static void SetHostPatterns(
|
| - scoped_ptr<SocketHostPatterns>& host_patterns,
|
| - const SocketsManifestPermission* permission,
|
| - content::SocketPermissionRequest::OperationType operation_type) {
|
| - host_patterns.reset(new SocketHostPatterns());
|
| - host_patterns->as_strings.reset(new std::vector<std::string>());
|
| - for (SocketsManifestPermission::SocketPermissionEntrySet::const_iterator it =
|
| - permission->entries().begin(); it != permission->entries().end() ; ++it) {
|
| - if (it->pattern().type == operation_type) {
|
| - host_patterns->as_strings->push_back(it->GetHostPatternAsString());
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -SocketsManifestPermission::SocketsManifestPermission() {}
|
| -
|
| -SocketsManifestPermission::~SocketsManifestPermission() {}
|
| -
|
| -// static
|
| -scoped_ptr<SocketsManifestPermission> SocketsManifestPermission::FromValue(
|
| - const base::Value& value,
|
| - base::string16* error) {
|
| - scoped_ptr<Sockets> sockets = Sockets::FromValue(value, error);
|
| - if (!sockets)
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| -
|
| - scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission());
|
| - if (sockets->udp) {
|
| - if (!ParseHostPatterns(result.get(),
|
| - SocketPermissionRequest::UDP_BIND,
|
| - sockets->udp->bind,
|
| - error)) {
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| - }
|
| - if (!ParseHostPatterns(result.get(),
|
| - SocketPermissionRequest::UDP_SEND_TO,
|
| - sockets->udp->send,
|
| - error)) {
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| - }
|
| - if (!ParseHostPatterns(result.get(),
|
| - SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP,
|
| - sockets->udp->multicast_membership,
|
| - error)) {
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| - }
|
| - }
|
| - if (sockets->tcp) {
|
| - if (!ParseHostPatterns(result.get(),
|
| - SocketPermissionRequest::TCP_CONNECT,
|
| - sockets->tcp->connect,
|
| - error)) {
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| - }
|
| - }
|
| - if (sockets->tcp_server) {
|
| - if (!ParseHostPatterns(result.get(),
|
| - SocketPermissionRequest::TCP_LISTEN,
|
| - sockets->tcp_server->listen,
|
| - error)) {
|
| - return scoped_ptr<SocketsManifestPermission>();
|
| - }
|
| - }
|
| - return result.Pass();
|
| -}
|
| -
|
| -bool SocketsManifestPermission::CheckRequest(
|
| - const Extension* extension,
|
| - const SocketPermissionRequest& request) const {
|
| - for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
|
| - it != permissions_.end(); ++it) {
|
| - if (it->Check(request))
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -std::string SocketsManifestPermission::name() const {
|
| - return manifest_keys::kSockets;
|
| -}
|
| -
|
| -std::string SocketsManifestPermission::id() const {
|
| - return name();
|
| -}
|
| -
|
| -bool SocketsManifestPermission::HasMessages() const {
|
| - bool is_empty = permissions_.empty();
|
| - return !is_empty;
|
| -}
|
| -
|
| -PermissionMessages SocketsManifestPermission::GetMessages() const {
|
| - // TODO(rpaquay): This function and callees is (almost) a copy/paste
|
| - // from extensions::SocketPermissiona.
|
| - PermissionMessages result;
|
| - if (!AddAnyHostMessage(result)) {
|
| - AddSpecificHostMessage(result);
|
| - AddSubdomainHostMessage(result);
|
| - }
|
| - AddNetworkListMessage(result);
|
| - return result;
|
| -}
|
| -
|
| -bool SocketsManifestPermission::FromValue(const base::Value* value) {
|
| - if (!value)
|
| - return false;
|
| - base::string16 error;
|
| - scoped_ptr<SocketsManifestPermission> manifest_permission(
|
| - SocketsManifestPermission::FromValue(*value, &error));
|
| -
|
| - if (!manifest_permission)
|
| - return false;
|
| -
|
| - permissions_ = manifest_permission->permissions_;
|
| - return true;
|
| -}
|
| -
|
| -scoped_ptr<base::Value> SocketsManifestPermission::ToValue() const {
|
| - Sockets sockets;
|
| -
|
| - sockets.udp.reset(new Sockets::Udp());
|
| - SetHostPatterns(sockets.udp->bind, this,
|
| - SocketPermissionRequest::UDP_BIND);
|
| - SetHostPatterns(sockets.udp->send, this,
|
| - SocketPermissionRequest::UDP_SEND_TO);
|
| - SetHostPatterns(sockets.udp->multicast_membership, this,
|
| - SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP);
|
| - if (sockets.udp->bind->as_strings->size() == 0 &&
|
| - sockets.udp->send->as_strings->size() == 0 &&
|
| - sockets.udp->multicast_membership->as_strings->size() == 0) {
|
| - sockets.udp.reset(NULL);
|
| - }
|
| -
|
| - sockets.tcp.reset(new Sockets::Tcp());
|
| - SetHostPatterns(sockets.tcp->connect, this,
|
| - SocketPermissionRequest::TCP_CONNECT);
|
| - if (sockets.tcp->connect->as_strings->size() == 0) {
|
| - sockets.tcp.reset(NULL);
|
| - }
|
| -
|
| - sockets.tcp_server.reset(new Sockets::TcpServer());
|
| - SetHostPatterns(sockets.tcp_server->listen, this,
|
| - SocketPermissionRequest::TCP_LISTEN);
|
| - if (sockets.tcp_server->listen->as_strings->size() == 0) {
|
| - sockets.tcp_server.reset(NULL);
|
| - }
|
| -
|
| - return scoped_ptr<base::Value>(sockets.ToValue().release()).Pass();
|
| -}
|
| -
|
| -ManifestPermission* SocketsManifestPermission::Clone() const {
|
| - scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission());
|
| - result->permissions_ = permissions_;
|
| - return result.release();
|
| -}
|
| -
|
| -ManifestPermission* SocketsManifestPermission::Diff(
|
| - const ManifestPermission* rhs) const {
|
| - const SocketsManifestPermission* other =
|
| - static_cast<const SocketsManifestPermission*>(rhs);
|
| -
|
| - scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission());
|
| - result->permissions_ = base::STLSetDifference<SocketPermissionEntrySet>(
|
| - permissions_, other->permissions_);
|
| - return result.release();
|
| -}
|
| -
|
| -ManifestPermission* SocketsManifestPermission::Union(
|
| - const ManifestPermission* rhs) const {
|
| - const SocketsManifestPermission* other =
|
| - static_cast<const SocketsManifestPermission*>(rhs);
|
| -
|
| - scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission());
|
| - result->permissions_ = base::STLSetUnion<SocketPermissionEntrySet>(
|
| - permissions_, other->permissions_);
|
| - return result.release();
|
| -}
|
| -
|
| -ManifestPermission* SocketsManifestPermission::Intersect(
|
| - const ManifestPermission* rhs) const {
|
| - const SocketsManifestPermission* other =
|
| - static_cast<const SocketsManifestPermission*>(rhs);
|
| -
|
| - scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission());
|
| - result->permissions_ = base::STLSetIntersection<SocketPermissionEntrySet>(
|
| - permissions_, other->permissions_);
|
| - return result.release();
|
| -}
|
| -
|
| -bool SocketsManifestPermission::Contains(const ManifestPermission* rhs) const {
|
| - const SocketsManifestPermission* other =
|
| - static_cast<const SocketsManifestPermission*>(rhs);
|
| -
|
| - return base::STLIncludes<SocketPermissionEntrySet>(permissions_,
|
| - other->permissions_);
|
| -}
|
| -
|
| -bool SocketsManifestPermission::Equal(const ManifestPermission* rhs) const {
|
| - const SocketsManifestPermission* other =
|
| - static_cast<const SocketsManifestPermission*>(rhs);
|
| -
|
| - return (permissions_ == other->permissions_);
|
| -}
|
| -
|
| -void SocketsManifestPermission::Write(IPC::Message* m) const {
|
| - IPC::WriteParam(m, permissions_);
|
| -}
|
| -
|
| -bool SocketsManifestPermission::Read(const IPC::Message* m,
|
| - PickleIterator* iter) {
|
| - return IPC::ReadParam(m, iter, &permissions_);
|
| -}
|
| -
|
| -void SocketsManifestPermission::Log(std::string* log) const {
|
| - IPC::LogParam(permissions_, log);
|
| -}
|
| -
|
| -void SocketsManifestPermission::AddPermission(
|
| - const SocketPermissionEntry& entry) {
|
| - permissions_.insert(entry);
|
| -}
|
| -
|
| -bool SocketsManifestPermission::AddAnyHostMessage(
|
| - PermissionMessages& messages) const {
|
| - for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
|
| - it != permissions_.end(); ++it) {
|
| - if (it->IsAddressBoundType() &&
|
| - it->GetHostType() == SocketPermissionEntry::ANY_HOST) {
|
| - messages.push_back(PermissionMessage(
|
| - PermissionMessage::kSocketAnyHost,
|
| - l10n_util::GetStringUTF16(
|
| - IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST)));
|
| - return true;
|
| - }
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -void SocketsManifestPermission::AddSubdomainHostMessage(
|
| - PermissionMessages& messages) const {
|
| - std::set<base::string16> domains;
|
| - for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
|
| - it != permissions_.end(); ++it) {
|
| - if (it->GetHostType() == SocketPermissionEntry::HOSTS_IN_DOMAINS)
|
| - domains.insert(base::UTF8ToUTF16(it->pattern().host));
|
| - }
|
| - if (!domains.empty()) {
|
| - int id = (domains.size() == 1) ?
|
| - IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN :
|
| - IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS;
|
| - messages.push_back(PermissionMessage(
|
| - PermissionMessage::kSocketDomainHosts,
|
| - l10n_util::GetStringFUTF16(
|
| - id,
|
| - JoinString(
|
| - std::vector<base::string16>(
|
| - domains.begin(), domains.end()), ' '))));
|
| - }
|
| -}
|
| -
|
| -void SocketsManifestPermission::AddSpecificHostMessage(
|
| - PermissionMessages& messages) const {
|
| - std::set<base::string16> hostnames;
|
| - for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
|
| - it != permissions_.end(); ++it) {
|
| - if (it->GetHostType() == SocketPermissionEntry::SPECIFIC_HOSTS)
|
| - hostnames.insert(base::UTF8ToUTF16(it->pattern().host));
|
| - }
|
| - if (!hostnames.empty()) {
|
| - int id = (hostnames.size() == 1) ?
|
| - IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST :
|
| - IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS;
|
| - messages.push_back(PermissionMessage(
|
| - PermissionMessage::kSocketSpecificHosts,
|
| - l10n_util::GetStringFUTF16(
|
| - id,
|
| - JoinString(
|
| - std::vector<base::string16>(
|
| - hostnames.begin(), hostnames.end()), ' '))));
|
| - }
|
| -}
|
| -
|
| -void SocketsManifestPermission::AddNetworkListMessage(
|
| - PermissionMessages& messages) const {
|
| - for (SocketPermissionEntrySet::const_iterator it = permissions_.begin();
|
| - it != permissions_.end(); ++it) {
|
| - if (it->pattern().type == SocketPermissionRequest::NETWORK_STATE) {
|
| - messages.push_back(PermissionMessage(
|
| - PermissionMessage::kNetworkState,
|
| - l10n_util::GetStringUTF16(
|
| - IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE)));
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|