Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: chrome/browser/chromeos/network_login_observer.cc

Issue 6027012: Fix so that login errors are shown from login/oobe screens.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/network_login_observer.h"
6
7 #include "chrome/browser/browser_list.h"
8 #include "chrome/browser/browser_window.h"
9 #include "chrome/browser/chromeos/cros/cros_library.h"
10 #include "chrome/browser/chromeos/cros/network_library.h"
11 #include "chrome/browser/chromeos/login/background_view.h"
12 #include "chrome/browser/chromeos/login/login_utils.h"
13 #include "chrome/browser/chromeos/options/network_config_view.h"
14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/views/window.h"
16 #include "views/window/dialog_delegate.h"
17 #include "views/window/window.h"
18
19 namespace chromeos {
20
21 NetworkLoginObserver::NetworkLoginObserver(NetworkLibrary* netlib) {
22 RefreshStoredNetworks(netlib->wifi_networks());
23 netlib->AddNetworkManagerObserver(this);
24 }
25
26 NetworkLoginObserver::~NetworkLoginObserver() {
27 CrosLibrary::Get()->GetNetworkLibrary()->RemoveNetworkManagerObserver(this);
28 }
29
30 void NetworkLoginObserver::CreateModalPopup(views::WindowDelegate* view) {
31 Browser* browser = BrowserList::GetLastActive();
32 if (browser && browser->type() != Browser::TYPE_NORMAL) {
33 browser = BrowserList::FindBrowserWithType(browser->profile(),
34 Browser::TYPE_NORMAL,
35 true);
36 }
37 if (browser) {
38 views::Window* window = browser::CreateViewsWindow(
39 browser->window()->GetNativeHandle(), gfx::Rect(), view);
40 window->SetIsAlwaysOnTop(true);
41 window->Show();
42 } else {
43 // Browser not found, so we should be in login/oobe screen.
44 BackgroundView* background_view = LoginUtils::Get()->GetBackgroundView();
45 if (background_view) {
46 background_view->CreateModalPopup(view);
47 }
48 }
49 }
50
51 void NetworkLoginObserver::RefreshStoredNetworks(
52 const WifiNetworkVector& wifi_networks) {
53 wifi_network_failures_.clear();
54 for (WifiNetworkVector::const_iterator it = wifi_networks.begin();
55 it < wifi_networks.end(); it++) {
56 const WifiNetwork* wifi = *it;
57 wifi_network_failures_[wifi->service_path()] = wifi->failed();
58 }
59 }
60
61 void NetworkLoginObserver::OnNetworkManagerChanged(NetworkLibrary* obj) {
62 const WifiNetworkVector& wifi_networks = obj->wifi_networks();
63
64 NetworkConfigView* view = NULL;
65 // Check to see if we have any newly failed wifi network.
66 for (WifiNetworkVector::const_iterator it = wifi_networks.begin();
67 it < wifi_networks.end(); it++) {
68 const WifiNetwork* wifi = *it;
69 if (wifi->failed()) {
70 WifiFailureMap::iterator iter =
71 wifi_network_failures_.find(wifi->service_path());
72 // If the network did not previously exist, then don't do anything.
73 // For example, if the user travels to a location and finds a service
74 // that has previously failed, we don't want to show an error.
75 if (iter == wifi_network_failures_.end())
76 continue;
77
78 // If this network was in a failed state previously, then it's not new.
79 if (iter->second)
80 continue;
81
82 // Display login box again for bad_passphrase and bad_wepkey errors.
83 if (wifi->error() == ERROR_BAD_PASSPHRASE ||
84 wifi->error() == ERROR_BAD_WEPKEY) {
85 // The NetworkConfigView will show the appropriate error message.
86 view = new NetworkConfigView(wifi);
87 // There should only be one wifi network that failed to connect.
88 // If for some reason, we have more than one failure,
89 // we only display the first one. So we break here.
90 break;
91 }
92 }
93 }
94
95 RefreshStoredNetworks(wifi_networks);
96
97 // Show login box if necessary.
98 if (view)
99 CreateModalPopup(view);
100 }
101
102 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/network_login_observer.h ('k') | chrome/browser/chromeos/network_message_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698