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 |