| Index: chrome/browser/chromeos/options/network_connect.cc
|
| diff --git a/chrome/browser/chromeos/options/network_connect.cc b/chrome/browser/chromeos/options/network_connect.cc
|
| index 63c72068f1edf07ba017d825419d51adc8c62d30..9ce1d663ef58ff21babe06c88654858d7f22649e 100644
|
| --- a/chrome/browser/chromeos/options/network_connect.cc
|
| +++ b/chrome/browser/chromeos/options/network_connect.cc
|
| @@ -10,15 +10,21 @@
|
| #include "ash/system/chromeos/network/network_observer.h"
|
| #include "ash/system/tray/system_tray_notifier.h"
|
| #include "base/command_line.h"
|
| +#include "base/stringprintf.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "chrome/browser/chromeos/cros/cros_library.h"
|
| #include "chrome/browser/chromeos/cros/network_library.h"
|
| #include "chrome/browser/chromeos/enrollment_dialog_view.h"
|
| #include "chrome/browser/chromeos/options/network_config_view.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| +#include "chrome/browser/ui/browser_finder.h"
|
| +#include "chrome/browser/ui/chrome_pages.h"
|
| #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h"
|
| +#include "chrome/common/url_constants.h"
|
| #include "chromeos/chromeos_switches.h"
|
| +#include "content/public/browser/user_metrics.h"
|
| #include "grit/generated_resources.h"
|
| +#include "net/base/escape.h"
|
| #include "third_party/cros_system_api/dbus/service_constants.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| @@ -135,14 +141,10 @@ ConnectResult ConnectToNetwork(const std::string& service_path,
|
| if (network->type() == TYPE_ETHERNET)
|
| return CONNECT_NOT_STARTED; // Normally this shouldn't happen
|
|
|
| - if (network->type() == TYPE_WIFI) {
|
| - WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
|
| - wifi->SetEnrollmentDelegate(
|
| - chromeos::CreateEnrollmentDelegate(
|
| - parent_window,
|
| - wifi->name(),
|
| - ProfileManager::GetLastUsedProfile()));
|
| - wifi->AttemptConnection(base::Bind(&DoConnect, wifi, parent_window));
|
| + if (network->type() == TYPE_WIFI || network->type() == TYPE_VPN) {
|
| + network->SetEnrollmentDelegate(chromeos::CreateEnrollmentDelegate(
|
| + parent_window, network->name(), ProfileManager::GetLastUsedProfile()));
|
| + network->AttemptConnection(base::Bind(&DoConnect, network, parent_window));
|
| return CONNECT_STARTED;
|
| }
|
|
|
| @@ -164,20 +166,63 @@ ConnectResult ConnectToNetwork(const std::string& service_path,
|
| return CONNECT_STARTED;
|
| }
|
|
|
| - if (network->type() == TYPE_VPN) {
|
| - VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network);
|
| - vpn->SetEnrollmentDelegate(
|
| - chromeos::CreateEnrollmentDelegate(
|
| - parent_window,
|
| - vpn->name(),
|
| - ProfileManager::GetLastUsedProfile()));
|
| - vpn->AttemptConnection(base::Bind(&DoConnect, vpn, parent_window));
|
| - return CONNECT_STARTED;
|
| - }
|
| -
|
| NOTREACHED();
|
| return CONNECT_NOT_STARTED;
|
| }
|
|
|
| +void HandleUnconfiguredNetwork(const std::string& service_path,
|
| + gfx::NativeWindow parent_window) {
|
| + NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
|
| + Network* network = cros->FindNetworkByPath(service_path);
|
| + if (!network) {
|
| + LOG(WARNING) << "Unknown network: " << service_path;
|
| + return;
|
| + }
|
| +
|
| + if (network->type() == TYPE_WIFI || network->type() == TYPE_VPN) {
|
| + network->SetEnrollmentDelegate(chromeos::CreateEnrollmentDelegate(
|
| + parent_window, network->name(), ProfileManager::GetLastUsedProfile()));
|
| + // This will connect to the network only if the network just needs to have
|
| + // its certificate configured. Otherwise it will show an enrollment dialog
|
| + // if available, or call NetworkConfigView::Show().
|
| + network->AttemptConnection(
|
| + base::Bind(&NetworkConfigView::Show, network, parent_window));
|
| + return;
|
| + }
|
| +
|
| + if (network->type() == TYPE_WIMAX) {
|
| + NetworkConfigView::Show(network, parent_window);
|
| + return;
|
| + }
|
| +
|
| + if (network->type() == TYPE_CELLULAR) {
|
| + CellularNetwork* cellular = static_cast<CellularNetwork*>(network);
|
| + if (cellular->NeedsActivation()) {
|
| + ActivateCellular(service_path);
|
| + return;
|
| + } else if (cellular->out_of_credits()) {
|
| + ShowMobileSetup(service_path);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + // No special configure or setup for |service_path|, show the settings UI.
|
| + std::string page = chrome::kInternetOptionsSubPage;
|
| + std::string name = network->name();
|
| + if (name.empty() && network->type() == TYPE_ETHERNET)
|
| + name = l10n_util::GetStringUTF8(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
|
| + page += base::StringPrintf(
|
| + "?servicePath=%s&networkType=%d&networkName=%s",
|
| + net::EscapeUrlEncodedData(service_path, true).c_str(),
|
| + network->type(),
|
| + net::EscapeUrlEncodedData(name, false).c_str());
|
| + content::RecordAction(
|
| + content::UserMetricsAction("OpenInternetOptionsDialog"));
|
| + Browser* browser = chrome::FindOrCreateTabbedBrowser(
|
| + ProfileManager::GetDefaultProfileOrOffTheRecord(),
|
| + chrome::HOST_DESKTOP_TYPE_ASH);
|
| + chrome::ShowSettingsSubPage(browser, page);
|
| +}
|
| +
|
| } // namespace network_connect
|
| } // namespace chromeos
|
|
|