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 @@
#include "core/inspector/DevToolsHost.h"
#include "bindings/core/v8/ScriptFunctionCall.h"
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/V8ScriptRunner.h"
#include "core/clipboard/Pasteboard.h"
#include "core/dom/ExecutionContext.h"
#include "core/events/Event.h"
......@@ -49,6 +49,7 @@
#include "platform/ContextMenu.h"
#include "platform/ContextMenuItem.h"
#include "platform/HostWindow.h"
#include "platform/ScriptForbiddenScope.h"
#include "platform/SharedBuffer.h"
#include "platform/UserGestureIndicator.h"
#include "platform/network/ResourceError.h"
......@@ -59,9 +60,9 @@ namespace blink {
class FrontendMenuProvider final : public ContextMenuProvider {
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
......@@ -78,13 +79,17 @@ public:
void disconnect()
{
m_devtoolsApiObject = ScriptValue();
m_devtoolsHost = nullptr;
}
void contextMenuCleared() override
{
if (m_devtoolsHost) {
m_devtoolsHost->evaluateScript("DevToolsAPI.contextMenuCleared()");
if (!ScriptForbiddenScope::isScriptForbidden()) {
ScriptFunctionCall function(m_devtoolsApiObject, "contextMenuCleared");
function.call();
}
m_devtoolsHost->clearMenuProvider();
m_devtoolsHost = nullptr;
}
......@@ -101,18 +106,28 @@ public:
{
if (!m_devtoolsHost)
return;
UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture);
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:
FrontendMenuProvider(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items)
FrontendMenuProvider(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
: m_devtoolsHost(devtoolsHost)
, m_devtoolsApiObject(devtoolsApiObject)
, m_items(items)
{
}
RawPtrWillBeMember<DevToolsHost> m_devtoolsHost;
ScriptValue m_devtoolsApiObject;
Vector<ContextMenuItem> m_items;
};
......@@ -134,19 +149,6 @@ DEFINE_TRACE(DevToolsHost)
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()
{
m_client = 0;
......@@ -216,7 +218,13 @@ void DevToolsHost::sendMessageToEmbedder(const String& message)
void DevToolsHost::showContextMenu(LocalFrame* targetFrame, float x, float y, const Vector<ContextMenuItem>& items)
{
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();
float zoom = targetFrame->pageZoomFactor();
if (m_client)
......
......@@ -77,10 +77,7 @@ public:
void clearMenuProvider() { m_menuProvider = nullptr; }
private:
friend class FrontendMenuProvider;
DevToolsHost(InspectorFrontendClient*, LocalFrame* frontendFrame);
void evaluateScript(const String&);
InspectorFrontendClient* m_client;
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