summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/web_socket_proxy_controller.cc
diff options
context:
space:
mode:
authorjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-09 00:07:38 +0000
committerjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-09 00:07:38 +0000
commita446534de1a24cbfe8858a9958dd22383f1b49d1 (patch)
tree7fd6623fdf1d7a14f88289330f29eabac67f8ca2 /chrome/browser/chromeos/web_socket_proxy_controller.cc
parent2d03c44237c6802ab1695ccb697300542de714ca (diff)
downloadchromium_src-a446534de1a24cbfe8858a9958dd22383f1b49d1.zip
chromium_src-a446534de1a24cbfe8858a9958dd22383f1b49d1.tar.gz
chromium_src-a446534de1a24cbfe8858a9958dd22383f1b49d1.tar.bz2
Add a centralized mechanism for whitelisting access to extension permissions.
This also updates the following permissions to use the whitelist: - terminalPrivate - webSocketProxyPrivate - chromePrivate - inputMethodPrivate - chromeAuthPrivate - webstorePrivate Includes more tests to verify that Extension loading fails for different permission parameters: - by extension type - component only flag - whitelists BUG=84211, 111314 TEST=extension unit and browser tests Review URL: http://codereview.chromium.org/9317013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/web_socket_proxy_controller.cc')
-rw-r--r--chrome/browser/chromeos/web_socket_proxy_controller.cc85
1 files changed, 1 insertions, 84 deletions
diff --git a/chrome/browser/chromeos/web_socket_proxy_controller.cc b/chrome/browser/chromeos/web_socket_proxy_controller.cc
index 478e3c2..50d286c 100644
--- a/chrome/browser/chromeos/web_socket_proxy_controller.cc
+++ b/chrome/browser/chromeos/web_socket_proxy_controller.cc
@@ -32,72 +32,6 @@
namespace {
-const char* kAllowedIds[] = {
- "haiffjcadagjlijoggckpgfnoeiflnem",
- "gnedhmakppccajfpfiihfcdlnpgomkcf",
- "fjcibdnjlbfnbfdjneajpipnlcppleek",
- "okddffdblfhhnmhodogpojmfkjmhinfp",
- "pnhechapfaindjhompbnflcldabbghjo" // HTerm App (SSH Client)
-};
-
-class OriginValidator {
- public:
- OriginValidator() {
- chromeos::FillWithExtensionsIdsWithPrivateAccess(&allowed_ids_);
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- DCHECK(command_line);
- std::string allowed_list =
- command_line->GetSwitchValueASCII(switches::kAllowWebSocketProxy);
- if (!allowed_list.empty()) {
- StringTokenizer t(allowed_list, ",");
- while (t.GetNext()) {
- // It must be either extension id or origin.
- if (Extension::IdIsValid(t.token())) {
- allowed_ids_.push_back(t.token());
- } else {
- // It is not extension id, check if it is an origin.
- GURL origin = GURL(t.token()).GetOrigin();
- if (!origin.is_valid()) {
- LOG(ERROR) << "Invalid extension id or origin specified via "
- << switches::kAllowWebSocketProxy << " switch";
- break;
- }
- allowed_origins_.push_back(origin.spec());
- if (origin.SchemeIs(chrome::kExtensionScheme))
- allowed_ids_.push_back(origin.host());
- }
- }
- }
- for (size_t i = 0; i < allowed_ids_.size(); ++i) {
- allowed_origins_.push_back(Extension::GetBaseURLFromExtensionId(
- allowed_ids_[i]).GetOrigin().spec());
- }
- std::sort(allowed_ids_.begin(), allowed_ids_.end());
- allowed_ids_.resize(std::unique(
- allowed_ids_.begin(), allowed_ids_.end()) - allowed_ids_.begin());
- std::sort(allowed_origins_.begin(), allowed_origins_.end());
- allowed_origins_.resize(std::unique(allowed_origins_.begin(),
- allowed_origins_.end()) - allowed_origins_.begin());
- }
-
- bool CheckCredentials(
- const std::string& extension_id,
- const std::string& hostname,
- unsigned short port,
- chromeos::WebSocketProxyController::ConnectionFlags flags) {
- return std::binary_search(
- allowed_ids_.begin(), allowed_ids_.end(), extension_id);
- }
-
- const std::vector<std::string>& allowed_origins() { return allowed_origins_; }
-
- private:
- std::vector<std::string> allowed_ids_;
- std::vector<std::string> allowed_origins_;
-};
-
-base::LazyInstance<OriginValidator> g_validator = LAZY_INSTANCE_INITIALIZER;
-
class ProxyLifetime
: public net::NetworkChangeNotifier::OnlineStateObserver,
public content::NotificationObserver {
@@ -145,8 +79,7 @@ class ProxyLifetime
void ProxyCallback() {
LOG(INFO) << "Attempt to run web socket proxy task";
- chromeos::WebSocketProxy* server = new chromeos::WebSocketProxy(
- g_validator.Get().allowed_origins());
+ chromeos::WebSocketProxy* server = new chromeos::WebSocketProxy();
{
base::AutoLock alk(lock_);
if (shutdown_requested_)
@@ -193,12 +126,6 @@ base::LazyInstance<ProxyLifetime> g_proxy_lifetime = LAZY_INSTANCE_INITIALIZER;
namespace chromeos {
-void FillWithExtensionsIdsWithPrivateAccess(std::vector<std::string>* ids) {
- ids->clear();
- for (size_t i = 0; i < arraysize(kAllowedIds); ++i)
- ids->push_back(kAllowedIds[i]);
-}
-
// static
void WebSocketProxyController::Initiate() {
g_proxy_lifetime.Get();
@@ -231,14 +158,4 @@ void WebSocketProxyController::Shutdown() {
g_proxy_lifetime.Get().web_socket_proxy_thread_.Stop();
}
-// static
-bool WebSocketProxyController::CheckCredentials(
- const std::string& extension_id,
- const std::string& hostname,
- unsigned short port,
- ConnectionFlags flags) {
- return g_validator.Get().CheckCredentials(
- extension_id, hostname, port, flags);
-}
-
} // namespace chromeos