summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/browser/aw_browser_context.cc1
-rw-r--r--android_webview/browser/aw_browser_context.h1
-rw-r--r--chrome/browser/media/chrome_midi_permission_context.cc14
-rw-r--r--chrome/browser/media/chrome_midi_permission_context.h2
-rw-r--r--chrome/browser/media/media_stream_devices_controller.cc3
-rw-r--r--chrome/browser/policy/policy_browsertest.cc4
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.cc2
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.h1
-rw-r--r--chrome/browser/profiles/profile_impl.cc2
-rw-r--r--chrome/browser/profiles/profile_impl.h1
-rw-r--r--chrome/browser/ui/app_list/test/fake_profile.cc1
-rw-r--r--chrome/browser/ui/app_list/test/fake_profile.h1
-rw-r--r--chrome/test/base/testing_profile.cc1
-rw-r--r--chrome/test/base/testing_profile.h1
-rw-r--r--content/browser/download/download_manager_impl_unittest.cc3
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host.cc8
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc2
-rw-r--r--content/browser/renderer_host/media/media_stream_manager.cc13
-rw-r--r--content/browser/renderer_host/media/media_stream_manager.h3
-rw-r--r--content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc9
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.cc4
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.h3
-rw-r--r--content/common/media/media_stream_messages.h5
-rw-r--r--content/common/media/midi_messages.h5
-rw-r--r--content/public/browser/browser_context.h1
-rw-r--r--content/public/common/media_stream_request.cc2
-rw-r--r--content/public/common/media_stream_request.h4
-rw-r--r--content/public/test/test_browser_context.cc1
-rw-r--r--content/public/test/test_browser_context.h1
-rw-r--r--content/renderer/media/media_stream_dispatcher.cc8
-rw-r--r--content/renderer/media/midi_dispatcher.cc4
-rw-r--r--content/shell/browser/shell_browser_context.cc1
-rw-r--r--content/shell/browser/shell_browser_context.h1
34 files changed, 85 insertions, 31 deletions
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc
index 8c1e0ec..9ef21e5 100644
--- a/android_webview/browser/aw_browser_context.cc
+++ b/android_webview/browser/aw_browser_context.cc
@@ -171,6 +171,7 @@ void AwBrowserContext::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
// TODO(toyoshim): Android WebView is not supported yet.
// See http://crbug.com/339767.
diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h
index 0aa47c3..d4d3734 100644
--- a/android_webview/browser/aw_browser_context.h
+++ b/android_webview/browser/aw_browser_context.h
@@ -93,6 +93,7 @@ class AwBrowserContext : public content::BrowserContext,
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/chrome/browser/media/chrome_midi_permission_context.cc b/chrome/browser/media/chrome_midi_permission_context.cc
index 062be1c..657b265 100644
--- a/chrome/browser/media/chrome_midi_permission_context.cc
+++ b/chrome/browser/media/chrome_midi_permission_context.cc
@@ -27,6 +27,7 @@ class MidiPermissionRequest : public PermissionBubbleRequest {
ChromeMidiPermissionContext* context,
const PermissionRequestID& id,
const GURL& requesting_frame,
+ bool user_gesture,
const std::string& display_languages,
const content::BrowserContext::MidiSysExPermissionCallback& callback);
virtual ~MidiPermissionRequest();
@@ -46,6 +47,7 @@ class MidiPermissionRequest : public PermissionBubbleRequest {
ChromeMidiPermissionContext* context_;
const PermissionRequestID id_;
GURL requesting_frame_;
+ bool user_gesture_;
std::string display_languages_;
const content::BrowserContext::MidiSysExPermissionCallback& callback_;
@@ -56,11 +58,13 @@ MidiPermissionRequest::MidiPermissionRequest(
ChromeMidiPermissionContext* context,
const PermissionRequestID& id,
const GURL& requesting_frame,
+ bool user_gesture,
const std::string& display_languages,
const content::BrowserContext::MidiSysExPermissionCallback& callback)
: context_(context),
id_(id),
requesting_frame_(requesting_frame),
+ user_gesture_(user_gesture),
display_languages_(display_languages),
callback_(callback) {}
@@ -81,8 +85,7 @@ base::string16 MidiPermissionRequest::GetMessageTextFragment() const {
}
bool MidiPermissionRequest::HasUserGesture() const {
- // TODO(gbillock): plumb through.
- return false;
+ return user_gesture_;
}
GURL MidiPermissionRequest::GetRequestingHostname() const {
@@ -127,6 +130,7 @@ void ChromeMidiPermissionContext::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const content::BrowserContext::MidiSysExPermissionCallback& callback) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
DCHECK(!shutting_down_);
@@ -156,7 +160,8 @@ void ChromeMidiPermissionContext::RequestMidiSysExPermission(
return;
}
- DecidePermission(web_contents, id, requesting_frame, embedder, callback);
+ DecidePermission(web_contents, id, requesting_frame, embedder, user_gesture,
+ callback);
}
void ChromeMidiPermissionContext::CancelMidiSysExPermissionRequest(
@@ -173,6 +178,7 @@ void ChromeMidiPermissionContext::DecidePermission(
const PermissionRequestID& id,
const GURL& requesting_frame,
const GURL& embedder,
+ bool user_gesture,
const content::BrowserContext::MidiSysExPermissionCallback& callback) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
@@ -194,7 +200,7 @@ void ChromeMidiPermissionContext::DecidePermission(
PermissionBubbleManager* bubble_manager =
PermissionBubbleManager::FromWebContents(web_contents);
bubble_manager->AddRequest(new MidiPermissionRequest(
- this, id, requesting_frame,
+ this, id, requesting_frame, user_gesture,
profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
callback));
return;
diff --git a/chrome/browser/media/chrome_midi_permission_context.h b/chrome/browser/media/chrome_midi_permission_context.h
index 0bc1daa..f292e7b 100644
--- a/chrome/browser/media/chrome_midi_permission_context.h
+++ b/chrome/browser/media/chrome_midi_permission_context.h
@@ -33,6 +33,7 @@ class ChromeMidiPermissionContext : public KeyedService {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const content::BrowserContext::MidiSysExPermissionCallback& callback);
// Cancel a pending MIDI permission request.
@@ -59,6 +60,7 @@ class ChromeMidiPermissionContext : public KeyedService {
const PermissionRequestID& id,
const GURL& requesting_frame,
const GURL& embedder,
+ bool user_gesture,
const content::BrowserContext::MidiSysExPermissionCallback& callback);
// Called when permission is granted without interactively asking the user.
diff --git a/chrome/browser/media/media_stream_devices_controller.cc b/chrome/browser/media/media_stream_devices_controller.cc
index efde765..cbe41d7 100644
--- a/chrome/browser/media/media_stream_devices_controller.cc
+++ b/chrome/browser/media/media_stream_devices_controller.cc
@@ -388,8 +388,7 @@ base::string16 MediaStreamDevicesController::GetMessageTextFragment() const {
}
bool MediaStreamDevicesController::HasUserGesture() const {
- // TODO(gbillock): plumb this through
- return false;
+ return request_.user_gesture;
}
GURL MediaStreamDevicesController::GetRequestingHostname() const {
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 5426691..d1f49a3 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -2734,7 +2734,7 @@ class MediaStreamDevicesControllerBrowserTest
void FinishAudioTest() {
content::MediaStreamRequest request(0, 0, 0,
- request_url_.GetOrigin(),
+ request_url_.GetOrigin(), false,
content::MEDIA_DEVICE_ACCESS,
std::string(), std::string(),
content::MEDIA_DEVICE_AUDIO_CAPTURE,
@@ -2753,7 +2753,7 @@ class MediaStreamDevicesControllerBrowserTest
// TODO(raymes): Test MEDIA_DEVICE_OPEN (Pepper) which grants both webcam
// and microphone permissions at the same time.
content::MediaStreamRequest request(0, 0, 0,
- request_url_.GetOrigin(),
+ request_url_.GetOrigin(), false,
content::MEDIA_DEVICE_ACCESS,
std::string(),
std::string(),
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index b73a0ec..13c48be 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -321,6 +321,7 @@ void OffTheRecordProfileImpl::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
ChromeMidiPermissionContext* context =
ChromeMidiPermissionContextFactory::GetForProfile(this);
@@ -328,6 +329,7 @@ void OffTheRecordProfileImpl::RequestMidiSysExPermission(
render_view_id,
bridge_id,
requesting_frame,
+ user_gesture,
callback);
}
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.h b/chrome/browser/profiles/off_the_record_profile_impl.h
index 41577b1..8a66045 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.h
+++ b/chrome/browser/profiles/off_the_record_profile_impl.h
@@ -105,6 +105,7 @@ class OffTheRecordProfileImpl : public Profile {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index bd46756..4f434b9 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -939,6 +939,7 @@ void ProfileImpl::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
ChromeMidiPermissionContext* context =
ChromeMidiPermissionContextFactory::GetForProfile(this);
@@ -946,6 +947,7 @@ void ProfileImpl::RequestMidiSysExPermission(
render_view_id,
bridge_id,
requesting_frame,
+ user_gesture,
callback);
}
diff --git a/chrome/browser/profiles/profile_impl.h b/chrome/browser/profiles/profile_impl.h
index f923cad..ec314d9 100644
--- a/chrome/browser/profiles/profile_impl.h
+++ b/chrome/browser/profiles/profile_impl.h
@@ -80,6 +80,7 @@ class ProfileImpl : public Profile {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/chrome/browser/ui/app_list/test/fake_profile.cc b/chrome/browser/ui/app_list/test/fake_profile.cc
index 36277cd..41ebb25 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.cc
+++ b/chrome/browser/ui/app_list/test/fake_profile.cc
@@ -61,6 +61,7 @@ void FakeProfile::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
}
diff --git a/chrome/browser/ui/app_list/test/fake_profile.h b/chrome/browser/ui/app_list/test/fake_profile.h
index eee7499..12ba769 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.h
+++ b/chrome/browser/ui/app_list/test/fake_profile.h
@@ -49,6 +49,7 @@ class FakeProfile : public Profile {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 6352262..11886bb 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -739,6 +739,7 @@ void TestingProfile::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
// Always reject requests for testing.
callback.Run(false);
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index 497247d..10f6088 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -281,6 +281,7 @@ class TestingProfile : public Profile {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 5bc237b..5ab23a8 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -406,11 +406,12 @@ class MockBrowserContext : public BrowserContext {
MOCK_METHOD2(GetMediaRequestContextForStoragePartition,
net::URLRequestContextGetter*(
const base::FilePath& partition_path, bool in_memory));
- MOCK_METHOD5(RequestMidiSysExPermission,
+ MOCK_METHOD6(RequestMidiSysExPermission,
void(int render_process_id,
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback));
MOCK_METHOD4(CancelMidiSysExPermissionRequest,
void(int render_process_id,
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
index 1708c50..0698e21 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -127,21 +127,23 @@ void MediaStreamDispatcherHost::OnGenerateStream(
int render_view_id,
int page_request_id,
const StreamOptions& components,
- const GURL& security_origin) {
+ const GURL& security_origin,
+ bool user_gesture) {
DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream("
<< render_view_id << ", "
<< page_request_id << ", ["
<< " audio:" << components.audio_requested
<< " video:" << components.video_requested
<< " ], "
- << security_origin.spec() << ")";
+ << security_origin.spec()
+ << ", " << user_gesture << ")";
if (!IsURLAllowed(security_origin))
return;
media_stream_manager_->GenerateStream(
this, render_process_id_, render_view_id, salt_callback_,
- page_request_id, components, security_origin);
+ page_request_id, components, security_origin, user_gesture);
}
void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id,
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.h b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
index 4149586..f34054e 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.h
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
@@ -68,7 +68,8 @@ class CONTENT_EXPORT MediaStreamDispatcherHost : public BrowserMessageFilter,
void OnGenerateStream(int render_view_id,
int page_request_id,
const StreamOptions& components,
- const GURL& security_origin);
+ const GURL& security_origin,
+ bool user_gesture);
void OnCancelGenerateStream(int render_view_id,
int page_request_id);
void OnStopStreamDevice(int render_view_id,
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
index d9331cd..65f2618 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -68,7 +68,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
const base::Closure& quit_closure) {
quit_closures_.push(quit_closure);
MediaStreamDispatcherHost::OnGenerateStream(
- render_view_id, page_request_id, components, security_origin);
+ render_view_id, page_request_id, components, security_origin, false);
}
void OnStopStreamDevice(int render_view_id,
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index 839c0cb..2740db4 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -173,6 +173,7 @@ class MediaStreamManager::DeviceRequest {
int requesting_view_id,
int page_request_id,
const GURL& security_origin,
+ bool user_gesture,
MediaStreamRequestType request_type,
const StreamOptions& options,
const ResourceContext::SaltCallback& salt_callback)
@@ -181,6 +182,7 @@ class MediaStreamManager::DeviceRequest {
requesting_view_id(requesting_view_id),
page_request_id(page_request_id),
security_origin(security_origin),
+ user_gesture(user_gesture),
request_type(request_type),
options(options),
salt_callback(salt_callback),
@@ -214,6 +216,7 @@ class MediaStreamManager::DeviceRequest {
requesting_view_id,
page_request_id,
security_origin,
+ user_gesture,
request_type,
requested_audio_device_id,
requested_video_device_id,
@@ -231,6 +234,7 @@ class MediaStreamManager::DeviceRequest {
target_render_view_id,
page_request_id,
security_origin,
+ user_gesture,
request_type,
"",
"",
@@ -299,6 +303,8 @@ class MediaStreamManager::DeviceRequest {
const GURL security_origin;
+ const bool user_gesture;
+
const MediaStreamRequestType request_type;
const StreamOptions options;
@@ -389,6 +395,7 @@ std::string MediaStreamManager::MakeMediaAccessRequest(
render_view_id,
page_request_id,
security_origin,
+ false, // user gesture
MEDIA_DEVICE_ACCESS,
options,
base::Bind(&ReturnEmptySalt));
@@ -414,7 +421,8 @@ void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
const ResourceContext::SaltCallback& sc,
int page_request_id,
const StreamOptions& options,
- const GURL& security_origin) {
+ const GURL& security_origin,
+ bool user_gesture) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
DVLOG(1) << "GenerateStream()";
if (CommandLine::ForCurrentProcess()->HasSwitch(
@@ -427,6 +435,7 @@ void MediaStreamManager::GenerateStream(MediaStreamRequester* requester,
render_view_id,
page_request_id,
security_origin,
+ user_gesture,
MEDIA_GENERATE_STREAM,
options,
sc);
@@ -619,6 +628,7 @@ std::string MediaStreamManager::EnumerateDevices(
render_view_id,
page_request_id,
security_origin,
+ false, // user gesture
MEDIA_ENUMERATE_DEVICES,
StreamOptions(),
sc);
@@ -698,6 +708,7 @@ void MediaStreamManager::OpenDevice(MediaStreamRequester* requester,
render_view_id,
page_request_id,
security_origin,
+ false, // user gesture
MEDIA_OPEN_DEVICE,
options,
sc);
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h
index e254a29..b1d9e61 100644
--- a/content/browser/renderer_host/media/media_stream_manager.h
+++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -97,7 +97,8 @@ class CONTENT_EXPORT MediaStreamManager
const ResourceContext::SaltCallback& sc,
int page_request_id,
const StreamOptions& components,
- const GURL& security_origin);
+ const GURL& security_origin,
+ bool user_gesture);
void CancelRequest(int render_process_id,
int render_view_id,
diff --git a/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc b/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
index 929b902..4529b49 100644
--- a/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_ui_proxy_unittest.cc
@@ -95,7 +95,7 @@ MATCHER_P(SameRequest, expected, "") {
}
TEST_F(MediaStreamUIProxyTest, Deny) {
- MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
+ MediaStreamRequest request(0, 0, 0, GURL("http://origin/"), false,
MEDIA_GENERATE_STREAM, std::string(),
std::string(),
MEDIA_DEVICE_AUDIO_CAPTURE,
@@ -121,7 +121,7 @@ TEST_F(MediaStreamUIProxyTest, Deny) {
}
TEST_F(MediaStreamUIProxyTest, AcceptAndStart) {
- MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
+ MediaStreamRequest request(0, 0, 0, GURL("http://origin/"), false,
MEDIA_GENERATE_STREAM, std::string(),
std::string(),
MEDIA_DEVICE_AUDIO_CAPTURE,
@@ -155,7 +155,7 @@ TEST_F(MediaStreamUIProxyTest, AcceptAndStart) {
// Verify that the proxy can be deleted before the request is processed.
TEST_F(MediaStreamUIProxyTest, DeleteBeforeAccepted) {
- MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
+ MediaStreamRequest request(0, 0, 0, GURL("http://origin/"), false,
MEDIA_GENERATE_STREAM, std::string(),
std::string(),
MEDIA_DEVICE_AUDIO_CAPTURE,
@@ -177,7 +177,7 @@ TEST_F(MediaStreamUIProxyTest, DeleteBeforeAccepted) {
}
TEST_F(MediaStreamUIProxyTest, StopFromUI) {
- MediaStreamRequest request(0, 0, 0, GURL("http://origin/"),
+ MediaStreamRequest request(0, 0, 0, GURL("http://origin/"), false,
MEDIA_GENERATE_STREAM, std::string(),
std::string(),
MEDIA_DEVICE_AUDIO_CAPTURE,
@@ -225,6 +225,7 @@ TEST_F(MediaStreamUIProxyTest, WindowIdCallbackCalled) {
0,
0,
GURL("http://origin/"),
+ false,
MEDIA_GENERATE_STREAM,
std::string(),
std::string(),
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.cc b/content/browser/renderer_host/media/midi_dispatcher_host.cc
index e42fe11..e69a566 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.cc
@@ -45,7 +45,8 @@ void MidiDispatcherHost::OverrideThreadForMessage(
void MidiDispatcherHost::OnRequestSysExPermission(int render_view_id,
int bridge_id,
- const GURL& origin) {
+ const GURL& origin,
+ bool user_gesture) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
browser_context_->RequestMidiSysExPermission(
@@ -53,6 +54,7 @@ void MidiDispatcherHost::OnRequestSysExPermission(int render_view_id,
render_view_id,
bridge_id,
origin,
+ user_gesture,
base::Bind(&MidiDispatcherHost::WasSysExPermissionGranted,
base::Unretained(this),
render_view_id,
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.h b/content/browser/renderer_host/media/midi_dispatcher_host.h
index 8bc1bb0..d8b3533 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.h
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.h
@@ -32,7 +32,8 @@ class MidiDispatcherHost : public BrowserMessageFilter {
private:
void OnRequestSysExPermission(int render_view_id,
int bridge_id,
- const GURL& origin);
+ const GURL& origin,
+ bool user_gesture);
void OnCancelSysExPermissionRequest(int render_view_id,
int bridge_id,
const GURL& requesting_frame);
diff --git a/content/common/media/media_stream_messages.h b/content/common/media/media_stream_messages.h
index 5d106c0..0afa9ec 100644
--- a/content/common/media/media_stream_messages.h
+++ b/content/common/media/media_stream_messages.h
@@ -113,11 +113,12 @@ IPC_MESSAGE_CONTROL0(MediaStreamMsg_DisableAecDump)
// Messages sent from the renderer to the browser.
// Request a new media stream.
-IPC_MESSAGE_CONTROL4(MediaStreamHostMsg_GenerateStream,
+IPC_MESSAGE_CONTROL5(MediaStreamHostMsg_GenerateStream,
int /* render view id */,
int /* request id */,
content::StreamOptions /* components */,
- GURL /* security origin */)
+ GURL /* security origin */,
+ bool /* user_gesture */)
// Request to cancel the request for a new media stream.
IPC_MESSAGE_CONTROL2(MediaStreamHostMsg_CancelGenerateStream,
diff --git a/content/common/media/midi_messages.h b/content/common/media/midi_messages.h
index 5a0fd7e..c907a98 100644
--- a/content/common/media/midi_messages.h
+++ b/content/common/media/midi_messages.h
@@ -25,10 +25,11 @@ IPC_STRUCT_TRAITS_END()
// Messages for IPC between MidiDispatcher and MidiDispatcherHost.
// Renderer request to browser for using system exclusive messages.
-IPC_MESSAGE_CONTROL3(MidiHostMsg_RequestSysExPermission,
+IPC_MESSAGE_CONTROL4(MidiHostMsg_RequestSysExPermission,
int /* routing id */,
int /* client id */,
- GURL /* origin */)
+ GURL /* origin */,
+ bool /* user_gesture */)
// Renderer request to browser for canceling a previous permission request.
IPC_MESSAGE_CONTROL3(MidiHostMsg_CancelSysExPermissionRequest,
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index 4f9e967..0cb1b5b 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -131,6 +131,7 @@ class CONTENT_EXPORT BrowserContext : public base::SupportsUserData {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) = 0;
// Cancels a pending MIDI permission request.
diff --git a/content/public/common/media_stream_request.cc b/content/public/common/media_stream_request.cc
index 2f12be3..4a4bf72 100644
--- a/content/public/common/media_stream_request.cc
+++ b/content/public/common/media_stream_request.cc
@@ -72,6 +72,7 @@ MediaStreamRequest::MediaStreamRequest(
int render_view_id,
int page_request_id,
const GURL& security_origin,
+ bool user_gesture,
MediaStreamRequestType request_type,
const std::string& requested_audio_device_id,
const std::string& requested_video_device_id,
@@ -81,6 +82,7 @@ MediaStreamRequest::MediaStreamRequest(
render_view_id(render_view_id),
page_request_id(page_request_id),
security_origin(security_origin),
+ user_gesture(user_gesture),
request_type(request_type),
requested_audio_device_id(requested_audio_device_id),
requested_video_device_id(requested_video_device_id),
diff --git a/content/public/common/media_stream_request.h b/content/public/common/media_stream_request.h
index 6518422..7a58061 100644
--- a/content/public/common/media_stream_request.h
+++ b/content/public/common/media_stream_request.h
@@ -181,6 +181,7 @@ struct CONTENT_EXPORT MediaStreamRequest {
int render_view_id,
int page_request_id,
const GURL& security_origin,
+ bool user_gesture,
MediaStreamRequestType request_type,
const std::string& requested_audio_device_id,
const std::string& requested_video_device_id,
@@ -209,6 +210,9 @@ struct CONTENT_EXPORT MediaStreamRequest {
// The WebKit security origin for the current request (e.g. "html5rocks.com").
GURL security_origin;
+ // Set to true if the call was made in the context of a user gesture.
+ bool user_gesture;
+
// Stores the type of request that was made to the media controller. Right now
// this is only used to distinguish between WebRTC and Pepper requests, as the
// latter should not be subject to user approval but only to policy check.
diff --git a/content/public/test/test_browser_context.cc b/content/public/test/test_browser_context.cc
index a708c26..20b7b88 100644
--- a/content/public/test/test_browser_context.cc
+++ b/content/public/test/test_browser_context.cc
@@ -103,6 +103,7 @@ void TestBrowserContext::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
// Always reject requests for testing.
callback.Run(false);
diff --git a/content/public/test/test_browser_context.h b/content/public/test/test_browser_context.h
index 2c0021e..9019330 100644
--- a/content/public/test/test_browser_context.h
+++ b/content/public/test/test_browser_context.h
@@ -45,6 +45,7 @@ class TestBrowserContext : public BrowserContext {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,
diff --git a/content/renderer/media/media_stream_dispatcher.cc b/content/renderer/media/media_stream_dispatcher.cc
index 51b708b..6446c3c 100644
--- a/content/renderer/media/media_stream_dispatcher.cc
+++ b/content/renderer/media/media_stream_dispatcher.cc
@@ -10,6 +10,7 @@
#include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/render_view_impl.h"
+#include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
#include "url/gurl.h"
namespace content {
@@ -78,10 +79,9 @@ void MediaStreamDispatcher::GenerateStream(
DVLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")";
requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
- Send(new MediaStreamHostMsg_GenerateStream(routing_id(),
- next_ipc_id_++,
- components,
- security_origin));
+ Send(new MediaStreamHostMsg_GenerateStream(
+ routing_id(), next_ipc_id_++, components, security_origin,
+ blink::WebUserGestureIndicator::isProcessingUserGesture()));
}
void MediaStreamDispatcher::CancelGenerateStream(
diff --git a/content/renderer/media/midi_dispatcher.cc b/content/renderer/media/midi_dispatcher.cc
index 7d81cd9..eaf89de 100644
--- a/content/renderer/media/midi_dispatcher.cc
+++ b/content/renderer/media/midi_dispatcher.cc
@@ -10,6 +10,7 @@
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/public/web/WebMIDIPermissionRequest.h"
#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
+#include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
using blink::WebMIDIPermissionRequest;
using blink::WebSecurityOrigin;
@@ -38,7 +39,8 @@ void MidiDispatcher::requestSysexPermission(
WebSecurityOrigin security_origin = request.securityOrigin();
std::string origin = security_origin.toString().utf8();
GURL url(origin);
- Send(new MidiHostMsg_RequestSysExPermission(routing_id(), bridge_id, url));
+ Send(new MidiHostMsg_RequestSysExPermission(routing_id(), bridge_id, url,
+ blink::WebUserGestureIndicator::isProcessingUserGesture()));
}
void MidiDispatcher::cancelSysexPermissionRequest(
diff --git a/content/shell/browser/shell_browser_context.cc b/content/shell/browser/shell_browser_context.cc
index dbceb62..b37521e 100644
--- a/content/shell/browser/shell_browser_context.cc
+++ b/content/shell/browser/shell_browser_context.cc
@@ -183,6 +183,7 @@ void ShellBrowserContext::RequestMidiSysExPermission(
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) {
// Always reject requests for LayoutTests for now.
// TODO(toyoshim): Make it programmable to improve test coverage.
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h
index e9ca9bd..3bd5192 100644
--- a/content/shell/browser/shell_browser_context.h
+++ b/content/shell/browser/shell_browser_context.h
@@ -48,6 +48,7 @@ class ShellBrowserContext : public BrowserContext {
int render_view_id,
int bridge_id,
const GURL& requesting_frame,
+ bool user_gesture,
const MidiSysExPermissionCallback& callback) OVERRIDE;
virtual void CancelMidiSysExPermissionRequest(
int render_process_id,