OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/media/chrome_midi_permission_context.h" | 5 #include "chrome/browser/media/chrome_midi_permission_context.h" |
6 | 6 |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "chrome/browser/content_settings/host_content_settings_map.h" | 8 #include "chrome/browser/content_settings/host_content_settings_map.h" |
9 #include "chrome/browser/content_settings/permission_queue_controller.h" | 9 #include "chrome/browser/content_settings/permission_queue_controller.h" |
10 #include "chrome/browser/content_settings/permission_request_id.h" | 10 #include "chrome/browser/content_settings/permission_request_id.h" |
11 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 11 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
13 #include "chrome/browser/tab_contents/tab_util.h" | 13 #include "chrome/browser/tab_contents/tab_util.h" |
14 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | |
15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | |
16 #include "chrome/common/pref_names.h" | |
14 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
19 #include "grit/generated_resources.h" | |
20 #include "net/base/net_util.h" | |
21 #include "ui/base/l10n/l10n_util.h" | |
22 | |
23 class MidiPermissionRequest : public PermissionBubbleRequest { | |
24 public: | |
25 MidiPermissionRequest( | |
26 ChromeMidiPermissionContext* context, | |
27 const PermissionRequestID& id, | |
28 const GURL& requesting_frame, | |
29 const std::string& display_languages, | |
30 const content::BrowserContext::MidiSysExPermissionCallback& callback); | |
31 virtual ~MidiPermissionRequest(); | |
32 | |
33 // PermissionBubbleDelegate: | |
34 virtual base::string16 GetMessageText() const OVERRIDE; | |
35 virtual base::string16 GetMessageTextFragment() const OVERRIDE; | |
36 virtual base::string16 GetAlternateAcceptButtonText() const OVERRIDE; | |
37 virtual base::string16 GetAlternateDenyButtonText() const OVERRIDE; | |
38 virtual void PermissionGranted() OVERRIDE; | |
39 virtual void PermissionDenied() OVERRIDE; | |
40 virtual void Cancelled() OVERRIDE; | |
41 virtual void RequestFinished() OVERRIDE; | |
42 | |
43 private: | |
44 ChromeMidiPermissionContext* context_; | |
45 const PermissionRequestID id_; | |
46 GURL requesting_frame_; | |
47 std::string display_languages_; | |
48 const content::BrowserContext::MidiSysExPermissionCallback& callback_; | |
49 | |
50 DISALLOW_COPY_AND_ASSIGN(MidiPermissionRequest); | |
51 }; | |
52 | |
53 MidiPermissionRequest::MidiPermissionRequest( | |
54 ChromeMidiPermissionContext* context, | |
55 const PermissionRequestID& id, | |
56 const GURL& requesting_frame, | |
57 const std::string& display_languages, | |
58 const content::BrowserContext::MidiSysExPermissionCallback& callback) | |
59 : context_(context), | |
60 id_(id), | |
61 requesting_frame_(requesting_frame), | |
62 display_languages_(display_languages), | |
63 callback_(callback) {} | |
64 | |
65 MidiPermissionRequest::~MidiPermissionRequest() {} | |
66 | |
67 base::string16 MidiPermissionRequest::GetMessageText() const { | |
68 return l10n_util::GetStringFUTF16( | |
69 IDS_MIDI_SYSEX_INFOBAR_QUESTION, | |
70 net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_)); | |
71 } | |
72 | |
73 base::string16 MidiPermissionRequest::GetMessageTextFragment() const { | |
74 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_PERMISSION_FRAGMENT); | |
75 } | |
76 | |
77 base::string16 MidiPermissionRequest::GetAlternateAcceptButtonText() const { | |
78 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_ALLOW_BUTTON); | |
79 } | |
80 | |
81 base::string16 MidiPermissionRequest::GetAlternateDenyButtonText() const { | |
82 return l10n_util::GetStringUTF16(IDS_MIDI_SYSEX_DENY_BUTTON); | |
83 } | |
84 | |
85 void MidiPermissionRequest::PermissionGranted() { | |
86 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true); | |
87 } | |
88 | |
89 void MidiPermissionRequest::PermissionDenied() { | |
90 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); | |
91 } | |
92 | |
93 void MidiPermissionRequest::Cancelled() { | |
94 context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false); | |
95 } | |
96 | |
97 void MidiPermissionRequest::RequestFinished() { | |
98 delete this; | |
99 } | |
16 | 100 |
17 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) | 101 ChromeMidiPermissionContext::ChromeMidiPermissionContext(Profile* profile) |
18 : profile_(profile), | 102 : profile_(profile), |
19 shutting_down_(false) { | 103 shutting_down_(false) { |
20 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 104 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
21 } | 105 } |
22 | 106 |
23 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() { | 107 ChromeMidiPermissionContext::~ChromeMidiPermissionContext() { |
24 DCHECK(!permission_queue_controller_); | 108 DCHECK(!permission_queue_controller_); |
25 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 109 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
58 // Any user's action will not be stored to content settings data base. | 142 // Any user's action will not be stored to content settings data base. |
59 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || | 143 if ((!requesting_frame.is_valid() && !requesting_frame.is_empty()) || |
60 !embedder.is_valid()) { | 144 !embedder.is_valid()) { |
61 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " | 145 LOG(WARNING) << "Attempt to use MIDI sysex from an invalid URL: " |
62 << requesting_frame << "," << embedder | 146 << requesting_frame << "," << embedder |
63 << " (Web MIDI is not supported in popups)"; | 147 << " (Web MIDI is not supported in popups)"; |
64 PermissionDecided(id, requesting_frame, embedder, callback, false); | 148 PermissionDecided(id, requesting_frame, embedder, callback, false); |
65 return; | 149 return; |
66 } | 150 } |
67 | 151 |
68 DecidePermission(id, requesting_frame, embedder, callback); | 152 DecidePermission(web_contents, id, requesting_frame, embedder, callback); |
69 } | 153 } |
70 | 154 |
71 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( | 155 void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest( |
72 int render_process_id, | 156 int render_process_id, |
73 int render_view_id, | 157 int render_view_id, |
74 int bridge_id, | 158 int bridge_id, |
75 const GURL& requesting_frame) { | 159 const GURL& requesting_frame) { |
76 CancelPendingInfobarRequest( | 160 CancelPendingInfobarRequest( |
77 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0)); | 161 PermissionRequestID(render_process_id, render_view_id, bridge_id, 0)); |
78 } | 162 } |
79 | 163 |
80 void ChromeMidiPermissionContext::DecidePermission( | 164 void ChromeMidiPermissionContext::DecidePermission( |
165 content::WebContents* web_contents, | |
81 const PermissionRequestID& id, | 166 const PermissionRequestID& id, |
82 const GURL& requesting_frame, | 167 const GURL& requesting_frame, |
83 const GURL& embedder, | 168 const GURL& embedder, |
84 const content::BrowserContext::MidiSysExPermissionCallback& callback) { | 169 const content::BrowserContext::MidiSysExPermissionCallback& callback) { |
85 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 170 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
86 | 171 |
87 ContentSetting content_setting = | 172 ContentSetting content_setting = |
88 profile_->GetHostContentSettingsMap()->GetContentSetting( | 173 profile_->GetHostContentSettingsMap()->GetContentSetting( |
89 requesting_frame, | 174 requesting_frame, |
90 embedder, | 175 embedder, |
91 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, | 176 CONTENT_SETTINGS_TYPE_MIDI_SYSEX, |
92 std::string()); | 177 std::string()); |
93 switch (content_setting) { | 178 switch (content_setting) { |
94 case CONTENT_SETTING_BLOCK: | 179 case CONTENT_SETTING_BLOCK: |
95 PermissionDecided(id, requesting_frame, embedder, callback, false); | 180 PermissionDecided(id, requesting_frame, embedder, callback, false); |
96 break; | 181 break; |
97 case CONTENT_SETTING_ALLOW: | 182 case CONTENT_SETTING_ALLOW: |
98 PermissionDecided(id, requesting_frame, embedder, callback, true); | 183 PermissionDecided(id, requesting_frame, embedder, callback, true); |
99 break; | 184 break; |
100 default: | 185 default: |
186 if (PermissionBubbleManager::Enabled()) { | |
187 PermissionBubbleManager* bubble_manager = | |
188 PermissionBubbleManager::FromWebContents(web_contents); | |
189 bubble_manager->AddRequest(new MidiPermissionRequest( | |
190 this, id, requesting_frame, | |
191 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), | |
192 callback)); | |
193 return; | |
194 } | |
195 | |
196 // TODO(gbillock): Delete this and the infobar delegate when | |
197 // we're using only bubbles. crbug.com/337458 | |
101 GetQueueController()->CreateInfoBarRequest( | 198 GetQueueController()->CreateInfoBarRequest( |
102 id, requesting_frame, embedder, base::Bind( | 199 id, requesting_frame, embedder, base::Bind( |
103 &ChromeMidiPermissionContext::NotifyPermissionSet, | 200 &ChromeMidiPermissionContext::NotifyPermissionSet, |
104 base::Unretained(this), id, requesting_frame, callback)); | 201 base::Unretained(this), id, requesting_frame, callback)); |
105 } | 202 } |
106 } | 203 } |
107 | 204 |
108 void ChromeMidiPermissionContext::PermissionDecided( | 205 void ChromeMidiPermissionContext::PermissionDecided( |
109 const PermissionRequestID& id, | 206 const PermissionRequestID& id, |
110 const GURL& requesting_frame, | 207 const GURL& requesting_frame, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); | 239 CONTENT_SETTINGS_TYPE_MIDI_SYSEX)); |
143 } | 240 } |
144 return permission_queue_controller_.get(); | 241 return permission_queue_controller_.get(); |
145 } | 242 } |
146 | 243 |
147 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( | 244 void ChromeMidiPermissionContext::CancelPendingInfobarRequest( |
148 const PermissionRequestID& id) { | 245 const PermissionRequestID& id) { |
149 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 246 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
150 if (shutting_down_) | 247 if (shutting_down_) |
151 return; | 248 return; |
249 // TODO(gbillock): Add support for cancellation to permission bubbles. | |
Ami GONE FROM CHROMIUM
2014/02/07 18:25:35
Last clause makes me think there should be a comme
Greg Billock
2014/02/10 23:57:10
There's a fair amount of work left before flag fli
| |
152 GetQueueController()->CancelInfoBarRequest(id); | 250 GetQueueController()->CancelInfoBarRequest(id); |
153 } | 251 } |
OLD | NEW |