Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: third_party/WebKit/Source/core/inspector/DevToolsHost.cpp

Issue 1577153002: DevTools: do not use ScriptFunctionCall in the front-end embedder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: recursion scope added Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/inspector/DevToolsHost.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5a295331061dfaba3b550b7bef4e4bda7772229a..437b3c828a2b153f484ce1ca2dfd3105aa04adc8 100644
--- a/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
+++ b/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
@@ -29,8 +29,9 @@
#include "core/inspector/DevToolsHost.h"
-#include "bindings/core/v8/ScriptFunctionCall.h"
#include "bindings/core/v8/ScriptState.h"
+#include "bindings/core/v8/V8RecursionScope.h"
+#include "bindings/core/v8/V8ScriptRunner.h"
#include "core/clipboard/Pasteboard.h"
#include "core/dom/ExecutionContext.h"
#include "core/events/Event.h"
@@ -49,7 +50,6 @@
#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"
@@ -60,9 +60,9 @@ namespace blink {
class FrontendMenuProvider final : public ContextMenuProvider {
public:
- static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
+ static PassRefPtrWillBeRawPtr<FrontendMenuProvider> create(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items)
{
- return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, devtoolsApiObject, items));
+ return adoptRefWillBeNoop(new FrontendMenuProvider(devtoolsHost, items));
}
~FrontendMenuProvider() override
@@ -79,17 +79,13 @@ public:
void disconnect()
{
- m_devtoolsApiObject = ScriptValue();
m_devtoolsHost = nullptr;
}
void contextMenuCleared() override
{
if (m_devtoolsHost) {
- if (!ScriptForbiddenScope::isScriptForbidden()) {
- ScriptFunctionCall function(m_devtoolsApiObject, "contextMenuCleared");
- function.call();
- }
+ m_devtoolsHost->evaluateScript("DevToolsAPI.contextMenuCleared()");
m_devtoolsHost->clearMenuProvider();
m_devtoolsHost = nullptr;
}
@@ -106,28 +102,18 @@ public:
{
if (!m_devtoolsHost)
return;
-
- UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture);
int itemNumber = item->action() - ContextMenuItemBaseCustomTag;
-
- if (!ScriptForbiddenScope::isScriptForbidden()) {
- ScriptFunctionCall function(m_devtoolsApiObject, "contextMenuItemSelected");
- function.appendArgument(itemNumber);
- function.call();
- }
+ m_devtoolsHost->evaluateScript("DevToolsAPI.contextMenuItemSelected(" + String::number(itemNumber) + ")");
}
private:
- FrontendMenuProvider(DevToolsHost* devtoolsHost, ScriptValue devtoolsApiObject, const Vector<ContextMenuItem>& items)
+ FrontendMenuProvider(DevToolsHost* devtoolsHost, const Vector<ContextMenuItem>& items)
: m_devtoolsHost(devtoolsHost)
- , m_devtoolsApiObject(devtoolsApiObject)
, m_items(items)
{
}
RawPtrWillBeMember<DevToolsHost> m_devtoolsHost;
- ScriptValue m_devtoolsApiObject;
-
Vector<ContextMenuItem> m_items;
};
@@ -149,6 +135,20 @@ 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);
+ V8RecursionScope recursionScope(scriptState->isolate());
+ v8::Local<v8::String> source = v8AtomicString(scriptState->isolate(), expression.utf8().data());
+ V8ScriptRunner::compileAndRunInternalScript(source, scriptState->isolate(), String(), TextPosition());
+}
+
void DevToolsHost::disconnectClient()
{
m_client = 0;
@@ -218,13 +218,7 @@ void DevToolsHost::sendMessageToEmbedder(const String& message)
void DevToolsHost::showContextMenu(LocalFrame* targetFrame, float x, float y, const Vector<ContextMenuItem>& items)
{
ASSERT(m_frontendFrame);
- 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);
+ RefPtrWillBeRawPtr<FrontendMenuProvider> menuProvider = FrontendMenuProvider::create(this, items);
m_menuProvider = menuProvider.get();
float zoom = targetFrame->pageZoomFactor();
if (m_client)
« no previous file with comments | « third_party/WebKit/Source/core/inspector/DevToolsHost.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698