Title: [184329] trunk/Source/WebCore
- Revision
- 184329
- Author
- [email protected]
- Date
- 2015-05-13 22:10:55 -0700 (Wed, 13 May 2015)
Log Message
Get the ScriptController from the correct frame for media elements and plug-ins
https://bugs.webkit.org/show_bug.cgi?id=144983
rdar://problem/20692642&19943135
Reviewed by Sam Weinig.
HTMLMediaElement, QuickTimePluginReplacement and HTMLPlugInImageElement were
getting the main frame's ScriptController instead of the one for their frame.
This caused media controls JS to be running in the context of the main frame,
which broke media controls which use getCSSCanvasContext() and -webkit-canvas.
Fix by getting the frame via the element's document.
Also undo r180584 which was working around this bug.
* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS.prototype.drawTimelineBackground):
* Modules/plugins/QuickTimePluginReplacement.mm:
(WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
(WebCore::QuickTimePluginReplacement::installReplacement):
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::updateCaptionContainer):
(WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
(WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
(WebCore::HTMLMediaElement::pageScaleFactorChanged):
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (184328 => 184329)
--- trunk/Source/WebCore/ChangeLog 2015-05-14 04:19:18 UTC (rev 184328)
+++ trunk/Source/WebCore/ChangeLog 2015-05-14 05:10:55 UTC (rev 184329)
@@ -1,3 +1,33 @@
+2015-05-13 Simon Fraser <[email protected]>
+
+ Get the ScriptController from the correct frame for media elements and plug-ins
+ https://bugs.webkit.org/show_bug.cgi?id=144983
+ rdar://problem/20692642&19943135
+
+ Reviewed by Sam Weinig.
+
+ HTMLMediaElement, QuickTimePluginReplacement and HTMLPlugInImageElement were
+ getting the main frame's ScriptController instead of the one for their frame.
+ This caused media controls JS to be running in the context of the main frame,
+ which broke media controls which use getCSSCanvasContext() and -webkit-canvas.
+
+ Fix by getting the frame via the element's document.
+
+ Also undo r180584 which was working around this bug.
+
+ * Modules/mediacontrols/mediaControlsiOS.js:
+ (ControllerIOS.prototype.drawTimelineBackground):
+ * Modules/plugins/QuickTimePluginReplacement.mm:
+ (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
+ (WebCore::QuickTimePluginReplacement::installReplacement):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::updateCaptionContainer):
+ (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
+ (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
+ (WebCore::HTMLMediaElement::pageScaleFactorChanged):
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
+
2015-05-13 Sungmann Cho <[email protected]>
Fix trivial typos in ApplyBlockElementCommand
Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (184328 => 184329)
--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js 2015-05-14 04:19:18 UTC (rev 184328)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js 2015-05-14 05:10:55 UTC (rev 184329)
@@ -256,7 +256,7 @@
buffered /= this.video.duration;
buffered = Math.max(buffered, played);
- var ctx = this.video.ownerDocument.getCSSCanvasContext('2d', this.timelineContextName, width, height);
+ var ctx = document.getCSSCanvasContext('2d', this.timelineContextName, width, height);
ctx.clearRect(0, 0, width, height);
Modified: trunk/Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm (184328 => 184329)
--- trunk/Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm 2015-05-14 04:19:18 UTC (rev 184328)
+++ trunk/Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm 2015-05-14 05:10:55 UTC (rev 184329)
@@ -148,12 +148,11 @@
bool QuickTimePluginReplacement::ensureReplacementScriptInjected()
{
- Page* page = m_parentElement->document().page();
- if (!page)
+ if (!m_parentElement->document().frame())
return false;
DOMWrapperWorld& world = isolatedWorld();
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = m_parentElement->document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
@@ -174,13 +173,14 @@
bool QuickTimePluginReplacement::installReplacement(ShadowRoot* root)
{
- Page* page = m_parentElement->document().page();
-
if (!ensureReplacementScriptInjected())
return false;
+ if (!m_parentElement->document().frame())
+ return false;
+
DOMWrapperWorld& world = isolatedWorld();
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = m_parentElement->document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (184328 => 184329)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-05-14 04:19:18 UTC (rev 184328)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-05-14 05:10:55 UTC (rev 184329)
@@ -3745,7 +3745,7 @@
if (!m_mediaControlsHost)
m_mediaControlsHost = MediaControlsHost::create(this);
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
@@ -5968,7 +5968,7 @@
return false;
DOMWrapperWorld& world = ensureIsolatedWorld();
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
@@ -6011,7 +6011,7 @@
if (!ensureMediaControlsInjectedScript())
return;
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
@@ -6098,7 +6098,7 @@
LOG(Media, "HTMLMediaElement::pageScaleFactorChanged(%p) = %f", this, page->pageScaleFactor());
DOMWrapperWorld& world = ensureIsolatedWorld();
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
JSC::ExecState* exec = globalObject->globalExec();
JSC::JSLockHolder lock(exec);
Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (184328 => 184329)
--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp 2015-05-14 04:19:18 UTC (rev 184328)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp 2015-05-14 05:10:55 UTC (rev 184329)
@@ -379,7 +379,7 @@
DOMWrapperWorld& isolatedWorld = plugInImageElementIsolatedWorld();
document().ensurePlugInsInjectedScript(isolatedWorld);
- ScriptController& scriptController = page->mainFrame().script();
+ ScriptController& scriptController = document().frame()->script();
JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(isolatedWorld));
JSC::ExecState* exec = globalObject->globalExec();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes