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

Side by Side Diff: ash/common/system/chromeos/network/vpn_list_view.cc

Issue 2698473007: Convert path usage in NetworkListViewBase subclasses to use guids. (Closed)
Patch Set: Tweak NetworkPortalNotificationControllerTest to create GUIDs for new NetworkStates. Created 3 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/common/system/chromeos/network/vpn_list_view.h" 5 #include "ash/common/system/chromeos/network/vpn_list_view.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // network_icon::AnimationObserver: 156 // network_icon::AnimationObserver:
157 void NetworkIconChanged() override; 157 void NetworkIconChanged() override;
158 158
159 private: 159 private:
160 void UpdateFromNetworkState(const chromeos::NetworkState* network); 160 void UpdateFromNetworkState(const chromeos::NetworkState* network);
161 void SetupConnectedItemMd(const base::string16& text, 161 void SetupConnectedItemMd(const base::string16& text,
162 const gfx::ImageSkia& image); 162 const gfx::ImageSkia& image);
163 void SetupConnectingItemMd(const base::string16& text, 163 void SetupConnectingItemMd(const base::string16& text,
164 const gfx::ImageSkia& image); 164 const gfx::ImageSkia& image);
165 165
166 const std::string service_path_; 166 const std::string guid_;
167 167
168 views::LabelButton* disconnect_button_ = nullptr; 168 views::LabelButton* disconnect_button_ = nullptr;
169 169
170 DISALLOW_COPY_AND_ASSIGN(VPNListNetworkEntry); 170 DISALLOW_COPY_AND_ASSIGN(VPNListNetworkEntry);
171 }; 171 };
172 172
173 VPNListEntryBase::VPNListEntryBase(VPNListView* parent) 173 VPNListEntryBase::VPNListEntryBase(VPNListView* parent)
174 : HoverHighlightView(parent) { 174 : HoverHighlightView(parent) {
175 if (!UseMd()) 175 if (!UseMd())
176 SetBorder(views::CreateEmptyBorder(0, kTrayPopupPaddingHorizontal, 0, 0)); 176 SetBorder(views::CreateEmptyBorder(0, kTrayPopupPaddingHorizontal, 0, 0));
177 } 177 }
178 178
179 VPNListNetworkEntry::VPNListNetworkEntry(VPNListView* parent, 179 VPNListNetworkEntry::VPNListNetworkEntry(VPNListView* parent,
180 const chromeos::NetworkState* network) 180 const chromeos::NetworkState* network)
181 : VPNListEntryBase(parent), service_path_(network->path()) { 181 : VPNListEntryBase(parent), guid_(network->guid()) {
182 UpdateFromNetworkState(network); 182 UpdateFromNetworkState(network);
183 } 183 }
184 184
185 VPNListNetworkEntry::~VPNListNetworkEntry() { 185 VPNListNetworkEntry::~VPNListNetworkEntry() {
186 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 186 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
187 } 187 }
188 188
189 void VPNListNetworkEntry::NetworkIconChanged() { 189 void VPNListNetworkEntry::NetworkIconChanged() {
190 UpdateFromNetworkState( 190 UpdateFromNetworkState(chromeos::NetworkHandler::Get()
191 chromeos::NetworkHandler::Get()->network_state_handler()->GetNetworkState( 191 ->network_state_handler()
192 service_path_)); 192 ->GetNetworkStateFromGuid(guid_));
193 } 193 }
194 194
195 void VPNListNetworkEntry::UpdateFromNetworkState( 195 void VPNListNetworkEntry::UpdateFromNetworkState(
196 const chromeos::NetworkState* network) { 196 const chromeos::NetworkState* network) {
197 if (network && network->IsConnectingState()) 197 if (network && network->IsConnectingState())
198 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); 198 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this);
199 else 199 else
200 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 200 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
201 201
202 if (!network) { 202 if (!network) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 } 260 }
261 261
262 VPNListView::~VPNListView() { 262 VPNListView::~VPNListView() {
263 WmShell::Get()->vpn_list()->RemoveObserver(this); 263 WmShell::Get()->vpn_list()->RemoveObserver(this);
264 } 264 }
265 265
266 void VPNListView::Update() { 266 void VPNListView::Update() {
267 // Before updating the list, determine whether the user was hovering over one 267 // Before updating the list, determine whether the user was hovering over one
268 // of the VPN provider or network entries. 268 // of the VPN provider or network entries.
269 std::unique_ptr<VPNProvider> hovered_provider; 269 std::unique_ptr<VPNProvider> hovered_provider;
270 std::string hovered_network_service_path; 270 std::string hovered_network_guid;
271 for (const std::pair<const views::View* const, VPNProvider>& provider : 271 for (const std::pair<const views::View* const, VPNProvider>& provider :
272 provider_view_map_) { 272 provider_view_map_) {
273 if (static_cast<const HoverHighlightView*>(provider.first)->hover()) { 273 if (static_cast<const HoverHighlightView*>(provider.first)->hover()) {
274 hovered_provider.reset(new VPNProvider(provider.second)); 274 hovered_provider.reset(new VPNProvider(provider.second));
275 break; 275 break;
276 } 276 }
277 } 277 }
278 if (!hovered_provider) { 278 if (!hovered_provider) {
279 for (const std::pair<const views::View*, std::string>& entry : 279 for (const std::pair<const views::View*, std::string>& entry :
280 network_view_service_path_map_) { 280 network_view_guid_map_) {
281 if (static_cast<const HoverHighlightView*>(entry.first)->hover()) { 281 if (static_cast<const HoverHighlightView*>(entry.first)->hover()) {
282 hovered_network_service_path = entry.second; 282 hovered_network_guid = entry.second;
283 break; 283 break;
284 } 284 }
285 } 285 }
286 } 286 }
287 287
288 // Clear the list. 288 // Clear the list.
289 container()->RemoveAllChildViews(true); 289 container()->RemoveAllChildViews(true);
290 provider_view_map_.clear(); 290 provider_view_map_.clear();
291 network_view_service_path_map_.clear(); 291 network_view_guid_map_.clear();
292 list_empty_ = true; 292 list_empty_ = true;
293 if (!UseMd()) { 293 if (!UseMd()) {
294 container()->SetLayoutManager( 294 container()->SetLayoutManager(
295 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 295 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
296 } 296 }
297 297
298 // Get the list of available VPN networks, in shill's priority order. 298 // Get the list of available VPN networks, in shill's priority order.
299 chromeos::NetworkStateHandler::NetworkStateList networks; 299 chromeos::NetworkStateHandler::NetworkStateList networks;
300 chromeos::NetworkHandler::Get() 300 chromeos::NetworkHandler::Get()
301 ->network_state_handler() 301 ->network_state_handler()
302 ->GetVisibleNetworkListByType(chromeos::NetworkTypePattern::VPN(), 302 ->GetVisibleNetworkListByType(chromeos::NetworkTypePattern::VPN(),
303 &networks); 303 &networks);
304 304
305 // Show all VPN providers and all networks that are currently disconnected. 305 // Show all VPN providers and all networks that are currently disconnected.
306 AddProvidersAndNetworks(networks); 306 AddProvidersAndNetworks(networks);
307 307
308 // Determine whether one of the new list entries corresponds to the entry that 308 // Determine whether one of the new list entries corresponds to the entry that
309 // the user was previously hovering over. If such an entry is found, the list 309 // the user was previously hovering over. If such an entry is found, the list
310 // will be scrolled to ensure the entry is visible. 310 // will be scrolled to ensure the entry is visible.
311 const views::View* scroll_to_show_view = nullptr; 311 const views::View* scroll_to_show_view = nullptr;
312 if (hovered_provider) { 312 if (hovered_provider) {
313 for (const std::pair<const views::View* const, VPNProvider>& provider : 313 for (const std::pair<const views::View* const, VPNProvider>& provider :
314 provider_view_map_) { 314 provider_view_map_) {
315 if (provider.second == *hovered_provider) { 315 if (provider.second == *hovered_provider) {
316 scroll_to_show_view = provider.first; 316 scroll_to_show_view = provider.first;
317 break; 317 break;
318 } 318 }
319 } 319 }
320 } else if (!hovered_network_service_path.empty()) { 320 } else if (!hovered_network_guid.empty()) {
321 for (const std::pair<const views::View*, std::string>& entry : 321 for (const std::pair<const views::View*, std::string>& entry :
322 network_view_service_path_map_) { 322 network_view_guid_map_) {
323 if (entry.second == hovered_network_service_path) { 323 if (entry.second == hovered_network_guid) {
324 scroll_to_show_view = entry.first; 324 scroll_to_show_view = entry.first;
325 break; 325 break;
326 } 326 }
327 } 327 }
328 } 328 }
329 329
330 // Layout the updated list. 330 // Layout the updated list.
331 container()->SizeToPreferredSize(); 331 container()->SizeToPreferredSize();
332 delegate_->RelayoutScrollList(); 332 delegate_->RelayoutScrollList();
333 333
334 if (scroll_to_show_view) { 334 if (scroll_to_show_view) {
335 // Scroll the list so that |scroll_to_show_view| is in view. 335 // Scroll the list so that |scroll_to_show_view| is in view.
336 container()->ScrollRectToVisible(scroll_to_show_view->bounds()); 336 container()->ScrollRectToVisible(scroll_to_show_view->bounds());
337 } 337 }
338 } 338 }
339 339
340 bool VPNListView::IsNetworkEntry(views::View* view, 340 bool VPNListView::IsNetworkEntry(views::View* view, std::string* guid) const {
341 std::string* service_path) const { 341 const auto& entry = network_view_guid_map_.find(view);
342 const auto& entry = network_view_service_path_map_.find(view); 342 if (entry == network_view_guid_map_.end())
343 if (entry == network_view_service_path_map_.end())
344 return false; 343 return false;
345 *service_path = entry->second; 344 *guid = entry->second;
346 return true; 345 return true;
347 } 346 }
348 347
349 void VPNListView::OnVPNProvidersChanged() { 348 void VPNListView::OnVPNProvidersChanged() {
350 Update(); 349 Update();
351 } 350 }
352 351
353 void VPNListView::OnViewClicked(views::View* sender) { 352 void VPNListView::OnViewClicked(views::View* sender) {
354 const auto& provider_iter = provider_view_map_.find(sender); 353 const auto& provider_iter = provider_view_map_.find(sender);
355 if (provider_iter != provider_view_map_.end()) { 354 if (provider_iter != provider_view_map_.end()) {
(...skipping 15 matching lines...) Expand all
371 370
372 // If the user clicked on a network entry, let the |delegate_| trigger a 371 // If the user clicked on a network entry, let the |delegate_| trigger a
373 // connection attempt (if the network is currently disconnected) or show a 372 // connection attempt (if the network is currently disconnected) or show a
374 // configuration dialog (if the network is currently connected or connecting). 373 // configuration dialog (if the network is currently connected or connecting).
375 delegate_->OnNetworkEntryClicked(sender); 374 delegate_->OnNetworkEntryClicked(sender);
376 } 375 }
377 376
378 void VPNListView::AddNetwork(const chromeos::NetworkState* network) { 377 void VPNListView::AddNetwork(const chromeos::NetworkState* network) {
379 views::View* entry(new VPNListNetworkEntry(this, network)); 378 views::View* entry(new VPNListNetworkEntry(this, network));
380 container()->AddChildView(entry); 379 container()->AddChildView(entry);
381 network_view_service_path_map_[entry] = network->path(); 380 network_view_guid_map_[entry] = network->guid();
382 list_empty_ = false; 381 list_empty_ = false;
383 } 382 }
384 383
385 void VPNListView::AddProviderAndNetworks( 384 void VPNListView::AddProviderAndNetworks(
386 const VPNProvider& vpn_provider, 385 const VPNProvider& vpn_provider,
387 const chromeos::NetworkStateHandler::NetworkStateList& networks) { 386 const chromeos::NetworkStateHandler::NetworkStateList& networks) {
388 // Add a visual separator, unless this is the topmost entry in the list. 387 // Add a visual separator, unless this is the topmost entry in the list.
389 if (!list_empty_) 388 if (!list_empty_)
390 container()->AddChildView(TrayPopupUtils::CreateListSubHeaderSeparator()); 389 container()->AddChildView(TrayPopupUtils::CreateListSubHeaderSeparator());
391 std::string vpn_name = 390 std::string vpn_name =
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 } 431 }
433 } 432 }
434 433
435 // Add providers without any configured networks, in the order that the 434 // Add providers without any configured networks, in the order that the
436 // providers were returned by the extensions system. 435 // providers were returned by the extensions system.
437 for (const VPNProvider& provider : providers) 436 for (const VPNProvider& provider : providers)
438 AddProviderAndNetworks(provider, networks); 437 AddProviderAndNetworks(provider, networks);
439 } 438 }
440 439
441 } // namespace ash 440 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/system/chromeos/network/vpn_list_view.h ('k') | ash/common/system/networking_config_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698