| Index: third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
|
| diff --git a/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp b/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
|
| index 94db56dfffb745a160789c81429a4421df67db2f..5a295331061dfaba3b550b7bef4e4bda7772229a 100644
|
| --- a/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
|
| +++ b/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
|
| @@ -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 @@
|
|
|
| class FrontendMenuProvider final : public ContextMenuProvider {
|
| public:
|
| - static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items)
|
| - {
|
| - return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, items));
|
| + static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
|
| + {
|
| + return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, devtoolsApiObject, items));
|
| }
|
|
|
| ~FrontendMenuProvider() override
|
| @@ -78,13 +79,17 @@
|
|
|
| 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 @@
|
| {
|
| 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;
|
| };
|
|
|
| @@ -132,19 +147,6 @@
|
| {
|
| visitor->trace(m_frontendFrame);
|
| 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()
|
| @@ -216,7 +218,13 @@
|
| 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)
|
|
|