Commit 2648dce4 authored by caseq's avatar caseq Committed by Commit bot

Revert of DevTools: do not use ScriptFunctionCall in the front-end embedder....

Revert of DevTools: do not use ScriptFunctionCall in the front-end embedder. (patchset #1 id:1 of https://codereview.chromium.org/1577153002/ )

Reason for revert:
Breaks context menu handling in DevTools front-end.

Original issue's description:
> DevTools: do not use ScriptFunctionCall in the front-end embedder.
>
> Committed: https://crrev.com/4a595ca1ace2d1592d154cac89b1085f7baa771b
> Cr-Commit-Position: refs/heads/master@{#371337}

TBR=dgozman@chromium.org,pfeldman@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.chromium.org/1635883004

Cr-Commit-Position: refs/heads/master@{#371579}
parent 42f3eb1a
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
#include "core/inspector/DevToolsHost.h" #include "core/inspector/DevToolsHost.h"
#include "bindings/core/v8/ScriptFunctionCall.h"
#include "bindings/core/v8/ScriptState.h" #include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/V8ScriptRunner.h"
#include "core/clipboard/Pasteboard.h" #include "core/clipboard/Pasteboard.h"
#include "core/dom/ExecutionContext.h" #include "core/dom/ExecutionContext.h"
#include "core/events/Event.h" #include "core/events/Event.h"
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include "platform/ContextMenu.h" #include "platform/ContextMenu.h"
#include "platform/ContextMenuItem.h" #include "platform/ContextMenuItem.h"
#include "platform/HostWindow.h" #include "platform/HostWindow.h"
#include "platform/ScriptForbiddenScope.h"
#include "platform/SharedBuffer.h" #include "platform/SharedBuffer.h"
#include "platform/UserGestureIndicator.h" #include "platform/UserGestureIndicator.h"
#include "platform/network/ResourceError.h" #include "platform/network/ResourceError.h"
...@@ -59,9 +60,9 @@ namespace blink { ...@@ -59,9 +60,9 @@ namespace blink {
class FrontendMenuProvider final : public ContextMenuProvider { class FrontendMenuProvider final : public ContextMenuProvider {
public: public:
static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items) static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
{ {
return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, items)); return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, devtoolsApiObject, items));
} }
~FrontendMenuProvider() override ~FrontendMenuProvider() override
...@@ -78,13 +79,17 @@ public: ...@@ -78,13 +79,17 @@ public:
void disconnect() void disconnect()
{ {
m_devtoolsApiObject = ScriptValue();
m_devtoolsHost = nullptr; m_devtoolsHost = nullptr;
} }
void contextMenuCleared() override void contextMenuCleared() override
{ {
if (m_devtoolsHost) { if (m_devtoolsHost) {
m_devtoolsHost->evaluateScript("DevToolsAPI.contextMenuCleared()"); if (!ScriptForbiddenScope::isScriptForbidden()) {
ScriptFunctionCall function(m_devtoolsApiObject, "contextMenuCleared");
function.call();
}
m_devtoolsHost->clearMenuProvider(); m_devtoolsHost->clearMenuProvider();
m_devtoolsHost = nullptr; m_devtoolsHost = nullptr;
} }
...@@ -101,18 +106,28 @@ public: ...@@ -101,18 +106,28 @@ public:
{ {
if (!m_devtoolsHost) if (!m_devtoolsHost)
return; return;
UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture);
int itemNumber = item->action() - ContextMenuItemBaseCustomTag; int itemNumber = item->action() - ContextMenuItemBaseCustomTag;
m_devtoolsHost->evaluateScript("DevToolsAPI.contextMenuItemSelected(" + String::number(itemNumber) + ")");
if (!ScriptForbiddenScope::isScriptForbidden()) {
ScriptFunctionCall function(m_devtoolsApiObject, "contextMenuItemSelected");
function.appendArgument(itemNumber);
function.call();
}
} }
private: private:
FrontendMenuProvider(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items) FrontendMenuProvider(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
: m_devtoolsHost(devtoolsHost) : m_devtoolsHost(devtoolsHost)
, m_devtoolsApiObject(devtoolsApiObject)
, m_items(items) , m_items(items)
{ {
} }
RawPtrWillBeMember<DevToolsHost> m_devtoolsHost; RawPtrWillBeMember<DevToolsHost> m_devtoolsHost;
ScriptValue m_devtoolsApiObject;
Vector<ContextMenuItem> m_items; Vector<ContextMenuItem> m_items;
}; };
...@@ -134,19 +149,6 @@ DEFINE_TRACE(DevToolsHost) ...@@ -134,19 +149,6 @@ DEFINE_TRACE(DevToolsHost)
visitor->trace(m_menuProvider); visitor->trace(m_menuProvider);
} }
void DevToolsHost::evaluateScript(const String& expression)
{
if (!m_frontendFrame)
return;
ScriptState* scriptState = ScriptState::forMainWorld(m_frontendFrame);
if (!scriptState)
return;
ScriptState::Scope scope(scriptState);
UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture);
v8::Local<v8::String> source = v8AtomicString(scriptState->isolate(), expression.utf8().data());
V8ScriptRunner::compileAndRunInternalScript(source, scriptState->isolate(), String(), TextPosition());
}
void DevToolsHost::disconnectClient() void DevToolsHost::disconnectClient()
{ {
m_client = 0; m_client = 0;
...@@ -216,7 +218,13 @@ void DevToolsHost::sendMessageToEmbedder(const String& message) ...@@ -216,7 +218,13 @@ void DevToolsHost::sendMessageToEmbedder(const String& message)
void DevToolsHost::showContextMenu(LocalFrame* targetFrame, float x, float y, const Vector<ContextMenuItem>& items) void DevToolsHost::showContextMenu(LocalFrame* targetFrame, float x, float y, const Vector<ContextMenuItem>& items)
{ {
ASSERT(m_frontendFrame); ASSERT(m_frontendFrame);
RefPtrWillBeRawPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider::create(this, items); ScriptState* frontendScriptState = ScriptState::forMainWorld(m_frontendFrame);
if (!frontendScriptState)
return;
ScriptValue devtoolsApiObject = frontendScriptState->getFromGlobalObject("DevToolsAPI");
ASSERT(devtoolsApiObject.isObject());
RefPtrWillBeRawPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider::create(this, devtoolsApiObject, items);
m_menuProvider = menuProvider.get(); m_menuProvider = menuProvider.get();
float zoom = targetFrame->pageZoomFactor(); float zoom = targetFrame->pageZoomFactor();
if (m_client) if (m_client)
......
...@@ -77,10 +77,7 @@ public: ...@@ -77,10 +77,7 @@ public:
void clearMenuProvider() { m_menuProvider = nullptr; } void clearMenuProvider() { m_menuProvider = nullptr; }
private: private:
friend class FrontendMenuProvider;
DevToolsHost(InspectorFrontendClient*, LocalFrame* frontendFrame); DevToolsHost(InspectorFrontendClient*, LocalFrame* frontendFrame);
void evaluateScript(const String&);
InspectorFrontendClient* m_client; InspectorFrontendClient* m_client;
RawPtrWillBeMember<LocalFrame> m_frontendFrame; RawPtrWillBeMember<LocalFrame> m_frontendFrame;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment