blob: 7973228aca18d05760bf3f697fa698bebf99c8d5 [file] [log] [blame]
// Copyright 2015 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 <string>
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "extensions/browser/api/networking_config/networking_config_api.h"
#include "extensions/browser/api/networking_config/networking_config_service.h"
#include "extensions/browser/api/networking_config/networking_config_service_factory.h"
#include "ui/base/l10n/l10n_util.h"
namespace extensions {
namespace {
const char kAuthenticationResultFailed[] =
"Failed to set AuthenticationResult.";
const char kMalformedFilterDescription[] = "Malformed filter description.";
const char kMalformedFilterDescriptionWithSSID[] =
"Malformed filter description. Failed to register network with SSID "
"(hex): *";
const char kUnsupportedNetworkType[] = "Unsupported network type.";
} // namespace
NetworkingConfigSetNetworkFilterFunction::
NetworkingConfigSetNetworkFilterFunction() {
}
ExtensionFunction::ResponseAction
NetworkingConfigSetNetworkFilterFunction::Run() {
parameters_ =
api::networking_config::SetNetworkFilter::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters_.get());
NetworkingConfigService* service =
NetworkingConfigServiceFactory::GetForBrowserContext(browser_context());
DCHECK(service);
// Remove previously registered networks.
service->UnregisterExtension(extension_id());
for (const api::networking_config::NetworkInfo& ni : parameters_->networks) {
// |Type| field must be set to |WiFi|
if (ni.type != api::networking_config::NETWORK_TYPE_WIFI)
return RespondNow(Error(kUnsupportedNetworkType));
// Either |ssid| or |hex_ssid| must be set.
if (!ni.ssid.get() && !ni.hex_ssid.get())
return RespondNow(Error(kMalformedFilterDescription));
std::string hex_ssid;
if (ni.ssid.get()) {
auto* ssid_field = ni.ssid.get();
hex_ssid = base::HexEncode(ssid_field->c_str(), ssid_field->size());
}
if (ni.hex_ssid.get())
hex_ssid = *ni.hex_ssid.get();
if (!service->RegisterHexSsid(hex_ssid, extension_id()))
return RespondNow(Error(kMalformedFilterDescriptionWithSSID, hex_ssid));
}
return RespondNow(NoArguments());
}
NetworkingConfigSetNetworkFilterFunction::
~NetworkingConfigSetNetworkFilterFunction() {
}
NetworkingConfigFinishAuthenticationFunction::
NetworkingConfigFinishAuthenticationFunction() {
}
ExtensionFunction::ResponseAction
NetworkingConfigFinishAuthenticationFunction::Run() {
parameters_ =
api::networking_config::FinishAuthentication::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters_.get());
NetworkingConfigService* service =
NetworkingConfigServiceFactory::GetForBrowserContext(browser_context());
DCHECK(service);
const NetworkingConfigService::AuthenticationResult& last_result =
service->GetAuthenticationResult();
if (last_result.authentication_state != NetworkingConfigService::NOTRY ||
last_result.guid != parameters_->guid) {
return RespondNow(Error(kAuthenticationResultFailed));
}
// Populate NetworkingCaptivePortalAPI::AuthenticationResult.
NetworkingConfigService::AuthenticationResult authentication_result = {
extension_id(), parameters_->guid, NetworkingConfigService::FAILED,
};
switch (parameters_->result) {
case api::networking_config::AUTHENTICATION_RESULT_NONE:
NOTREACHED();
break;
case api::networking_config::AUTHENTICATION_RESULT_UNHANDLED:
authentication_result.authentication_state =
NetworkingConfigService::FAILED;
break;
case api::networking_config::AUTHENTICATION_RESULT_REJECTED:
authentication_result.authentication_state =
NetworkingConfigService::REJECTED;
break;
case api::networking_config::AUTHENTICATION_RESULT_FAILED:
authentication_result.authentication_state =
NetworkingConfigService::FAILED;
break;
case api::networking_config::AUTHENTICATION_RESULT_SUCCEEDED:
authentication_result.authentication_state =
NetworkingConfigService::SUCCESS;
break;
}
service->SetAuthenticationResult(authentication_result);
return RespondNow(NoArguments());
}
NetworkingConfigFinishAuthenticationFunction::
~NetworkingConfigFinishAuthenticationFunction() {
}
} // namespace extensions