Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/ui/views/network_profile_bubble.h" | 5 #include "chrome/browser/ui/views/network_profile_bubble.h" |
| 6 | 6 |
| 7 #include <wtsapi32.h> | 7 #include <wtsapi32.h> |
| 8 // Make sure we link the wtsapi lib file in. | 8 // Make sure we link the wtsapi lib file in. |
| 9 #pragma comment(lib, "wtsapi32.lib") | 9 #pragma comment(lib, "wtsapi32.lib") |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/file_path.h" | 13 #include "base/file_path.h" |
| 14 #include "base/file_util.h" | 14 #include "base/file_util.h" |
| 15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
| 17 #include "chrome/browser/prefs/pref_service.h" | 17 #include "chrome/browser/prefs/pref_service.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/ui/browser.h" | |
| 19 #include "chrome/browser/ui/browser_list.h" | 20 #include "chrome/browser/ui/browser_list.h" |
|
sky
2012/05/23 00:03:10
Can you remove this include now?
| |
| 20 #include "chrome/browser/ui/network_profile_bubble_prefs.h" | 21 #include "chrome/browser/ui/network_profile_bubble_prefs.h" |
| 21 #include "chrome/browser/ui/views/event_utils.h" | 22 #include "chrome/browser/ui/views/event_utils.h" |
| 22 #include "chrome/browser/ui/views/frame/browser_view.h" | 23 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 23 #include "chrome/browser/ui/views/toolbar_view.h" | 24 #include "chrome/browser/ui/views/toolbar_view.h" |
| 24 #include "chrome/common/chrome_switches.h" | 25 #include "chrome/common/chrome_switches.h" |
| 25 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
| 26 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
| 27 #include "grit/chromium_strings.h" | 28 #include "grit/chromium_strings.h" |
| 28 #include "grit/generated_resources.h" | 29 #include "grit/generated_resources.h" |
| 29 #include "ui/base/l10n/l10n_util.h" | 30 #include "ui/base/l10n/l10n_util.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 event, | 76 event, |
| 76 METRIC_NETWORKED_PROFILE_CHECK_SIZE); | 77 METRIC_NETWORKED_PROFILE_CHECK_SIZE); |
| 77 } | 78 } |
| 78 | 79 |
| 79 // Implementation of BrowserList::Observer used to wait for a browser window. | 80 // Implementation of BrowserList::Observer used to wait for a browser window. |
| 80 class BrowserListObserver : public BrowserList::Observer { | 81 class BrowserListObserver : public BrowserList::Observer { |
| 81 private: | 82 private: |
| 82 virtual ~BrowserListObserver(); | 83 virtual ~BrowserListObserver(); |
| 83 | 84 |
| 84 // Overridden from BrowserList::Observer: | 85 // Overridden from BrowserList::Observer: |
| 85 virtual void OnBrowserAdded(const Browser* browser) OVERRIDE; | 86 virtual void OnBrowserAdded(Browser* browser) OVERRIDE; |
| 86 virtual void OnBrowserRemoved(const Browser* browser) OVERRIDE; | 87 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; |
| 87 virtual void OnBrowserSetLastActive(const Browser* browser) OVERRIDE; | 88 virtual void OnBrowserSetLastActive(Browser* browser) OVERRIDE; |
| 88 }; | 89 }; |
| 89 | 90 |
| 90 BrowserListObserver::~BrowserListObserver() { | 91 BrowserListObserver::~BrowserListObserver() { |
| 91 } | 92 } |
| 92 | 93 |
| 93 void BrowserListObserver::OnBrowserAdded(const Browser* browser) { | 94 void BrowserListObserver::OnBrowserAdded(Browser* browser) { |
| 94 } | 95 } |
| 95 | 96 |
| 96 void BrowserListObserver::OnBrowserRemoved(const Browser* browser) { | 97 void BrowserListObserver::OnBrowserRemoved(Browser* browser) { |
| 97 } | 98 } |
| 98 | 99 |
| 99 void BrowserListObserver::OnBrowserSetLastActive(const Browser* browser) { | 100 void BrowserListObserver::OnBrowserSetLastActive(Browser* browser) { |
| 100 NetworkProfileBubble::ShowNotification(browser); | 101 NetworkProfileBubble::ShowNotification(browser); |
| 101 // No need to observe anymore. | 102 // No need to observe anymore. |
| 102 BrowserList::RemoveObserver(this); | 103 BrowserList::RemoveObserver(this); |
| 103 delete this; | 104 delete this; |
| 104 } | 105 } |
| 105 | 106 |
| 106 } // namespace | 107 } // namespace |
| 107 | 108 |
| 108 // static | 109 // static |
| 109 bool NetworkProfileBubble::notification_shown_ = false; | 110 bool NetworkProfileBubble::notification_shown_ = false; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 base::Time::Now() - base::Time::FromTimeT(last_check); | 184 base::Time::Now() - base::Time::FromTimeT(last_check); |
| 184 if (time_since_last_check.InDays() > kSilenceDurationDays) { | 185 if (time_since_last_check.InDays() > kSilenceDurationDays) { |
| 185 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, | 186 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, |
| 186 browser::kMaxWarnings); | 187 browser::kMaxWarnings); |
| 187 return !notification_shown_; | 188 return !notification_shown_; |
| 188 } | 189 } |
| 189 return false; | 190 return false; |
| 190 } | 191 } |
| 191 | 192 |
| 192 // static | 193 // static |
| 193 void NetworkProfileBubble::ShowNotification(const Browser* browser) { | 194 void NetworkProfileBubble::ShowNotification(Browser* browser) { |
| 194 views::View* anchor = NULL; | 195 views::View* anchor = NULL; |
| 195 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); | 196 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); |
| 196 if (browser_view && browser_view->GetToolbarView()) | 197 if (browser_view && browser_view->GetToolbarView()) |
| 197 anchor = browser_view->GetToolbarView()->app_menu(); | 198 anchor = browser_view->GetToolbarView()->app_menu(); |
| 198 NetworkProfileBubble* bubble = new NetworkProfileBubble(anchor); | 199 NetworkProfileBubble* bubble = |
| 200 new NetworkProfileBubble(anchor, browser, browser->profile()); | |
| 199 views::BubbleDelegateView::CreateBubble(bubble); | 201 views::BubbleDelegateView::CreateBubble(bubble); |
| 200 bubble->Show(); | 202 bubble->Show(); |
| 201 notification_shown_ = true; | 203 notification_shown_ = true; |
| 202 | 204 |
| 203 // Mark the time of the last bubble and reduce the number of warnings left | 205 // Mark the time of the last bubble and reduce the number of warnings left |
| 204 // before the next silence period starts. | 206 // before the next silence period starts. |
| 205 PrefService* prefs = browser->profile()->GetPrefs(); | 207 PrefService* prefs = browser->profile()->GetPrefs(); |
| 206 prefs->SetInt64(prefs::kNetworkProfileLastWarningTime, | 208 prefs->SetInt64(prefs::kNetworkProfileLastWarningTime, |
| 207 base::Time::Now().ToTimeT()); | 209 base::Time::Now().ToTimeT()); |
| 208 int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft); | 210 int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft); |
| 209 if (left_warnings > 0) | 211 if (left_warnings > 0) |
| 210 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, --left_warnings); | 212 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, --left_warnings); |
| 211 } | 213 } |
| 212 | 214 |
| 213 //////////////////////////////////////////////////////////////////////////////// | 215 //////////////////////////////////////////////////////////////////////////////// |
| 214 // NetworkProfileBubble, private: | 216 // NetworkProfileBubble, private: |
| 215 | 217 |
| 216 NetworkProfileBubble::NetworkProfileBubble(views::View* anchor) | 218 NetworkProfileBubble::NetworkProfileBubble(views::View* anchor, |
| 217 : BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT) { | 219 content::PageNavigator* navigator, |
| 220 Profile* profile) | |
| 221 : BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT), | |
| 222 navigator_(navigator), | |
| 223 profile_(profile) { | |
| 218 } | 224 } |
| 219 | 225 |
| 220 NetworkProfileBubble::~NetworkProfileBubble() { | 226 NetworkProfileBubble::~NetworkProfileBubble() { |
| 221 } | 227 } |
| 222 | 228 |
| 223 void NetworkProfileBubble::Init() { | 229 void NetworkProfileBubble::Init() { |
| 224 views::GridLayout* layout = views::GridLayout::CreatePanel(this); | 230 views::GridLayout* layout = views::GridLayout::CreatePanel(this); |
| 225 layout->SetInsets(0, kInset, kInset, kInset); | 231 layout->SetInsets(0, kInset, kInset, kInset); |
| 226 SetLayoutManager(layout); | 232 SetLayoutManager(layout); |
| 227 | 233 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 | 267 |
| 262 gfx::Rect NetworkProfileBubble::GetAnchorRect() { | 268 gfx::Rect NetworkProfileBubble::GetAnchorRect() { |
| 263 // Compensate for padding in anchor. | 269 // Compensate for padding in anchor. |
| 264 gfx::Rect rect(BubbleDelegateView::GetAnchorRect()); | 270 gfx::Rect rect(BubbleDelegateView::GetAnchorRect()); |
| 265 rect.Inset(0, anchor_view() ? kAnchorVerticalInset : 0); | 271 rect.Inset(0, anchor_view() ? kAnchorVerticalInset : 0); |
| 266 return rect; | 272 return rect; |
| 267 } | 273 } |
| 268 | 274 |
| 269 void NetworkProfileBubble::LinkClicked(views::Link* source, int event_flags) { | 275 void NetworkProfileBubble::LinkClicked(views::Link* source, int event_flags) { |
| 270 RecordUmaEvent(METRIC_LEARN_MORE_CLICKED); | 276 RecordUmaEvent(METRIC_LEARN_MORE_CLICKED); |
| 271 Browser* browser = BrowserList::GetLastActive(); | 277 WindowOpenDisposition disposition = |
| 272 if (browser) { | 278 event_utils::DispositionFromEventFlags(event_flags); |
| 273 WindowOpenDisposition disposition = | 279 content::OpenURLParams params( |
| 274 event_utils::DispositionFromEventFlags(event_flags); | 280 GURL("https://sites.google.com/a/chromium.org/dev/administrators/" |
| 275 content::OpenURLParams params( | 281 "common-problems-and-solutions#network_profile"), |
| 276 GURL("https://sites.google.com/a/chromium.org/dev/administrators/" | 282 content::Referrer(), |
| 277 "common-problems-and-solutions#network_profile"), | 283 disposition == CURRENT_TAB ? NEW_FOREGROUND_TAB : disposition, |
| 278 content::Referrer(), | 284 content::PAGE_TRANSITION_LINK, false); |
| 279 disposition == CURRENT_TAB ? NEW_FOREGROUND_TAB : disposition, | 285 navigator_->OpenURL(params); |
| 280 content::PAGE_TRANSITION_LINK, false); | 286 |
| 281 browser->OpenURL(params); | 287 // If the user interacted with the bubble we don't reduce the number of |
| 282 // If the user interacted with the bubble we don't reduce the number of | 288 // warnings left. |
| 283 // warnings left. | 289 PrefService* prefs = profile_->GetPrefs(); |
| 284 PrefService* prefs = browser->profile()->GetPrefs(); | 290 int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft); |
| 285 int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft); | 291 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, ++left_warnings); |
| 286 prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, ++left_warnings); | |
| 287 } | |
| 288 GetWidget()->Close(); | 292 GetWidget()->Close(); |
| 289 } | 293 } |
| 290 | 294 |
| 291 void NetworkProfileBubble::ButtonPressed(views::Button* sender, | 295 void NetworkProfileBubble::ButtonPressed(views::Button* sender, |
| 292 const views::Event& event) { | 296 const views::Event& event) { |
| 293 RecordUmaEvent(METRIC_ACKNOWLEDGED); | 297 RecordUmaEvent(METRIC_ACKNOWLEDGED); |
| 294 | 298 |
| 295 GetWidget()->Close(); | 299 GetWidget()->Close(); |
| 296 } | 300 } |
| 297 | 301 |
| 298 // static | 302 // static |
| 299 void NetworkProfileBubble::NotifyNetworkProfileDetected() { | 303 void NetworkProfileBubble::NotifyNetworkProfileDetected() { |
| 300 if (BrowserList::GetLastActive() != NULL) | 304 if (BrowserList::GetLastActive() != NULL) |
| 301 ShowNotification(BrowserList::GetLastActive()); | 305 ShowNotification(BrowserList::GetLastActive()); |
| 302 else | 306 else |
| 303 BrowserList::AddObserver(new BrowserListObserver()); | 307 BrowserList::AddObserver(new BrowserListObserver()); |
| 304 } | 308 } |
| OLD | NEW |