summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-17 21:30:57 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-17 21:30:57 +0000
commit1b8a1b648148a058b2c03d89398a65038992732f (patch)
tree6c30beecb179d5814d8e9a648835084072d018d7 /chrome
parent2043a10953fd492c05db54bf83d2a4f16906429a (diff)
downloadchromium_src-1b8a1b648148a058b2c03d89398a65038992732f.zip
chromium_src-1b8a1b648148a058b2c03d89398a65038992732f.tar.gz
chromium_src-1b8a1b648148a058b2c03d89398a65038992732f.tar.bz2
Revert 59845 - Extend improved windowless plugin focus handling to all platforms
Uses the same two-state focus tracking that the Mac currently uses on Windows and Linux as well, so focus is updated correctly when the content area itself gains and loses focus. BUG=55607 TEST=Windowless plugins should handle key events when focused on all platforms. Review URL: http://codereview.chromium.org/3418016 TBR=stuartmorgan@chromium.org Review URL: http://codereview.chromium.org/3457007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59852 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/common/plugin_messages_internal.h6
-rw-r--r--chrome/plugin/webplugin_delegate_stub.cc10
-rw-r--r--chrome/plugin/webplugin_delegate_stub.h2
-rw-r--r--chrome/renderer/render_view.cc8
-rw-r--r--chrome/renderer/render_view.h7
-rw-r--r--chrome/renderer/webplugin_delegate_proxy.cc18
-rw-r--r--chrome/renderer/webplugin_delegate_proxy.h6
7 files changed, 31 insertions, 26 deletions
diff --git a/chrome/common/plugin_messages_internal.h b/chrome/common/plugin_messages_internal.h
index 99e265a..29388a4 100644
--- a/chrome/common/plugin_messages_internal.h
+++ b/chrome/common/plugin_messages_internal.h
@@ -221,13 +221,13 @@ IPC_BEGIN_MESSAGES(Plugin)
bool /* handled */,
WebCursor /* cursor type*/)
- IPC_MESSAGE_ROUTED1(PluginMsg_SetContentAreaFocus,
- bool /* has_focus */)
-
#if defined(OS_MACOSX)
IPC_MESSAGE_ROUTED1(PluginMsg_SetWindowFocus,
bool /* has_focus */)
+ IPC_MESSAGE_ROUTED1(PluginMsg_SetContentAreaFocus,
+ bool /* has_focus */)
+
IPC_MESSAGE_ROUTED0(PluginMsg_ContainerHidden)
IPC_MESSAGE_ROUTED3(PluginMsg_ContainerShown,
diff --git a/chrome/plugin/webplugin_delegate_stub.cc b/chrome/plugin/webplugin_delegate_stub.cc
index 8e74aa7..0802d31 100644
--- a/chrome/plugin/webplugin_delegate_stub.cc
+++ b/chrome/plugin/webplugin_delegate_stub.cc
@@ -116,9 +116,9 @@ void WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(PluginMsg_UpdateGeometrySync, OnUpdateGeometry)
IPC_MESSAGE_HANDLER(PluginMsg_SendJavaScriptStream,
OnSendJavaScriptStream)
- IPC_MESSAGE_HANDLER(PluginMsg_SetContentAreaFocus, OnSetContentAreaFocus)
#if defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(PluginMsg_SetWindowFocus, OnSetWindowFocus)
+ IPC_MESSAGE_HANDLER(PluginMsg_SetContentAreaFocus, OnSetContentAreaFocus)
IPC_MESSAGE_HANDLER(PluginMsg_ContainerHidden, OnContainerHidden)
IPC_MESSAGE_HANDLER(PluginMsg_ContainerShown, OnContainerShown)
IPC_MESSAGE_HANDLER(PluginMsg_WindowFrameChanged, OnWindowFrameChanged)
@@ -336,15 +336,15 @@ void WebPluginDelegateStub::OnSendJavaScriptStream(const GURL& url,
delegate_->SendJavaScriptStream(url, result, success, notify_id);
}
-void WebPluginDelegateStub::OnSetContentAreaFocus(bool has_focus) {
- delegate_->SetContentAreaHasFocus(has_focus);
-}
-
#if defined(OS_MACOSX)
void WebPluginDelegateStub::OnSetWindowFocus(bool has_focus) {
delegate_->SetWindowHasFocus(has_focus);
}
+void WebPluginDelegateStub::OnSetContentAreaFocus(bool has_focus) {
+ delegate_->SetContentAreaHasFocus(has_focus);
+}
+
void WebPluginDelegateStub::OnContainerHidden() {
delegate_->SetContainerVisibility(false);
}
diff --git a/chrome/plugin/webplugin_delegate_stub.h b/chrome/plugin/webplugin_delegate_stub.h
index 0c1101e..84b22a0 100644
--- a/chrome/plugin/webplugin_delegate_stub.h
+++ b/chrome/plugin/webplugin_delegate_stub.h
@@ -77,9 +77,9 @@ class WebPluginDelegateStub : public IPC::Channel::Listener,
bool success,
int notify_id);
- void OnSetContentAreaFocus(bool has_focus);
#if defined(OS_MACOSX)
void OnSetWindowFocus(bool has_focus);
+ void OnSetContentAreaFocus(bool has_focus);
void OnContainerHidden();
void OnContainerShown(gfx::Rect window_frame, gfx::Rect view_frame,
bool has_focus);
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 83510b0..9f1fcb6 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -597,15 +597,14 @@ WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame,
return CreateNPAPIPlugin(frame, params, info.path, mime_type);
}
+#if defined(OS_MACOSX)
void RenderView::RegisterPluginDelegate(WebPluginDelegateProxy* delegate) {
plugin_delegates_.insert(delegate);
// If the renderer is visible, set initial visibility and focus state.
if (!is_hidden()) {
-#if defined(OS_MACOSX)
delegate->SetContainerVisibility(true);
if (webview() && webview()->isActive())
delegate->SetWindowFocus(true);
-#endif
if (has_focus())
delegate->SetContentAreaFocus(true);
}
@@ -614,6 +613,7 @@ void RenderView::RegisterPluginDelegate(WebPluginDelegateProxy* delegate) {
void RenderView::UnregisterPluginDelegate(WebPluginDelegateProxy* delegate) {
plugin_delegates_.erase(delegate);
}
+#endif
void RenderView::Init(gfx::NativeViewId parent_hwnd,
int32 opener_id,
@@ -5632,7 +5632,6 @@ void RenderView::OnWasRestored(bool needs_repainting) {
(*plugin_it)->SetContainerVisibility(true);
}
}
-#endif // OS_MACOSX
void RenderView::OnSetFocus(bool enable) {
RenderWidget::OnSetFocus(enable);
@@ -5641,16 +5640,15 @@ void RenderView::OnSetFocus(bool enable) {
std::set<WebPluginDelegateProxy*>::iterator plugin_it;
for (plugin_it = plugin_delegates_.begin();
plugin_it != plugin_delegates_.end(); ++plugin_it) {
-#if defined(OS_MACOSX)
// RenderWidget's call to setFocus can cause the underlying webview's
// activation state to change just like a call to setIsActive.
if (enable)
(*plugin_it)->SetWindowFocus(true);
-#endif
(*plugin_it)->SetContentAreaFocus(enable);
}
}
}
+#endif // OS_MACOSX
void RenderView::EnsureDocumentTag() {
// TODO(darin): There's actually no reason for this to be here. We should
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index 01f9655..0013ee9 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -318,10 +318,10 @@ class RenderView : public RenderWidget,
int32 height,
TransportDIB::Handle transport_dib);
void AcceleratedSurfaceBuffersSwapped(gfx::PluginWindowHandle window);
-#endif
void RegisterPluginDelegate(WebPluginDelegateProxy* delegate);
void UnregisterPluginDelegate(WebPluginDelegateProxy* delegate);
+#endif
// IPC::Channel::Listener implementation -------------------------------------
@@ -610,8 +610,9 @@ class RenderView : public RenderWidget,
virtual void DidFlushPaint();
virtual void DidHandleKeyEvent();
virtual void DidHandleMouseEvent(const WebKit::WebMouseEvent& event);
- virtual void OnSetFocus(bool enable);
+
#if OS_MACOSX
+ virtual void OnSetFocus(bool enable);
virtual void OnWasHidden();
virtual void OnWasRestored(bool needs_repainting);
#endif
@@ -1217,10 +1218,12 @@ class RenderView : public RenderWidget,
PepperPluginDelegateImpl pepper_delegate_;
+#if defined(OS_MACOSX)
// All the currently active plugin delegates for this RenderView; kept so that
// we can enumerate them to send updates about things like window location
// or tab focus and visibily. These are non-owning references.
std::set<WebPluginDelegateProxy*> plugin_delegates_;
+#endif
// A list of all Pepper v1 plugins that we've created that haven't been
// destroyed yet. Pepper v2 plugins are tracked by the pepper_delegate_.
diff --git a/chrome/renderer/webplugin_delegate_proxy.cc b/chrome/renderer/webplugin_delegate_proxy.cc
index 2dd4581..a5490af 100644
--- a/chrome/renderer/webplugin_delegate_proxy.cc
+++ b/chrome/renderer/webplugin_delegate_proxy.cc
@@ -204,8 +204,10 @@ void WebPluginDelegateProxy::PluginDestroyed() {
if (window_)
WillDestroyWindow();
+#if defined(OS_MACOSX)
if (render_view_)
render_view_->UnregisterPluginDelegate(this);
+#endif
if (channel_host_) {
Send(new PluginMsg_DestroyInstance(instance_id_));
@@ -382,7 +384,9 @@ bool WebPluginDelegateProxy::Initialize(const GURL& url,
IPC::Message* msg = new PluginMsg_Init(instance_id_, params, &result);
Send(msg);
+#if defined(OS_MACOSX)
render_view_->RegisterPluginDelegate(this);
+#endif
return result;
}
@@ -979,19 +983,19 @@ int WebPluginDelegateProxy::GetProcessId() {
return channel_host_->peer_pid();
}
-void WebPluginDelegateProxy::SetContentAreaFocus(bool has_focus) {
- IPC::Message* msg = new PluginMsg_SetContentAreaFocus(instance_id_,
- has_focus);
+#if defined(OS_MACOSX)
+void WebPluginDelegateProxy::SetWindowFocus(bool window_has_focus) {
+ IPC::Message* msg = new PluginMsg_SetWindowFocus(instance_id_,
+ window_has_focus);
// Make sure focus events are delivered in the right order relative to
// sync messages they might interact with (Paint, HandleEvent, etc.).
msg->set_unblock(true);
Send(msg);
}
-#if defined(OS_MACOSX)
-void WebPluginDelegateProxy::SetWindowFocus(bool window_has_focus) {
- IPC::Message* msg = new PluginMsg_SetWindowFocus(instance_id_,
- window_has_focus);
+void WebPluginDelegateProxy::SetContentAreaFocus(bool has_focus) {
+ IPC::Message* msg = new PluginMsg_SetContentAreaFocus(instance_id_,
+ has_focus);
// Make sure focus events are delivered in the right order relative to
// sync messages they might interact with (Paint, HandleEvent, etc.).
msg->set_unblock(true);
diff --git a/chrome/renderer/webplugin_delegate_proxy.h b/chrome/renderer/webplugin_delegate_proxy.h
index 0cabc1b..1660556 100644
--- a/chrome/renderer/webplugin_delegate_proxy.h
+++ b/chrome/renderer/webplugin_delegate_proxy.h
@@ -78,12 +78,12 @@ class WebPluginDelegateProxy
WebKit::WebCursorInfo* cursor);
virtual int GetProcessId();
- // Informs the plugin that its containing content view has gained or lost
- // first responder status.
- virtual void SetContentAreaFocus(bool has_focus);
#if defined(OS_MACOSX)
// Informs the plugin that its enclosing window has gained or lost focus.
virtual void SetWindowFocus(bool window_has_focus);
+ // Informs the plugin that its containing content view has gained or lost
+ // first responder status.
+ virtual void SetContentAreaFocus(bool has_focus);
// Informs the plugin that its container (window/tab) has changed visibility.
virtual void SetContainerVisibility(bool is_visible);
// Informs the plugin that its enclosing window's frame has changed.