Update Document handling of Widget/FrameViewBase focus.
Out of all FrameViewBase types, only plugin implemented the setFocus method, so Document checks if element is HTMLPlugInElement and calls plugin::setFocus directly.
Added tests to ensure that if JS onfocus/onblur code changes element focus, the plugin stays in a consistent state of whether it thinks it is in focus.
BUG=637460
Review-Url: https://codereview.chromium.org/2797943002
Cr-Commit-Position: refs/heads/master@{#462810}
Committed: https://chromium.googlesource.com/chromium/src/+/7a66ab96e524e57f6717edb13f375d50f9cd89e8
Description was changed from ========== [TEST] set plugin focus via element dispatch. BUG= ========== to ...
3 years, 8 months ago
(2017-04-05 07:36:04 UTC)
#5
Description was changed from
==========
[TEST] set plugin focus via element dispatch.
BUG=
==========
to
==========
Set plugin focus via element dispatch.
Document has some ugly Widget/FrameViewBase code to call setFocused. The
setFocused call is only implemented by plugin out of the possible FrameViewBase
types FrameView, PluginView and Scrollbar.
This code can be removed and HTMLPlugInElement can implement dispatchBlurEvent
and dispatchFocus event to send the setFocused calls to plugin.
BUG=637460
==========
This change doesn't break anything in the fast layout tests, but I'm waiting to see ...
3 years, 8 months ago
(2017-04-05 07:37:22 UTC)
#7
This change doesn't break anything in the fast layout tests, but I'm waiting to
see that nothing else breaks.
I think this is a big improvement to simplify the code in Document so that it
has no relationship at all to FrameViewBase.
dcheng
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp File third_party/WebKit/Source/core/dom/Document.cpp (left): https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp#oldcode4148 third_party/WebKit/Source/core/dom/Document.cpp:4148: view()->setFocused(true, params.type); I think we can delete setFocused() off ...
3 years, 8 months ago
(2017-04-05 07:48:09 UTC)
#8
3 years, 8 months ago
(2017-04-05 09:03:29 UTC)
#10
Dry run: This issue passed the CQ dry run.
haraken
This is a great CL! https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp File third_party/WebKit/Source/core/dom/Document.cpp (left): https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp#oldcode4141 third_party/WebKit/Source/core/dom/Document.cpp:4141: updateStyleAndLayout(); Is it okay ...
3 years, 8 months ago
(2017-04-05 11:59:00 UTC)
#11
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right): https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp#newcode104 third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104: plugin->setFocused(false, type); On 2017/04/05 11:59:00, haraken wrote: > On ...
3 years, 8 months ago
(2017-04-05 21:14:44 UTC)
#12
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
plugin->setFocused(false, type);
On 2017/04/05 11:59:00, haraken wrote:
> On 2017/04/05 07:48:08, dcheng wrote:
> > One potential subtlety that I'm not sure if we need to watch out for: I
wonder
> > if it's possible for this to synchronously dispatch an event in the plugin,
> > which will run script, which will change the focus.
> >
> > Elsewhere in setFocusedElement(), we bail out if the focus is changed in the
> > process of dispatching handlers: do we need that early bail out logic here?
Is
> > it even possible to implement at this level?
>
> Would it be crazy to call Element::dispatchBlurEvent and then setFocused?
>
Either way, I think we may need to do a focus check to make sure focus state
didn't change, no matter which order we dispatch these things in.
joelhockey
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp File third_party/WebKit/Source/core/dom/Document.cpp (left): https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/dom/Document.cpp#oldcode4141 third_party/WebKit/Source/core/dom/Document.cpp:4141: updateStyleAndLayout(); On 2017/04/05 at 11:59:00, haraken wrote: > Is ...
3 years, 8 months ago
(2017-04-05 23:59:11 UTC)
#13
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/dom/Document.cpp (left):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/dom/Document.cpp:4141: updateStyleAndLayout();
On 2017/04/05 at 11:59:00, haraken wrote:
> Is it okay to remove updateStyleAndLayout()?
I don't really know, but I can say that all the tests still pass. I can't think
how moving focus in or out of the plugin requires a style update. This code is
from 2006 and I suspect it isn't needed, but no-one has been game to touch it?
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/dom/Document.cpp:4148: view()->setFocused(true,
params.type);
On 2017/04/05 at 07:48:08, dcheng wrote:
> I think we can delete setFocused() off FrameViewBase as well, right?
Yes, done
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
plugin->setFocused(false, type);
On 2017/04/05 at 21:14:44, dcheng wrote:
> On 2017/04/05 11:59:00, haraken wrote:
> > On 2017/04/05 07:48:08, dcheng wrote:
> > > One potential subtlety that I'm not sure if we need to watch out for: I
wonder
> > > if it's possible for this to synchronously dispatch an event in the
plugin,
> > > which will run script, which will change the focus.
> > >
> > > Elsewhere in setFocusedElement(), we bail out if the focus is changed in
the
> > > process of dispatching handlers: do we need that early bail out logic
here? Is
> > > it even possible to implement at this level?
> >
> > Would it be crazy to call Element::dispatchBlurEvent and then setFocused?
> >
>
> Either way, I think we may need to do a focus check to make sure focus state
didn't change, no matter which order we dispatch these things in.
I think this change will fix any potential bugs relating to the scenario that
you described. Previously, the setFocus on plugins was done after the dispatch
events, and there were no checks about whether calling the plugin caused a
change of focus. Now, the handling of plugins is the same as other elements.
So as you say, if calling blur on the plugin causes the plugin to change the
focus, then the existing code in Document::setFocusedElement method catches it.
See check that m_focusedElement gets set by dispatchBlurEvent.
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...
Likewise there is a check for (m_focusedElement != newFocusedElement) after the
call to dispatchFocusEvent that now comes into play for plugins.
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.h (right):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.h:49: virtual void
dispatchBlurEvent(Element*,
On 2017/04/05 at 07:48:08, dcheng wrote:
> Nit: mark this as override rather than virtual (ditto below)
>
> We have a clang plugin to enforce these checks, but it's not yet enabled in
Blink (though hopefully will be soon)
Thanks
joelhockey
The CQ bit was checked by joelhockey@chromium.org to run a CQ dry run
3 years, 8 months ago
(2017-04-06 00:01:18 UTC)
#14
3 years, 8 months ago
(2017-04-06 02:39:52 UTC)
#18
On 2017/04/05 23:59:11, joelhockey wrote:
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> File third_party/WebKit/Source/core/dom/Document.cpp (left):
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> third_party/WebKit/Source/core/dom/Document.cpp:4141: updateStyleAndLayout();
> On 2017/04/05 at 11:59:00, haraken wrote:
> > Is it okay to remove updateStyleAndLayout()?
>
> I don't really know, but I can say that all the tests still pass. I can't
think
> how moving focus in or out of the plugin requires a style update. This code
is
> from 2006 and I suspect it isn't needed, but no-one has been game to touch it?
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> third_party/WebKit/Source/core/dom/Document.cpp:4148: view()->setFocused(true,
> params.type);
> On 2017/04/05 at 07:48:08, dcheng wrote:
> > I think we can delete setFocused() off FrameViewBase as well, right?
>
> Yes, done
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
> plugin->setFocused(false, type);
> On 2017/04/05 at 21:14:44, dcheng wrote:
> > On 2017/04/05 11:59:00, haraken wrote:
> > > On 2017/04/05 07:48:08, dcheng wrote:
> > > > One potential subtlety that I'm not sure if we need to watch out for: I
> wonder
> > > > if it's possible for this to synchronously dispatch an event in the
> plugin,
> > > > which will run script, which will change the focus.
> > > >
> > > > Elsewhere in setFocusedElement(), we bail out if the focus is changed in
> the
> > > > process of dispatching handlers: do we need that early bail out logic
> here? Is
> > > > it even possible to implement at this level?
> > >
> > > Would it be crazy to call Element::dispatchBlurEvent and then setFocused?
> > >
> >
> > Either way, I think we may need to do a focus check to make sure focus state
> didn't change, no matter which order we dispatch these things in.
>
> I think this change will fix any potential bugs relating to the scenario that
> you described. Previously, the setFocus on plugins was done after the
dispatch
> events, and there were no checks about whether calling the plugin caused a
> change of focus. Now, the handling of plugins is the same as other elements.
> So as you say, if calling blur on the plugin causes the plugin to change the
> focus, then the existing code in Document::setFocusedElement method catches
it.
> See check that m_focusedElement gets set by dispatchBlurEvent.
>
>
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...
>
> Likewise there is a check for (m_focusedElement != newFocusedElement) after
the
> call to dispatchFocusEvent that now comes into play for plugins.
>
>
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> File third_party/WebKit/Source/core/html/HTMLPlugInElement.h (right):
>
>
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
> third_party/WebKit/Source/core/html/HTMLPlugInElement.h:49: virtual void
> dispatchBlurEvent(Element*,
> On 2017/04/05 at 07:48:08, dcheng wrote:
> > Nit: mark this as override rather than virtual (ditto below)
> >
> > We have a clang plugin to enforce these checks, but it's not yet enabled in
> Blink (though hopefully will be soon)
>
> Thanks
All of your analysis sounds reasonable to me. LGTM.
dcheng
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right): https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp#newcode104 third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104: plugin->setFocused(false, type); On 2017/04/05 23:59:11, joelhockey wrote: > On ...
3 years, 8 months ago
(2017-04-06 03:01:33 UTC)
#19
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
plugin->setFocused(false, type);
On 2017/04/05 23:59:11, joelhockey wrote:
> On 2017/04/05 at 21:14:44, dcheng wrote:
> > On 2017/04/05 11:59:00, haraken wrote:
> > > On 2017/04/05 07:48:08, dcheng wrote:
> > > > One potential subtlety that I'm not sure if we need to watch out for: I
> wonder
> > > > if it's possible for this to synchronously dispatch an event in the
> plugin,
> > > > which will run script, which will change the focus.
> > > >
> > > > Elsewhere in setFocusedElement(), we bail out if the focus is changed in
> the
> > > > process of dispatching handlers: do we need that early bail out logic
> here? Is
> > > > it even possible to implement at this level?
> > >
> > > Would it be crazy to call Element::dispatchBlurEvent and then setFocused?
> > >
> >
> > Either way, I think we may need to do a focus check to make sure focus state
> didn't change, no matter which order we dispatch these things in.
>
> I think this change will fix any potential bugs relating to the scenario that
> you described. Previously, the setFocus on plugins was done after the
dispatch
> events, and there were no checks about whether calling the plugin caused a
> change of focus. Now, the handling of plugins is the same as other elements.
> So as you say, if calling blur on the plugin causes the plugin to change the
> focus, then the existing code in Document::setFocusedElement method catches
it.
> See check that m_focusedElement gets set by dispatchBlurEvent.
>
>
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...
>
> Likewise there is a check for (m_focusedElement != newFocusedElement) after
the
> call to dispatchFocusEvent that now comes into play for plugins.
>
>
https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/Docum...
I guess my concern mostly regards the short-circuiting behavior: we didn't do
this for plugins previously, but it happened at the very end, after we
dispatched all the other JS events.
Now plugin event dispatch happens before the focus/blur event dispatched by the
subclass, and we don't check before calling through to the base class. I think
we probably should be?
joelhockey
I've had some chat discussion with dcheng and agreement was to change order of calling ...
3 years, 8 months ago
(2017-04-06 06:11:00 UTC)
#20
I've had some chat discussion with dcheng and agreement was to change order of
calling dom onblur/onfocus events first, and then calling plugin.
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/20001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
plugin->setFocused(false, type);
On 2017/04/05 at 21:14:44, dcheng wrote:
> On 2017/04/05 11:59:00, haraken wrote:
> > On 2017/04/05 07:48:08, dcheng wrote:
> > > One potential subtlety that I'm not sure if we need to watch out for: I
wonder
> > > if it's possible for this to synchronously dispatch an event in the
plugin,
> > > which will run script, which will change the focus.
> > >
> > > Elsewhere in setFocusedElement(), we bail out if the focus is changed in
the
> > > process of dispatching handlers: do we need that early bail out logic
here? Is
> > > it even possible to implement at this level?
> >
> > Would it be crazy to call Element::dispatchBlurEvent and then setFocused?
> >
>
> Either way, I think we may need to do a focus check to make sure focus state
didn't change, no matter which order we dispatch these things in.
I have updated to call the dom onblur/onfocus first, and then call the plugin.
joelhockey
The CQ bit was checked by joelhockey@chromium.org
3 years, 8 months ago
(2017-04-06 06:11:07 UTC)
#21
On 2017/04/05 at 11:59:00, haraken wrote: > This is a great CL! Thanks for the ...
3 years, 8 months ago
(2017-04-06 06:19:09 UTC)
#24
On 2017/04/05 at 11:59:00, haraken wrote:
> This is a great CL!
Thanks for the encouragement Kentaro. This work isn't exactly going fast, but
I'm enjoying it as I start to understand more.
haraken
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right): https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp#newcode104 third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104: Element::dispatchBlurEvent(newFocusedElement, type, sourceCapabilities); Can we add a comment on ...
3 years, 8 months ago
(2017-04-06 06:20:27 UTC)
#25
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right): https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp#newcode104 third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104: Element::dispatchBlurEvent(newFocusedElement, type, sourceCapabilities); Thinking about this more, either ordering ...
3 years, 8 months ago
(2017-04-06 06:28:50 UTC)
#27
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
Element::dispatchBlurEvent(newFocusedElement, type, sourceCapabilities);
Thinking about this more, either ordering makes me nervous.
1) If we do the plugin first, and the plugin changes focus, we may
double-dispatch this blur event.
2) However, if we dispatch the DOM event first and the DOM event refocuses this
plugin, we will re-enter Document::setFocusedElement. I think this means we can
end up with plugin focus state in an inconsistent state: setFocused() will be
false on the plugin, since this runs after the re-entrant focus change.
In my mind, the safer alternative is to just have Document::setFocusedElement()
call this directly on the plugin (by checking if the focused element is a plugin
element and downcasting if so). What do you think of just doing this and not
using the override? This also lets us keep the original ordering of events.
joelhockey
The CQ bit was checked by joelhockey@chromium.org
3 years, 8 months ago
(2017-04-06 06:29:41 UTC)
#28
The code is now casting element to HTMLPlugInElement and calling plugin()->setFocused which matches previous behaviour. ...
3 years, 8 months ago
(2017-04-07 06:56:05 UTC)
#31
The code is now casting element to HTMLPlugInElement and calling
plugin()->setFocused which matches previous behaviour.
I have added tests to check for when js attached to a plugin element changes
focus during blur or focus events. These ensure that the plugin focus state
matches the dom state.
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Sour...
File third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp (right):
https://codereview.chromium.org/2797943002/diff/60001/third_party/WebKit/Sour...
third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp:104:
Element::dispatchBlurEvent(newFocusedElement, type, sourceCapabilities);
On 2017/04/06 at 06:28:49, dcheng wrote:
> Thinking about this more, either ordering makes me nervous.
>
> 1) If we do the plugin first, and the plugin changes focus, we may
double-dispatch this blur event.
>
> 2) However, if we dispatch the DOM event first and the DOM event refocuses
this plugin, we will re-enter Document::setFocusedElement. I think this means we
can end up with plugin focus state in an inconsistent state: setFocused() will
be false on the plugin, since this runs after the re-entrant focus change.
>
> In my mind, the safer alternative is to just have
Document::setFocusedElement() call this directly on the plugin (by checking if
the focused element is a plugin element and downcasting if so). What do you
think of just doing this and not using the override? This also lets us keep the
original ordering of events.
You are right that it was possible for plugin to end up in an inconsistent
state.
joelhockey
The CQ bit was checked by joelhockey@chromium.org to run a CQ dry run
3 years, 8 months ago
(2017-04-07 06:57:55 UTC)
#32
Description was changed from ========== Set plugin focus via element dispatch. Document has some ugly ...
3 years, 8 months ago
(2017-04-07 07:00:33 UTC)
#34
Description was changed from
==========
Set plugin focus via element dispatch.
Document has some ugly Widget/FrameViewBase code to call setFocused. The
setFocused call is only implemented by plugin out of the possible FrameViewBase
types FrameView, PluginView and Scrollbar.
This code can be removed and HTMLPlugInElement can implement dispatchBlurEvent
and dispatchFocus event to send the setFocused calls to plugin.
BUG=637460
==========
to
==========
Update Document handling of Widget/FrameViewBase focus.
Out of all FrameViewBase types, only plugin implemented the setFocus method, so
Document checks if element is HTMLPlugInElement and calls plugin::setFocus
directly.
Added tests to ensure that if JS onfocus/onblur code changes element focus, the
plugin stays in a consistent state of whether it thinks it is in focus.
BUG=637460
==========
dcheng
LGTM. Thanks for all the investigations and cleaning this up.
3 years, 8 months ago
(2017-04-07 07:07:50 UTC)
#35
LGTM. Thanks for all the investigations and cleaning this up.
joelhockey
The CQ bit was checked by joelhockey@chromium.org
3 years, 8 months ago
(2017-04-07 07:31:33 UTC)
#36
CQ is committing da patch. Bot data: {"patchset_id": 100001, "attempt_start_ts": 1491550293001240, "parent_rev": "da9c68bb0ee3cb79b68a493ad080aa43262865e5", "commit_rev": "7a66ab96e524e57f6717edb13f375d50f9cd89e8"}
3 years, 8 months ago
(2017-04-07 08:39:04 UTC)
#39
CQ is committing da patch.
Bot data: {"patchset_id": 100001, "attempt_start_ts": 1491550293001240,
"parent_rev": "da9c68bb0ee3cb79b68a493ad080aa43262865e5", "commit_rev":
"7a66ab96e524e57f6717edb13f375d50f9cd89e8"}
commit-bot: I haz the power
Description was changed from ========== Update Document handling of Widget/FrameViewBase focus. Out of all FrameViewBase ...
3 years, 8 months ago
(2017-04-07 08:39:53 UTC)
#40
Message was sent while issue was closed.
Description was changed from
==========
Update Document handling of Widget/FrameViewBase focus.
Out of all FrameViewBase types, only plugin implemented the setFocus method, so
Document checks if element is HTMLPlugInElement and calls plugin::setFocus
directly.
Added tests to ensure that if JS onfocus/onblur code changes element focus, the
plugin stays in a consistent state of whether it thinks it is in focus.
BUG=637460
==========
to
==========
Update Document handling of Widget/FrameViewBase focus.
Out of all FrameViewBase types, only plugin implemented the setFocus method, so
Document checks if element is HTMLPlugInElement and calls plugin::setFocus
directly.
Added tests to ensure that if JS onfocus/onblur code changes element focus, the
plugin stays in a consistent state of whether it thinks it is in focus.
BUG=637460
Review-Url: https://codereview.chromium.org/2797943002
Cr-Commit-Position: refs/heads/master@{#462810}
Committed:
https://chromium.googlesource.com/chromium/src/+/7a66ab96e524e57f6717edb13f37...
==========
commit-bot: I haz the power
Committed patchset #6 (id:100001) as https://chromium.googlesource.com/chromium/src/+/7a66ab96e524e57f6717edb13f375d50f9cd89e8
3 years, 8 months ago
(2017-04-07 08:39:54 UTC)
#41
Issue 2797943002: Set plugin focus via element dispatch
(Closed)
Created 3 years, 8 months ago by joelhockey
Modified 3 years, 8 months ago
Reviewers: dcheng, haraken
Base URL:
Comments: 16