summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorkkimlabs@chromium.org <kkimlabs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-30 03:18:30 +0000
committerkkimlabs@chromium.org <kkimlabs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-30 03:18:30 +0000
commit00880a0c5a9b4add3539e63c509e5117f1074b0a (patch)
treeeffed07b08782e2888cf88ce684778e6b4d8be86 /content
parent8ea113d23be6646aa06058ec94bdc0cf881d62ba (diff)
downloadchromium_src-00880a0c5a9b4add3539e63c509e5117f1074b0a.zip
chromium_src-00880a0c5a9b4add3539e63c509e5117f1074b0a.tar.gz
chromium_src-00880a0c5a9b4add3539e63c509e5117f1074b0a.tar.bz2
Cancel MIDI permission request infobar on MIDIAccess stop.
On WebCore::MIDIAccess::stop(), renderer didn't cancel the MIDI permission request infobar. As a result, when an iframe webpage that requested MIDI permission is navigated away, the MIDI infobar is not dismissed, unlike the geolocation infobar. This CL makes the MIDI infobar be dismissed on WebCore::MIDIAccess::stop(). BUG=309893 Review URL: https://codereview.chromium.org/38043004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231719 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/download/download_manager_impl_unittest.cc8
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.cc23
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.h7
-rw-r--r--content/common/media/midi_messages.h6
-rw-r--r--content/public/browser/browser_context.h8
-rw-r--r--content/public/test/test_browser_context.cc8
-rw-r--r--content/public/test/test_browser_context.h6
-rw-r--r--content/renderer/media/midi_dispatcher.cc20
-rw-r--r--content/shell/browser/shell_browser_context.cc8
-rw-r--r--content/shell/browser/shell_browser_context.h6
10 files changed, 84 insertions, 16 deletions
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 0865c04..aecded1 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -404,11 +404,17 @@ class MockBrowserContext : public BrowserContext {
MOCK_METHOD2(GetMediaRequestContextForStoragePartition,
net::URLRequestContextGetter*(
const base::FilePath& partition_path, bool in_memory));
- MOCK_METHOD4(RequestMIDISysExPermission,
+ MOCK_METHOD5(RequestMIDISysExPermission,
void(int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback));
+ MOCK_METHOD4(CancelMIDISysExPermissionRequest,
+ void(int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame));
MOCK_METHOD0(GetResourceContext, ResourceContext*());
MOCK_METHOD0(GetDownloadManagerDelegate, DownloadManagerDelegate*());
MOCK_METHOD0(GetGeolocationPermissionContext,
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.cc b/content/browser/renderer_host/media/midi_dispatcher_host.cc
index 53f5a76..2181dcc 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.cc
@@ -29,6 +29,8 @@ bool MIDIDispatcherHost::OnMessageReceived(const IPC::Message& message,
IPC_BEGIN_MESSAGE_MAP_EX(MIDIDispatcherHost, message, *message_was_ok)
IPC_MESSAGE_HANDLER(MIDIHostMsg_RequestSysExPermission,
OnRequestSysExPermission)
+ IPC_MESSAGE_HANDLER(MIDIHostMsg_CancelSysExPermissionRequest,
+ OnCancelSysExPermissionRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
@@ -36,31 +38,42 @@ bool MIDIDispatcherHost::OnMessageReceived(const IPC::Message& message,
void MIDIDispatcherHost::OverrideThreadForMessage(
const IPC::Message& message, BrowserThread::ID* thread) {
- if (message.type() == MIDIHostMsg_RequestSysExPermission::ID)
+ if (IPC_MESSAGE_CLASS(message) == MIDIMsgStart)
*thread = BrowserThread::UI;
}
void MIDIDispatcherHost::OnRequestSysExPermission(int render_view_id,
- int client_id,
+ int bridge_id,
const GURL& origin) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
browser_context_->RequestMIDISysExPermission(
render_process_id_,
render_view_id,
+ bridge_id,
origin,
base::Bind(&MIDIDispatcherHost::WasSysExPermissionGranted,
base::Unretained(this),
render_view_id,
- client_id));
+ bridge_id));
}
+void MIDIDispatcherHost::OnCancelSysExPermissionRequest(
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":" << render_view_id
+ << ":" << bridge_id;
+ browser_context_->CancelMIDISysExPermissionRequest(
+ render_process_id_, render_view_id, bridge_id, requesting_frame);
+}
void MIDIDispatcherHost::WasSysExPermissionGranted(int render_view_id,
- int client_id,
+ int bridge_id,
bool success) {
ChildProcessSecurityPolicyImpl::GetInstance()->GrantSendMIDISysExMessage(
render_process_id_);
- Send(new MIDIMsg_SysExPermissionApproved(render_view_id, client_id, success));
+ Send(new MIDIMsg_SysExPermissionApproved(render_view_id, bridge_id, success));
}
} // namespace content
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.h b/content/browser/renderer_host/media/midi_dispatcher_host.h
index ee86155..068f719 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.h
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.h
@@ -31,10 +31,13 @@ class MIDIDispatcherHost : public BrowserMessageFilter {
private:
void OnRequestSysExPermission(int render_view_id,
- int client_id,
+ int bridge_id,
const GURL& origin);
+ void OnCancelSysExPermissionRequest(int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame);
void WasSysExPermissionGranted(int render_view_id,
- int client_id,
+ int bridge_id,
bool success);
int render_process_id_;
diff --git a/content/common/media/midi_messages.h b/content/common/media/midi_messages.h
index bff0241..eced85d 100644
--- a/content/common/media/midi_messages.h
+++ b/content/common/media/midi_messages.h
@@ -30,6 +30,12 @@ IPC_MESSAGE_CONTROL3(MIDIHostMsg_RequestSysExPermission,
int /* client id */,
GURL /* origin */)
+// Renderer request to browser for canceling a previous permission request.
+IPC_MESSAGE_CONTROL3(MIDIHostMsg_CancelSysExPermissionRequest,
+ int /* render_view_id */,
+ int /* bridge_id */,
+ GURL /* GURL of the frame */)
+
// Messages sent from the browser to the renderer.
IPC_MESSAGE_ROUTED2(MIDIMsg_SysExPermissionApproved,
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index cbac82f..d6d8950 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -132,9 +132,17 @@ class CONTENT_EXPORT BrowserContext : public base::SupportsUserData {
virtual void RequestMIDISysExPermission(
int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback) = 0;
+ // Cancels a pending MIDI permission request.
+ virtual void CancelMIDISysExPermissionRequest(
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) = 0;
+
// Returns the resource context.
virtual ResourceContext* GetResourceContext() = 0;
diff --git a/content/public/test/test_browser_context.cc b/content/public/test/test_browser_context.cc
index 907f748..f194e7e 100644
--- a/content/public/test/test_browser_context.cc
+++ b/content/public/test/test_browser_context.cc
@@ -101,12 +101,20 @@ TestBrowserContext::GetMediaRequestContextForStoragePartition(
void TestBrowserContext::RequestMIDISysExPermission(
int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback) {
// Always reject requests for testing.
callback.Run(false);
}
+void TestBrowserContext::CancelMIDISysExPermissionRequest(
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) {
+}
+
ResourceContext* TestBrowserContext::GetResourceContext() {
if (!resource_context_)
resource_context_.reset(new MockResourceContext(
diff --git a/content/public/test/test_browser_context.h b/content/public/test/test_browser_context.h
index 4799180..801e635 100644
--- a/content/public/test/test_browser_context.h
+++ b/content/public/test/test_browser_context.h
@@ -43,8 +43,14 @@ class TestBrowserContext : public BrowserContext {
virtual void RequestMIDISysExPermission(
int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback) OVERRIDE;
+ virtual void CancelMIDISysExPermissionRequest(
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) OVERRIDE;
virtual ResourceContext* GetResourceContext() OVERRIDE;
virtual GeolocationPermissionContext*
GetGeolocationPermissionContext() OVERRIDE;
diff --git a/content/renderer/media/midi_dispatcher.cc b/content/renderer/media/midi_dispatcher.cc
index edd57c2..b9aae33 100644
--- a/content/renderer/media/midi_dispatcher.cc
+++ b/content/renderer/media/midi_dispatcher.cc
@@ -34,11 +34,11 @@ bool MIDIDispatcher::OnMessageReceived(const IPC::Message& message) {
void MIDIDispatcher::requestSysExPermission(
const WebMIDIPermissionRequest& request) {
- int client_id = requests_.Add(new WebMIDIPermissionRequest(request));
+ int bridge_id = requests_.Add(new WebMIDIPermissionRequest(request));
WebSecurityOrigin security_origin = request.securityOrigin();
std::string origin = security_origin.toString().utf8();
GURL url(origin);
- Send(new MIDIHostMsg_RequestSysExPermission(routing_id(), client_id, url));
+ Send(new MIDIHostMsg_RequestSysExPermission(routing_id(), bridge_id, url));
}
void MIDIDispatcher::cancelSysExPermissionRequest(
@@ -47,19 +47,23 @@ void MIDIDispatcher::cancelSysExPermissionRequest(
!it.IsAtEnd();
it.Advance()) {
WebMIDIPermissionRequest* value = it.GetCurrentValue();
- if (!value->equals(request))
- continue;
- requests_.Remove(it.GetCurrentKey());
+ if (value->equals(request)) {
+ string16 origin = request.securityOrigin().toString();
+ Send(new MIDIHostMsg_CancelSysExPermissionRequest(
+ routing_id(), it.GetCurrentKey(), GURL(origin)));
+ requests_.Remove(it.GetCurrentKey());
+ break;
+ }
}
}
-void MIDIDispatcher::OnSysExPermissionApproved(int client_id, bool is_allowed) {
+void MIDIDispatcher::OnSysExPermissionApproved(int bridge_id, bool is_allowed) {
// |request| can be NULL when the request is canceled.
- WebMIDIPermissionRequest* request = requests_.Lookup(client_id);
+ WebMIDIPermissionRequest* request = requests_.Lookup(bridge_id);
if (!request)
return;
request->setIsAllowed(is_allowed);
- requests_.Remove(client_id);
+ requests_.Remove(bridge_id);
}
} // namespace content
diff --git a/content/shell/browser/shell_browser_context.cc b/content/shell/browser/shell_browser_context.cc
index c6dbb99..8dee89a 100644
--- a/content/shell/browser/shell_browser_context.cc
+++ b/content/shell/browser/shell_browser_context.cc
@@ -179,6 +179,7 @@ net::URLRequestContextGetter*
void ShellBrowserContext::RequestMIDISysExPermission(
int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback) {
// Always reject requests for LayoutTests for now.
@@ -191,6 +192,13 @@ void ShellBrowserContext::RequestMIDISysExPermission(
callback.Run(false);
}
+void ShellBrowserContext::CancelMIDISysExPermissionRequest(
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) {
+}
+
net::URLRequestContextGetter*
ShellBrowserContext::CreateRequestContextForStoragePartition(
const base::FilePath& partition_path,
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h
index ec71591..f49fa28 100644
--- a/content/shell/browser/shell_browser_context.h
+++ b/content/shell/browser/shell_browser_context.h
@@ -46,8 +46,14 @@ class ShellBrowserContext : public BrowserContext {
virtual void RequestMIDISysExPermission(
int render_process_id,
int render_view_id,
+ int bridge_id,
const GURL& requesting_frame,
const MIDISysExPermissionCallback& callback) OVERRIDE;
+ virtual void CancelMIDISysExPermissionRequest(
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame) OVERRIDE;
virtual ResourceContext* GetResourceContext() OVERRIDE;
virtual GeolocationPermissionContext*
GetGeolocationPermissionContext() OVERRIDE;