blob: f2d75b5bcb243720790764d7de83eef808a43726 [file] [log] [blame]
// Copyright 2018 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/browser/ui/webui/chromeos/login/network_screen_handler.h"
#include <stddef.h>
#include "base/values.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
#include "chrome/browser/chromeos/login/screens/core_oobe_view.h"
#include "chrome/browser/chromeos/login/screens/network_screen.h"
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state_handler.h"
#include "components/login/localized_values_builder.h"
namespace {
const char kJsScreenPath[] = "login.NetworkScreen";
} // namespace
namespace chromeos {
NetworkScreenHandler::NetworkScreenHandler(CoreOobeView* core_oobe_view)
: BaseScreenHandler(kScreenId), core_oobe_view_(core_oobe_view) {
set_call_js_prefix(kJsScreenPath);
DCHECK(core_oobe_view_);
}
NetworkScreenHandler::~NetworkScreenHandler() {
if (screen_)
screen_->OnViewDestroyed(this);
}
void NetworkScreenHandler::Show() {
if (!page_is_ready()) {
show_on_init_ = true;
return;
}
// In OOBE all physical network technologies should be enabled, so the user is
// able to select any of the available networks on the device. Enabled
// technologies should not be changed if network screen is shown outside of
// OOBE.
// If OOBE is not completed, we assume that the only instance of this object
// could be OOBE itself.
if (!StartupUtils::IsOobeCompleted()) {
NetworkStateHandler* handler =
NetworkHandler::Get()->network_state_handler();
handler->SetTechnologyEnabled(NetworkTypePattern::Physical(), true,
chromeos::network_handler::ErrorCallback());
}
base::DictionaryValue data;
data.SetBoolean("isDemoModeSetup",
DemoSetupController::IsOobeDemoSetupFlowInProgress());
ShowScreenWithData(kScreenId, &data);
}
void NetworkScreenHandler::Hide() {}
void NetworkScreenHandler::Bind(NetworkScreen* screen) {
screen_ = screen;
BaseScreenHandler::SetBaseScreen(screen_);
}
void NetworkScreenHandler::Unbind() {
screen_ = nullptr;
BaseScreenHandler::SetBaseScreen(nullptr);
}
void NetworkScreenHandler::ShowError(const base::string16& message) {
CallJS("login.NetworkScreen.showError", message);
}
void NetworkScreenHandler::ClearErrors() {
if (page_is_ready())
core_oobe_view_->ClearErrors();
}
void NetworkScreenHandler::ShowConnectingStatus(
bool connecting,
const base::string16& network_id) {}
void NetworkScreenHandler::SetOfflineDemoModeEnabled(bool enabled) {
CallJSWithPrefix("setOfflineDemoModeEnabled", enabled);
}
void NetworkScreenHandler::DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) {
builder->Add("networkSectionTitle", IDS_NETWORK_SELECTION_TITLE);
builder->Add("networkSectionHint", IDS_NETWORK_SELECTION_HINT);
builder->Add("proxySettingsListItemName",
IDS_NETWORK_PROXY_SETTINGS_LIST_ITEM_NAME);
builder->Add("addWiFiListItemName", IDS_NETWORK_ADD_WI_FI_LIST_ITEM_NAME);
builder->Add("offlineDemoSetupListItemName",
IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME);
network_element::AddLocalizedValuesToBuilder(builder);
}
void NetworkScreenHandler::GetAdditionalParameters(
base::DictionaryValue* dict) {
}
void NetworkScreenHandler::Initialize() {
if (show_on_init_) {
show_on_init_ = false;
Show();
}
}
} // namespace chromeos