OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/download/download_feedback_dialog_view.h" | 5 #include "chrome/browser/ui/views/download/download_feedback_dialog_view.h" |
6 | 6 |
7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/supports_user_data.h" | 9 #include "base/supports_user_data.h" |
10 #include "chrome/browser/platform_util.h" | |
10 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
11 #include "chrome/browser/ui/views/constrained_window_views.h" | 12 #include "chrome/browser/ui/views/constrained_window_views.h" |
13 #include "content/public/browser/page_navigator.h" | |
12 #include "grit/chromium_strings.h" | 14 #include "grit/chromium_strings.h" |
13 #include "grit/generated_resources.h" | 15 #include "grit/generated_resources.h" |
14 #include "ui/base/l10n/l10n_util.h" | 16 #include "ui/base/l10n/l10n_util.h" |
17 #include "ui/views/controls/link.h" | |
15 #include "ui/views/controls/message_box_view.h" | 18 #include "ui/views/controls/message_box_view.h" |
16 #include "ui/views/widget/widget.h" | 19 #include "ui/views/widget/widget.h" |
17 | 20 |
21 using content::OpenURLParams; | |
22 | |
18 namespace { | 23 namespace { |
19 | 24 |
20 const void* kDialogStatusKey = &kDialogStatusKey; | 25 const void* kDialogStatusKey = &kDialogStatusKey; |
21 | 26 |
22 class DialogStatusData : public base::SupportsUserData::Data { | 27 class DialogStatusData : public base::SupportsUserData::Data { |
23 public: | 28 public: |
24 DialogStatusData() : currently_shown_(false) {} | 29 DialogStatusData() : currently_shown_(false) {} |
25 virtual ~DialogStatusData() {} | 30 virtual ~DialogStatusData() {} |
26 bool currently_shown() const { return currently_shown_; } | 31 bool currently_shown() const { return currently_shown_; } |
27 void set_currently_shown(bool shown) { currently_shown_ = shown; } | 32 void set_currently_shown(bool shown) { currently_shown_ = shown; } |
28 private: | 33 private: |
29 bool currently_shown_; | 34 bool currently_shown_; |
30 }; | 35 }; |
31 | 36 |
32 } // namespace | 37 } // namespace |
33 | 38 |
34 // static | 39 // static |
35 void DownloadFeedbackDialogView::Show( | 40 void DownloadFeedbackDialogView::Show( |
36 gfx::NativeWindow parent_window, | 41 gfx::NativeWindow parent_window, |
37 Profile* profile, | 42 Profile* profile, |
43 content::PageNavigator* navigator, | |
38 const UserDecisionCallback& callback) { | 44 const UserDecisionCallback& callback) { |
39 // This dialog should only be shown if it hasn't been shown before. | 45 // This dialog should only be shown if it hasn't been shown before. |
40 DCHECK(!profile->GetPrefs()->HasPrefPath( | 46 DCHECK(!profile->GetPrefs()->HasPrefPath( |
41 prefs::kSafeBrowsingExtendedReportingEnabled)); | 47 prefs::kSafeBrowsingExtendedReportingEnabled)); |
42 | 48 |
43 // Only one dialog should be shown at a time, so check to see if another one | 49 // Only one dialog should be shown at a time, so check to see if another one |
44 // is open. If another one is open, treat this parallel call as if reporting | 50 // is open. If another one is open, treat this parallel call as if reporting |
45 // is disabled (to be conservative). | 51 // is disabled (to be conservative). |
46 DialogStatusData* data = | 52 DialogStatusData* data = |
47 static_cast<DialogStatusData*>(profile->GetUserData(kDialogStatusKey)); | 53 static_cast<DialogStatusData*>(profile->GetUserData(kDialogStatusKey)); |
48 if (data == NULL) { | 54 if (data == NULL) { |
49 data = new DialogStatusData(); | 55 data = new DialogStatusData(); |
50 profile->SetUserData(kDialogStatusKey, data); | 56 profile->SetUserData(kDialogStatusKey, data); |
51 } | 57 } |
52 if (data->currently_shown() == false) { | 58 if (data->currently_shown() == false) { |
53 data->set_currently_shown(true); | 59 data->set_currently_shown(true); |
54 DownloadFeedbackDialogView* window = | 60 DownloadFeedbackDialogView* window = |
55 new DownloadFeedbackDialogView(profile, callback); | 61 new DownloadFeedbackDialogView(profile, navigator, callback); |
56 CreateBrowserModalDialogViews(window, parent_window)->Show(); | 62 CreateBrowserModalDialogViews(window, parent_window)->Show(); |
57 } else { | 63 } else { |
58 callback.Run(false); | 64 callback.Run(false); |
59 } | 65 } |
60 } | 66 } |
61 | 67 |
62 DownloadFeedbackDialogView::DownloadFeedbackDialogView( | 68 DownloadFeedbackDialogView::DownloadFeedbackDialogView( |
63 Profile* profile, | 69 Profile* profile, |
70 content::PageNavigator* navigator, | |
64 const UserDecisionCallback& callback) | 71 const UserDecisionCallback& callback) |
65 : profile_(profile), | 72 : profile_(profile), |
73 navigator_(navigator), | |
66 callback_(callback), | 74 callback_(callback), |
67 explanation_box_view_(new views::MessageBoxView( | 75 explanation_box_view_(new views::MessageBoxView( |
68 views::MessageBoxView::InitParams(l10n_util::GetStringUTF16( | 76 views::MessageBoxView::InitParams(l10n_util::GetStringUTF16( |
69 IDS_FEEDBACK_SERVICE_DIALOG_EXPLANATION)))), | 77 IDS_FEEDBACK_SERVICE_DIALOG_EXPLANATION)))), |
78 link_view_(new views::Link(l10n_util::GetStringUTF16( | |
79 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE_V2))), | |
70 title_text_(l10n_util::GetStringUTF16(IDS_FEEDBACK_SERVICE_DIALOG_TITLE)), | 80 title_text_(l10n_util::GetStringUTF16(IDS_FEEDBACK_SERVICE_DIALOG_TITLE)), |
71 ok_button_text_(l10n_util::GetStringUTF16( | 81 ok_button_text_(l10n_util::GetStringUTF16( |
72 IDS_FEEDBACK_SERVICE_DIALOG_OK_BUTTON_LABEL)), | 82 IDS_FEEDBACK_SERVICE_DIALOG_OK_BUTTON_LABEL)), |
73 cancel_button_text_(l10n_util::GetStringUTF16( | 83 cancel_button_text_(l10n_util::GetStringUTF16( |
74 IDS_FEEDBACK_SERVICE_DIALOG_CANCEL_BUTTON_LABEL)) { | 84 IDS_FEEDBACK_SERVICE_DIALOG_CANCEL_BUTTON_LABEL)) { |
85 link_view_->set_listener(this); | |
75 } | 86 } |
76 | 87 |
77 DownloadFeedbackDialogView::~DownloadFeedbackDialogView() {} | 88 DownloadFeedbackDialogView::~DownloadFeedbackDialogView() {} |
78 | 89 |
79 int DownloadFeedbackDialogView::GetDefaultDialogButton() const { | 90 int DownloadFeedbackDialogView::GetDefaultDialogButton() const { |
80 return ui::DIALOG_BUTTON_CANCEL; | 91 return ui::DIALOG_BUTTON_CANCEL; |
81 } | 92 } |
82 | 93 |
83 base::string16 DownloadFeedbackDialogView::GetDialogButtonLabel( | 94 base::string16 DownloadFeedbackDialogView::GetDialogButtonLabel( |
84 ui::DialogButton button) const { | 95 ui::DialogButton button) const { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 return explanation_box_view_->GetWidget(); | 135 return explanation_box_view_->GetWidget(); |
125 } | 136 } |
126 | 137 |
127 const views::Widget* DownloadFeedbackDialogView::GetWidget() const { | 138 const views::Widget* DownloadFeedbackDialogView::GetWidget() const { |
128 return explanation_box_view_->GetWidget(); | 139 return explanation_box_view_->GetWidget(); |
129 } | 140 } |
130 | 141 |
131 views::View* DownloadFeedbackDialogView::GetContentsView() { | 142 views::View* DownloadFeedbackDialogView::GetContentsView() { |
132 return explanation_box_view_; | 143 return explanation_box_view_; |
133 } | 144 } |
145 | |
146 views::View* DownloadFeedbackDialogView::CreateExtraView() { | |
147 return link_view_; | |
148 } | |
149 | |
150 void DownloadFeedbackDialogView::LinkClicked( | |
151 views::Link* source, int event_flags) { | |
152 WindowOpenDisposition disposition = | |
153 ui::DispositionFromEventFlags(event_flags); | |
154 content::OpenURLParams params( | |
155 GURL(l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL)), | |
156 content::Referrer(), | |
157 disposition == CURRENT_TAB ? NEW_FOREGROUND_TAB : disposition, | |
158 content::PAGE_TRANSITION_LINK, false); | |
159 navigator_->OpenURL(params); | |
sky
2014/06/17 19:11:28
How do you know navigator_ is still valid by the t
felt
2014/06/17 20:27:31
The navigator is from the download shelf, which wo
sky
2014/06/17 23:54:41
DCHECK(navigator_) wouldn't tell if you the object
| |
160 } | |
OLD | NEW |