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

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

Issue 1635883004: Revert of DevTools: do not use ScriptFunctionCall in the front-end embedder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 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)
« 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