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

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

Issue 1410033002: Fix occasional crash in ~VPNListView during shell destruction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/system/chromeos/network/vpn_list_view.h" 5 #include "ash/system/chromeos/network/vpn_list_view.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/metrics/user_metrics_recorder.h" 10 #include "ash/metrics/user_metrics_recorder.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 232
233 } // namespace 233 } // namespace
234 234
235 VPNListView::VPNListView(ui::NetworkListDelegate* delegate) 235 VPNListView::VPNListView(ui::NetworkListDelegate* delegate)
236 : delegate_(delegate) { 236 : delegate_(delegate) {
237 Shell::GetInstance()->system_tray_delegate()->GetVPNDelegate()->AddObserver( 237 Shell::GetInstance()->system_tray_delegate()->GetVPNDelegate()->AddObserver(
238 this); 238 this);
239 } 239 }
240 240
241 VPNListView::~VPNListView() { 241 VPNListView::~VPNListView() {
242 Shell::GetInstance() 242 // We need the check as on shell destruction, the delegate is destroyed first.
bartfab (slow) 2015/10/16 15:45:25 You are masking a bug here: VPNDelegate expects al
stevenjb 2015/10/16 16:50:07 This is actually correct (but see note below). *
bartfab (slow) 2015/10/16 16:55:22 VPNDelegate will currently DCHECK() in its destruc
stevenjb 2015/10/16 17:46:18 I see. I think this pattern (without the DCHECK on
emaxx 2015/10/16 17:58:10 Bartosz, first of all, thanks for pointing at the
emaxx 2015/10/16 17:58:10 I think the idea behind the existing code is that
stevenjb 2015/10/16 18:06:40 I'm not sure if that is correct. At one point we s
emaxx 2015/10/28 15:14:38 Done.
243 ->system_tray_delegate() 243 SystemTrayDelegate* const system_tray_delegate =
244 ->GetVPNDelegate() 244 Shell::GetInstance()->system_tray_delegate();
245 ->RemoveObserver(this); 245 if (system_tray_delegate)
246 system_tray_delegate->GetVPNDelegate()->RemoveObserver(this);
246 } 247 }
247 248
248 void VPNListView::Update() { 249 void VPNListView::Update() {
249 // Before updating the list, determine whether the user was hovering over one 250 // Before updating the list, determine whether the user was hovering over one
250 // of the VPN provider or network entries. 251 // of the VPN provider or network entries.
251 scoped_ptr<VPNProvider::Key> hovered_provider_key; 252 scoped_ptr<VPNProvider::Key> hovered_provider_key;
252 std::string hovered_network_service_path; 253 std::string hovered_network_service_path;
253 for (const std::pair<const views::View* const, VPNProvider::Key>& provider : 254 for (const std::pair<const views::View* const, VPNProvider::Key>& provider :
254 provider_view_key_map_) { 255 provider_view_key_map_) {
255 if (static_cast<const HoverHighlightView*>(provider.first)->hover()) { 256 if (static_cast<const HoverHighlightView*>(provider.first)->hover()) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 } 411 }
411 } 412 }
412 413
413 // Add providers without any configured networks, in the order that the 414 // Add providers without any configured networks, in the order that the
414 // providers were returned by the extensions system. 415 // providers were returned by the extensions system.
415 for (const VPNProvider& provider : providers) 416 for (const VPNProvider& provider : providers)
416 AddProviderAndNetworks(provider.key, provider.name, networks); 417 AddProviderAndNetworks(provider.key, provider.name, networks);
417 } 418 }
418 419
419 } // namespace ash 420 } // namespace ash
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698