Skip to content

Commit

Permalink
browser(webkit): introduce Page.setActivityPaused (#2041)
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelfeldman authored Apr 29, 2020
1 parent c921cc1 commit b94f910
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 27 deletions.
2 changes: 1 addition & 1 deletion browser_patches/webkit/BUILD_NUMBER
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1211
1212
100 changes: 74 additions & 26 deletions browser_patches/webkit/patches/bootstrap.diff
Original file line number Diff line number Diff line change
Expand Up @@ -836,7 +836,7 @@ index 777a54166ed6664561b3f8249a6abb4ac59d0480..e738f34f65fa8137a16bf7b66bc237b8
"name": "webSocketWillSendHandshakeRequest",
"description": "Fired when WebSocket is about to initiate handshake.",
diff --git a/Source/JavaScriptCore/inspector/protocol/Page.json b/Source/JavaScriptCore/inspector/protocol/Page.json
index 78980810141a9e9b65b93e6cebe80daff9a52dc1..4818c82fff8b19e060e129275ef5f95f1db2fcb0 100644
index 78980810141a9e9b65b93e6cebe80daff9a52dc1..074e0e53b03f3453972c11e39d021baaff44131e 100644
--- a/Source/JavaScriptCore/inspector/protocol/Page.json
+++ b/Source/JavaScriptCore/inspector/protocol/Page.json
@@ -109,6 +109,41 @@
Expand Down Expand Up @@ -925,7 +925,7 @@ index 78980810141a9e9b65b93e6cebe80daff9a52dc1..4818c82fff8b19e060e129275ef5f95f
{
"name": "snapshotNode",
"description": "Capture a snapshot of the specified node that does not include unrelated layers.",
@@ -282,19 +341,85 @@
@@ -282,19 +341,92 @@
"returns": [
{ "name": "data", "type": "string", "description": "Base64-encoded web archive." }
]
Expand Down Expand Up @@ -992,6 +992,13 @@ index 78980810141a9e9b65b93e6cebe80daff9a52dc1..4818c82fff8b19e060e129275ef5f95f
+ "description": "Overrides window.orientation with provided value.",
+ "parameters": [
+ { "name": "angle", "type": "integer", "optional": true }
+ ]
+ },
+ {
+ "name": "setActivityPaused",
+ "description": "Pauses page activity (active objects, animations).",
+ "parameters": [
+ { "name": "paused", "type": "boolean" }
+ ]
}
],
Expand All @@ -1013,7 +1020,7 @@ index 78980810141a9e9b65b93e6cebe80daff9a52dc1..4818c82fff8b19e060e129275ef5f95f
]
},
{
@@ -304,6 +429,14 @@
@@ -304,6 +436,14 @@
{ "name": "frame", "$ref": "Frame", "description": "Frame object." }
]
},
Expand All @@ -1028,7 +1035,7 @@ index 78980810141a9e9b65b93e6cebe80daff9a52dc1..4818c82fff8b19e060e129275ef5f95f
{
"name": "frameDetached",
"description": "Fired when frame has been detached from its parent.",
@@ -340,12 +473,50 @@
@@ -340,12 +480,50 @@
{ "name": "frameId", "$ref": "Network.FrameId", "description": "Id of the frame that has cleared its scheduled navigation." }
]
},
Expand Down Expand Up @@ -3073,10 +3080,10 @@ index b038a1879c043aa17dae97425693f29be42e3258..d60716b837663004675ffd90bceede4c

} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c670a0c1a2 100644
index 3e8680e1df15245df250aa8e52c3126935832037..6265563481ad523f4cac4d05142667698b797231 100644
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
@@ -32,6 +32,8 @@
@@ -32,20 +32,27 @@
#include "config.h"
#include "InspectorPageAgent.h"

Expand All @@ -3085,9 +3092,12 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
#include "CachedResource.h"
#include "CachedResourceLoader.h"
#include "Cookie.h"
@@ -40,12 +42,15 @@
#include "CookieJar.h"
#include "CustomHeaderFields.h"
+#include "CSSAnimationController.h"
#include "DOMWrapperWorld.h"
#include "Document.h"
+#include "DocumentTimeline.h"
#include "DocumentLoader.h"
+#include "FocusController.h"
#include "Frame.h"
Expand All @@ -3101,7 +3111,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
#include "HTMLNames.h"
#include "ImageBuffer.h"
#include "InspectorClient.h"
@@ -56,19 +61,28 @@
@@ -56,19 +63,30 @@
#include "MIMETypeRegistry.h"
#include "MemoryCache.h"
#include "Page.h"
Expand All @@ -3115,6 +3125,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
#include "SecurityOrigin.h"
#include "Settings.h"
#include "StyleScope.h"
+#include "SVGDocumentExtensions.h"
#include "TextEncoding.h"
+#include "TypingCommand.h"
#include "UserGestureIndicator.h"
Expand All @@ -3124,21 +3135,22 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
#include <JavaScriptCore/RegularExpression.h>
+#include <wtf/DateMath.h>
#include <wtf/ListHashSet.h>
+#include <wtf/MainThread.h>
+#include <wtf/NeverDestroyed.h>
+#include <wtf/Ref.h>
+#include <wtf/RefPtr.h>
#include <wtf/Stopwatch.h>
#include <wtf/text/Base64.h>
#include <wtf/text/StringBuilder.h>
@@ -81,7 +95,6 @@
@@ -81,7 +99,6 @@
#include "LegacyWebArchive.h"
#endif

-
namespace WebCore {

using namespace Inspector;
@@ -100,6 +113,11 @@ using namespace Inspector;
@@ -100,6 +117,11 @@ using namespace Inspector;
macro(WebRTCEncryptionEnabled) \
macro(WebSecurityEnabled)

Expand All @@ -3150,15 +3162,15 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
static bool decodeBuffer(const char* buffer, unsigned size, const String& textEncodingName, String* result)
{
if (buffer) {
@@ -340,6 +358,7 @@ InspectorPageAgent::InspectorPageAgent(PageAgentContext& context, InspectorClien
@@ -340,6 +362,7 @@ InspectorPageAgent::InspectorPageAgent(PageAgentContext& context, InspectorClien
, m_frontendDispatcher(makeUnique<Inspector::PageFrontendDispatcher>(context.frontendRouter))
, m_backendDispatcher(Inspector::PageBackendDispatcher::create(context.backendDispatcher, this))
, m_inspectedPage(context.inspectedPage)
+ , m_injectedScriptManager(context.injectedScriptManager)
, m_client(client)
, m_overlay(overlay)
{
@@ -373,11 +392,20 @@ void InspectorPageAgent::enable(ErrorString& errorString)
@@ -373,11 +396,20 @@ void InspectorPageAgent::enable(ErrorString& errorString)
#if HAVE(OS_DARK_MODE_SUPPORT)
defaultAppearanceDidChange(m_inspectedPage.defaultUseDarkAppearance());
#endif
Expand All @@ -3179,7 +3191,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6

ErrorString unused;
setShowPaintRects(unused, false);
@@ -415,12 +443,34 @@ void InspectorPageAgent::reload(ErrorString&, const bool* optionalReloadFromOrig
@@ -415,12 +447,34 @@ void InspectorPageAgent::reload(ErrorString&, const bool* optionalReloadFromOrig
m_inspectedPage.mainFrame().loader().reload(reloadOptions);
}

Expand Down Expand Up @@ -3216,7 +3228,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
FrameLoadRequest frameLoadRequest { *frame.document(), frame.document()->securityOrigin(), WTFMove(resourceRequest), "_self"_s, InitiatedByMainFrame::Unknown };
frameLoadRequest.disableNavigationToInvalidURL();
frame.loader().changeLocation(WTFMove(frameLoadRequest));
@@ -748,15 +798,16 @@ void InspectorPageAgent::setShowPaintRects(ErrorString&, bool show)
@@ -748,15 +802,16 @@ void InspectorPageAgent::setShowPaintRects(ErrorString&, bool show)
m_overlay->setShowPaintRects(show);
}

Expand All @@ -3238,7 +3250,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
}

void InspectorPageAgent::frameNavigated(Frame& frame)
@@ -764,13 +815,23 @@ void InspectorPageAgent::frameNavigated(Frame& frame)
@@ -764,13 +819,23 @@ void InspectorPageAgent::frameNavigated(Frame& frame)
m_frontendDispatcher->frameNavigated(buildObjectForFrame(&frame));
}

Expand All @@ -3265,7 +3277,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
}

Frame* InspectorPageAgent::frameForId(const String& frameId)
@@ -782,20 +843,18 @@ String InspectorPageAgent::frameId(Frame* frame)
@@ -782,20 +847,18 @@ String InspectorPageAgent::frameId(Frame* frame)
{
if (!frame)
return emptyString();
Expand All @@ -3292,7 +3304,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
}

Frame* InspectorPageAgent::assertFrame(ErrorString& errorString, const String& frameId)
@@ -806,11 +865,6 @@ Frame* InspectorPageAgent::assertFrame(ErrorString& errorString, const String& f
@@ -806,11 +869,6 @@ Frame* InspectorPageAgent::assertFrame(ErrorString& errorString, const String& f
return frame;
}

Expand All @@ -3304,7 +3316,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
void InspectorPageAgent::frameStartedLoading(Frame& frame)
{
m_frontendDispatcher->frameStartedLoading(frameId(&frame));
@@ -831,6 +885,12 @@ void InspectorPageAgent::frameClearedScheduledNavigation(Frame& frame)
@@ -831,6 +889,12 @@ void InspectorPageAgent::frameClearedScheduledNavigation(Frame& frame)
m_frontendDispatcher->frameClearedScheduledNavigation(frameId(&frame));
}

Expand All @@ -3317,7 +3329,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
void InspectorPageAgent::defaultAppearanceDidChange(bool useDarkAppearance)
{
m_frontendDispatcher->defaultAppearanceDidChange(useDarkAppearance ? Inspector::Protocol::Page::Appearance::Dark : Inspector::Protocol::Page::Appearance::Light);
@@ -888,6 +948,48 @@ void InspectorPageAgent::didRecalculateStyle()
@@ -888,6 +952,48 @@ void InspectorPageAgent::didRecalculateStyle()
m_overlay->update();
}

Expand Down Expand Up @@ -3366,7 +3378,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
Ref<Inspector::Protocol::Page::Frame> InspectorPageAgent::buildObjectForFrame(Frame* frame)
{
ASSERT_ARG(frame, frame);
@@ -1031,6 +1133,29 @@ void InspectorPageAgent::snapshotRect(ErrorString& errorString, int x, int y, in
@@ -1031,6 +1137,29 @@ void InspectorPageAgent::snapshotRect(ErrorString& errorString, int x, int y, in
*outDataURL = snapshot->toDataURL("image/png"_s, WTF::nullopt, PreserveResolution::Yes);
}

Expand Down Expand Up @@ -3396,7 +3408,7 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
void InspectorPageAgent::archive(ErrorString& errorString, String* data)
{
#if ENABLE(WEB_ARCHIVE) && USE(CF)
@@ -1048,4 +1173,543 @@ void InspectorPageAgent::archive(ErrorString& errorString, String* data)
@@ -1048,4 +1177,578 @@ void InspectorPageAgent::archive(ErrorString& errorString, String* data)
#endif
}

Expand Down Expand Up @@ -3938,10 +3950,45 @@ index 3e8680e1df15245df250aa8e52c3126935832037..aa712305c6eeb786445b4953a55005c6
+ errorString = "Orientation events are disabled in this build";
+#endif
+}
+
+void InspectorPageAgent::setActivityPaused(Inspector::ErrorString& errorString, bool paused)
+{
+ setMainThreadCallbacksPaused(paused);
+ bool webAnimationsCSSIntegrationEnabled = RuntimeEnabledFeatures::sharedFeatures().webAnimationsCSSIntegrationEnabled();
+ for (Frame* frame = &m_inspectedPage.mainFrame(); frame; frame = frame->tree().traverseNext()) {
+ ASSERT(frame->document());
+ auto& document = *frame->document();
+ if (paused) {
+ document.suspendScriptedAnimationControllerCallbacks();
+ document.suspendActiveDOMObjects(ReasonForSuspension::JavaScriptDebuggerPaused);
+ if (webAnimationsCSSIntegrationEnabled) {
+ if (auto* timeline = document.existingTimeline())
+ timeline->suspendAnimations();
+ }
+ if (document.svgExtensions())
+ document.accessSVGExtensions().pauseAnimations();
+ } else {
+ document.resumeActiveDOMObjects(ReasonForSuspension::JavaScriptDebuggerPaused);
+ document.resumeScriptedAnimationControllerCallbacks();
+ if (webAnimationsCSSIntegrationEnabled) {
+ if (auto* timeline = document.existingTimeline())
+ timeline->resumeAnimations();
+ }
+ if (document.svgExtensions())
+ document.accessSVGExtensions().unpauseAnimations();
+ }
+ }
+ if (!webAnimationsCSSIntegrationEnabled) {
+ if (paused)
+ m_inspectedPage.mainFrame().animation().suspendAnimations();
+ else
+ m_inspectedPage.mainFrame().animation().resumeAnimations();
+ }
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.h b/Source/WebCore/inspector/agents/InspectorPageAgent.h
index 6c75829502336b0806db2531e78186d2c559e44c..a2f8734a41a3a7d6ba489ea65fe8ca18e91c92d9 100644
index 6c75829502336b0806db2531e78186d2c559e44c..1ad6b8e863c56fd572910db6c6fb524d367f2ad8 100644
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorPageAgent.h
@@ -34,17 +34,23 @@
Expand Down Expand Up @@ -3987,7 +4034,7 @@ index 6c75829502336b0806db2531e78186d2c559e44c..a2f8734a41a3a7d6ba489ea65fe8ca18
void overrideUserAgent(ErrorString&, const String* value) override;
void overrideSetting(ErrorString&, const String& setting, const bool* value) override;
void getCookies(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::Page::Cookie>>& cookies) override;
@@ -112,20 +121,31 @@ public:
@@ -112,20 +121,32 @@ public:
void setShowPaintRects(ErrorString&, bool show) override;
void setEmulatedMedia(ErrorString&, const String&) override;
void setForcedAppearance(ErrorString&, const String&) override;
Expand All @@ -4006,6 +4053,7 @@ index 6c75829502336b0806db2531e78186d2c559e44c..a2f8734a41a3a7d6ba489ea65fe8ca18
+ void crash(ErrorString&) override;
+ void setScreenSizeOverride(ErrorString&, int width, int height) override;
+ void setOrientationOverride(Inspector::ErrorString&, const int* angle) override;
+ void setActivityPaused(Inspector::ErrorString&, bool) override;

// InspectorInstrumentation
- void domContentEventFired();
Expand All @@ -4023,7 +4071,7 @@ index 6c75829502336b0806db2531e78186d2c559e44c..a2f8734a41a3a7d6ba489ea65fe8ca18
void defaultAppearanceDidChange(bool useDarkAppearance);
void applyUserAgentOverride(String&);
void applyEmulatedMedia(String&);
@@ -134,6 +154,12 @@ public:
@@ -134,6 +155,12 @@ public:
void didLayout();
void didScroll();
void didRecalculateStyle();
Expand All @@ -4036,15 +4084,15 @@ index 6c75829502336b0806db2531e78186d2c559e44c..a2f8734a41a3a7d6ba489ea65fe8ca18

Frame* frameForId(const String& frameId);
WEBCORE_EXPORT String frameId(Frame*);
@@ -142,6 +168,7 @@ public:
@@ -142,6 +169,7 @@ public:

private:
double timestamp();
+ void ensureUserWorldsExistInAllFrames(const Vector<DOMWrapperWorld*>&);

static bool mainResourceContent(Frame*, bool withBase64Encode, String* result);
static bool dataContent(const char* data, unsigned size, const String& textEncodingName, bool withBase64Encode, String* result);
@@ -153,18 +180,20 @@ private:
@@ -153,18 +181,20 @@ private:
RefPtr<Inspector::PageBackendDispatcher> m_backendDispatcher;

Page& m_inspectedPage;
Expand Down

0 comments on commit b94f910

Please sign in to comment.