Diff
Modified: trunk/Source/WTF/ChangeLog (234919 => 234920)
--- trunk/Source/WTF/ChangeLog 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WTF/ChangeLog 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1,3 +1,15 @@
+2018-08-16 Antti Koivisto <an...@apple.com>
+
+ Use OptionSet for ActivityState::Flags
+ https://bugs.webkit.org/show_bug.cgi?id=188554
+
+ Reviewed by Brent Fulgham.
+
+ * wtf/OptionSet.h:
+ (WTF::OptionSet::operator^):
+
+ Add xor operator, useful for finding changes between sets.
+
2018-08-15 Ben Richards <benton_richa...@apple.com>
We should cache the compiled sandbox profile in a data vault
Modified: trunk/Source/WTF/wtf/OptionSet.h (234919 => 234920)
--- trunk/Source/WTF/wtf/OptionSet.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WTF/wtf/OptionSet.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -148,6 +148,11 @@
return fromRaw(lhs.m_storage & ~rhs.m_storage);
}
+ constexpr friend OptionSet operator^(OptionSet lhs, OptionSet rhs)
+ {
+ return fromRaw(lhs.m_storage ^ rhs.m_storage);
+ }
+
private:
enum InitializationTag { FromRawValue };
constexpr OptionSet(T t, InitializationTag)
Modified: trunk/Source/WebCore/ChangeLog (234919 => 234920)
--- trunk/Source/WebCore/ChangeLog 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/ChangeLog 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1,3 +1,52 @@
+2018-08-16 Antti Koivisto <an...@apple.com>
+
+ Use OptionSet for ActivityState::Flags
+ https://bugs.webkit.org/show_bug.cgi?id=188554
+
+ Reviewed by Brent Fulgham.
+
+ More typesafe flags.
+
+ * Modules/geolocation/GeolocationController.cpp:
+ (WebCore::GeolocationController::activityStateDidChange):
+ * Modules/geolocation/GeolocationController.h:
+ * html/canvas/WebGLRenderingContextBase.cpp:
+ (WebCore::WebGLRenderingContextBase::activityStateDidChange):
+ * html/canvas/WebGLRenderingContextBase.h:
+ * page/ActivityState.cpp:
+ (WebCore::operator<<):
+ (WebCore::activityStateFlagsToString): Deleted.
+ * page/ActivityState.h:
+ (WebCore::ActivityState::allFlags):
+ * page/ActivityStateChangeObserver.h:
+ * page/FocusController.cpp:
+ (WebCore::FocusController::FocusController):
+ (WebCore::FocusController::setFocused):
+ (WebCore::FocusController::setActivityState):
+ (WebCore::FocusController::setActive):
+ * page/FocusController.h:
+ (WebCore::FocusController::isActive const):
+ (WebCore::FocusController::isFocused const):
+ (WebCore::FocusController::contentIsVisible const):
+ * page/Page.cpp:
+ (WebCore::pageInitialActivityState):
+ (WebCore::Page::Page):
+ (WebCore::Page::setIsInWindow):
+ (WebCore::Page::updateTimerThrottlingState):
+ (WebCore::Page::setActivityState):
+ (WebCore::Page::isVisibleAndActive const):
+ (WebCore::Page::isWindowActive const):
+ (WebCore::Page::setIsVisible):
+ * page/Page.h:
+ (WebCore::Page::activityState const):
+ (WebCore::Page::isVisible const):
+ (WebCore::Page::isInWindow const):
+ * page/PerformanceMonitor.cpp:
+ (WebCore::activityStateForCPUSampling):
+ (WebCore::PerformanceMonitor::activityStateChanged):
+ * page/PerformanceMonitor.h:
+ * platform/text/cocoa: Added.
+
2018-08-15 Ansh Shukla <ansh_shu...@apple.com>
NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
Modified: trunk/Source/WebCore/Modules/geolocation/GeolocationController.cpp (234919 => 234920)
--- trunk/Source/WebCore/Modules/geolocation/GeolocationController.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/Modules/geolocation/GeolocationController.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -128,10 +128,10 @@
return m_client.lastPosition();
}
-void GeolocationController::activityStateDidChange(ActivityState::Flags oldActivityState, ActivityState::Flags newActivityState)
+void GeolocationController::activityStateDidChange(OptionSet<ActivityState::Flag> oldActivityState, OptionSet<ActivityState::Flag> newActivityState)
{
// Toggle GPS based on page visibility to save battery.
- ActivityState::Flags changed = oldActivityState ^ newActivityState;
+ auto changed = oldActivityState ^ newActivityState;
if (changed & ActivityState::IsVisible && !m_observers.isEmpty()) {
if (newActivityState & ActivityState::IsVisible)
m_client.startUpdating();
Modified: trunk/Source/WebCore/Modules/geolocation/GeolocationController.h (234919 => 234920)
--- trunk/Source/WebCore/Modules/geolocation/GeolocationController.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/Modules/geolocation/GeolocationController.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -67,7 +67,7 @@
Page& m_page;
GeolocationClient& m_client;
- void activityStateDidChange(ActivityState::Flags oldActivityState, ActivityState::Flags newActivityState) override;
+ void activityStateDidChange(OptionSet<ActivityState::Flag> oldActivityState, OptionSet<ActivityState::Flag> newActivityState) override;
std::optional<GeolocationPosition> m_lastPosition;
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (234919 => 234920)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -6371,14 +6371,14 @@
return true;
}
-void WebGLRenderingContextBase::activityStateDidChange(ActivityState::Flags oldActivityState, ActivityState::Flags newActivityState)
+void WebGLRenderingContextBase::activityStateDidChange(OptionSet<ActivityState::Flag> oldActivityState, OptionSet<ActivityState::Flag> newActivityState)
{
if (!m_context)
return;
- ActivityState::Flags changed = oldActivityState ^ newActivityState;
+ auto changed = oldActivityState ^ newActivityState;
if (changed & ActivityState::IsVisible)
- m_context->setContextVisibility(newActivityState & ActivityState::IsVisible);
+ m_context->setContextVisibility(newActivityState.contains(ActivityState::IsVisible));
}
void WebGLRenderingContextBase::setFailNextGPUStatusCheck()
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (234919 => 234920)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -838,7 +838,7 @@
void registerWithWebGLStateTracker();
void checkForContextLossHandling();
- void activityStateDidChange(ActivityState::Flags oldActivityState, ActivityState::Flags newActivityState) override;
+ void activityStateDidChange(OptionSet<ActivityState::Flag> oldActivityState, OptionSet<ActivityState::Flag> newActivityState) override;
WebGLStateTracker::Token m_trackerToken;
Timer m_checkForContextLossHandlingTimer;
Modified: trunk/Source/WebCore/page/ActivityState.cpp (234919 => 234920)
--- trunk/Source/WebCore/page/ActivityState.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/ActivityState.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -26,65 +26,34 @@
#include "config.h"
#include "ActivityState.h"
-#include <wtf/text/StringBuilder.h>
+#include <wtf/text/TextStream.h>
namespace WebCore {
-String activityStateFlagsToString(ActivityState::Flags flags)
+TextStream& operator<<(TextStream& ts, OptionSet<ActivityState::Flag> flags)
{
- StringBuilder builder;
-
- auto appendCommaIfNecessary = [&]() {
- if (!builder.isEmpty())
- builder.append(", ");
+ bool didAppend = false;
+
+ auto appendIf = [&](auto flag, auto message) {
+ if (!flags.contains(flag))
+ return;
+ if (didAppend)
+ ts << ", ";
+ ts << message;
+ didAppend = true;
};
- if (flags & WebCore::ActivityState::WindowIsActive) {
- appendCommaIfNecessary();
- builder.append("active window");
- }
+ appendIf(ActivityState::WindowIsActive, "active window");
+ appendIf(ActivityState::IsFocused, "focused");
+ appendIf(ActivityState::IsVisible, "visible");
+ appendIf(ActivityState::IsVisibleOrOccluded, "visible or occluded");
+ appendIf(ActivityState::IsInWindow, "in-window");
+ appendIf(ActivityState::IsVisuallyIdle, "visually idle");
+ appendIf(ActivityState::IsAudible, "audible");
+ appendIf(ActivityState::IsLoading, "loading");
+ appendIf(ActivityState::IsCapturingMedia, "capturing media");
- if (flags & WebCore::ActivityState::IsFocused) {
- appendCommaIfNecessary();
- builder.append("focused");
- }
-
- if (flags & WebCore::ActivityState::IsVisible) {
- appendCommaIfNecessary();
- builder.append("visible");
- }
-
- if (flags & WebCore::ActivityState::IsVisibleOrOccluded) {
- appendCommaIfNecessary();
- builder.append("visible or occluded");
- }
-
- if (flags & WebCore::ActivityState::IsInWindow) {
- appendCommaIfNecessary();
- builder.append("in-window");
- }
-
- if (flags & WebCore::ActivityState::IsVisuallyIdle) {
- appendCommaIfNecessary();
- builder.append("visually idle");
- }
-
- if (flags & WebCore::ActivityState::IsAudible) {
- appendCommaIfNecessary();
- builder.append("audible");
- }
-
- if (flags & WebCore::ActivityState::IsLoading) {
- appendCommaIfNecessary();
- builder.append("loading");
- }
-
- if (flags & WebCore::ActivityState::IsCapturingMedia) {
- appendCommaIfNecessary();
- builder.append("capturing media");
- }
-
- return builder.toString();
+ return ts;
}
} // namespace WebCore
Modified: trunk/Source/WebCore/page/ActivityState.h (234919 => 234920)
--- trunk/Source/WebCore/page/ActivityState.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/ActivityState.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -25,14 +25,16 @@
#pragma once
+#include <wtf/OptionSet.h>
+
namespace WTF {
-class String;
+class TextStream;
}
namespace WebCore {
struct ActivityState {
- enum {
+ enum Flag {
WindowIsActive = 1 << 0,
IsFocused = 1 << 1,
IsVisible = 1 << 2,
@@ -44,10 +46,7 @@
IsCapturingMedia = 1 << 8,
};
- typedef unsigned Flags;
-
- static const Flags NoFlags = 0;
- static const Flags AllFlags = WindowIsActive | IsFocused | IsVisible | IsVisibleOrOccluded | IsInWindow | IsVisuallyIdle | IsAudible | IsLoading | IsCapturingMedia;
+ static constexpr OptionSet<Flag> allFlags() { return { WindowIsActive, IsFocused, IsVisible, IsVisibleOrOccluded, IsInWindow, IsVisuallyIdle, IsAudible, IsLoading, IsCapturingMedia }; }
};
enum class ActivityStateForCPUSampling {
@@ -56,7 +55,6 @@
VisibleAndActive
};
-// Ideally this would be operator<<(WTF::TextStream&, ActivityState::Flags) but ActivityState::Flags needs to be strongly typed to avoid ambiguous overloads.
-WEBCORE_EXPORT WTF::String activityStateFlagsToString(ActivityState::Flags);
+WEBCORE_EXPORT WTF::TextStream& operator<<(WTF::TextStream&, OptionSet<ActivityState::Flag>);
} // namespace WebCore
Modified: trunk/Source/WebCore/page/ActivityStateChangeObserver.h (234919 => 234920)
--- trunk/Source/WebCore/page/ActivityStateChangeObserver.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/ActivityStateChangeObserver.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -35,7 +35,7 @@
{
}
- virtual void activityStateDidChange(ActivityState::Flags oldActivityState, ActivityState::Flags newActivityState) = 0;
+ virtual void activityStateDidChange(OptionSet<ActivityState::Flag> oldActivityState, OptionSet<ActivityState::Flag> newActivityState) = 0;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/page/FocusController.cpp (234919 => 234920)
--- trunk/Source/WebCore/page/FocusController.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/FocusController.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -307,7 +307,7 @@
return element.tabIndex();
}
-FocusController::FocusController(Page& page, ActivityState::Flags activityState)
+FocusController::FocusController(Page& page, OptionSet<ActivityState::Flag> activityState)
: m_page(page)
, m_isChangingFocusedFrame(false)
, m_activityState(activityState)
@@ -353,7 +353,7 @@
void FocusController::setFocused(bool focused)
{
- m_page.setActivityState(focused ? m_activityState | ActivityState::IsFocused : m_activityState & ~ActivityState::IsFocused);
+ m_page.setActivityState(focused ? m_activityState | ActivityState::IsFocused : m_activityState - ActivityState::IsFocused);
}
void FocusController::setFocusedInternal(bool focused)
@@ -841,23 +841,23 @@
return true;
}
-void FocusController::setActivityState(ActivityState::Flags activityState)
+void FocusController::setActivityState(OptionSet<ActivityState::Flag> activityState)
{
- ActivityState::Flags changed = m_activityState ^ activityState;
+ auto changed = m_activityState ^ activityState;
m_activityState = activityState;
if (changed & ActivityState::IsFocused)
- setFocusedInternal(activityState & ActivityState::IsFocused);
+ setFocusedInternal(activityState.contains(ActivityState::IsFocused));
if (changed & ActivityState::WindowIsActive) {
- setActiveInternal(activityState & ActivityState::WindowIsActive);
+ setActiveInternal(activityState.contains(ActivityState::WindowIsActive));
if (changed & ActivityState::IsVisible)
- setIsVisibleAndActiveInternal(activityState & ActivityState::WindowIsActive);
+ setIsVisibleAndActiveInternal(activityState.contains(ActivityState::WindowIsActive));
}
}
void FocusController::setActive(bool active)
{
- m_page.setActivityState(active ? m_activityState | ActivityState::WindowIsActive : m_activityState & ~ActivityState::WindowIsActive);
+ m_page.setActivityState(active ? m_activityState | ActivityState::WindowIsActive : m_activityState - ActivityState::WindowIsActive);
}
void FocusController::setActiveInternal(bool active)
Modified: trunk/Source/WebCore/page/FocusController.h (234919 => 234920)
--- trunk/Source/WebCore/page/FocusController.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/FocusController.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -51,7 +51,7 @@
class FocusController {
WTF_MAKE_FAST_ALLOCATED;
public:
- explicit FocusController(Page&, ActivityState::Flags);
+ explicit FocusController(Page&, OptionSet<ActivityState::Flag>);
WEBCORE_EXPORT void setFocusedFrame(Frame*);
Frame* focusedFrame() const { return m_focusedFrame.get(); }
@@ -62,15 +62,15 @@
WEBCORE_EXPORT bool setFocusedElement(Element*, Frame&, FocusDirection = FocusDirectionNone);
- void setActivityState(ActivityState::Flags);
+ void setActivityState(OptionSet<ActivityState::Flag>);
WEBCORE_EXPORT void setActive(bool);
- bool isActive() const { return m_activityState & ActivityState::WindowIsActive; }
+ bool isActive() const { return m_activityState.contains(ActivityState::WindowIsActive); }
WEBCORE_EXPORT void setFocused(bool);
- bool isFocused() const { return m_activityState & ActivityState::IsFocused; }
+ bool isFocused() const { return m_activityState.contains(ActivityState::IsFocused); }
- bool contentIsVisible() const { return m_activityState & ActivityState::IsVisible; }
+ bool contentIsVisible() const { return m_activityState.contains(ActivityState::IsVisible); }
// These methods are used in WebCore/bindings/objc/DOM.mm.
WEBCORE_EXPORT Element* nextFocusableElement(Node&);
@@ -119,7 +119,7 @@
Page& m_page;
RefPtr<Frame> m_focusedFrame;
bool m_isChangingFocusedFrame;
- ActivityState::Flags m_activityState;
+ OptionSet<ActivityState::Flag> m_activityState;
Timer m_focusRepaintTimer;
MonotonicTime m_focusSetTime;
Modified: trunk/Source/WebCore/page/Page.cpp (234919 => 234920)
--- trunk/Source/WebCore/page/Page.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/Page.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -192,7 +192,10 @@
}
}
-static const ActivityState::Flags PageInitialActivityState = ActivityState::IsVisible | ActivityState::IsInWindow;
+static constexpr OptionSet<ActivityState::Flag> pageInitialActivityState()
+{
+ return { ActivityState::IsVisible, ActivityState::IsInWindow };
+}
Page::Page(PageConfiguration&& pageConfiguration)
: m_chrome(std::make_unique<Chrome>(*this, *pageConfiguration.chromeClient))
@@ -200,7 +203,7 @@
#if ENABLE(DRAG_SUPPORT)
, m_dragController(std::make_unique<DragController>(*this, *pageConfiguration.dragClient))
#endif
- , m_focusController(std::make_unique<FocusController>(*this, PageInitialActivityState))
+ , m_focusController(std::make_unique<FocusController>(*this, pageInitialActivityState()))
#if ENABLE(CONTEXT_MENUS)
, m_contextMenuController(std::make_unique<ContextMenuController>(*this, *pageConfiguration.contextMenuClient))
#endif
@@ -224,7 +227,7 @@
, m_horizontalScrollElasticity(ScrollElasticityAllowed)
, m_domTimerAlignmentInterval(DOMTimer::defaultAlignmentInterval())
, m_domTimerAlignmentIntervalIncreaseTimer(*this, &Page::domTimerAlignmentIntervalIncreaseTimerFired)
- , m_activityState(PageInitialActivityState)
+ , m_activityState(pageInitialActivityState())
, m_alternativeTextClient(pageConfiguration.alternativeTextClient)
, m_consoleClient(std::make_unique<PageConsoleClient>(*this))
#if ENABLE(REMOTE_INSPECTOR)
@@ -1089,7 +1092,7 @@
void Page::setIsInWindow(bool isInWindow)
{
- setActivityState(isInWindow ? m_activityState | ActivityState::IsInWindow : m_activityState & ~ActivityState::IsInWindow);
+ setActivityState(isInWindow ? m_activityState | ActivityState::IsInWindow : m_activityState - ActivityState::IsInWindow);
}
void Page::setIsInWindowInternal(bool isInWindow)
@@ -1356,7 +1359,7 @@
// If the page is visible (but idle), there is any activity (loading, media playing, etc), or per setting,
// we allow timer throttling, but not increasing timer throttling.
if (!m_settings->hiddenPageDOMTimerThrottlingAutoIncreases()
- || m_activityState & (ActivityState::IsVisible | ActivityState::IsAudible | ActivityState::IsLoading | ActivityState::IsCapturingMedia)) {
+ || m_activityState.containsAny({ActivityState::IsVisible, ActivityState::IsAudible, ActivityState::IsLoading, ActivityState::IsCapturingMedia })) {
setTimerThrottlingState(TimerThrottlingState::Enabled);
return;
}
@@ -1590,13 +1593,13 @@
view->resumeVisibleImageAnimationsIncludingSubframes();
}
-void Page::setActivityState(ActivityState::Flags activityState)
+void Page::setActivityState(OptionSet<ActivityState::Flag> activityState)
{
- ActivityState::Flags changed = m_activityState ^ activityState;
+ auto changed = m_activityState ^ activityState;
if (!changed)
return;
- ActivityState::Flags oldActivityState = m_activityState;
+ auto oldActivityState = m_activityState;
bool wasVisibleAndActive = isVisibleAndActive();
m_activityState = activityState;
@@ -1604,17 +1607,17 @@
m_focusController->setActivityState(activityState);
if (changed & ActivityState::IsVisible)
- setIsVisibleInternal(activityState & ActivityState::IsVisible);
+ setIsVisibleInternal(activityState.contains(ActivityState::IsVisible));
if (changed & ActivityState::IsInWindow)
- setIsInWindowInternal(activityState & ActivityState::IsInWindow);
+ setIsInWindowInternal(activityState.contains(ActivityState::IsInWindow));
if (changed & ActivityState::IsVisuallyIdle)
- setIsVisuallyIdleInternal(activityState & ActivityState::IsVisuallyIdle);
+ setIsVisuallyIdleInternal(activityState.contains(ActivityState::IsVisuallyIdle));
if (changed & ActivityState::WindowIsActive) {
if (auto* view = m_mainFrame->view())
view->updateTiledBackingAdaptiveSizing();
}
- if (changed & (ActivityState::IsVisible | ActivityState::IsVisuallyIdle | ActivityState::IsAudible | ActivityState::IsLoading | ActivityState::IsCapturingMedia))
+ if (changed.containsAny({ActivityState::IsVisible, ActivityState::IsVisuallyIdle, ActivityState::IsAudible, ActivityState::IsLoading, ActivityState::IsCapturingMedia }))
updateTimerThrottlingState();
for (auto* observer : m_activityStateChangeObservers)
@@ -1629,20 +1632,26 @@
bool Page::isVisibleAndActive() const
{
- return (m_activityState & ActivityState::IsVisible) && (m_activityState & ActivityState::WindowIsActive);
+ return m_activityState.contains(ActivityState::IsVisible) && m_activityState.contains(ActivityState::WindowIsActive);
}
bool Page::isWindowActive() const
{
- return m_activityState & ActivityState::WindowIsActive;
+ return m_activityState.contains(ActivityState::WindowIsActive);
}
void Page::setIsVisible(bool isVisible)
{
- if (isVisible)
- setActivityState((m_activityState & ~ActivityState::IsVisuallyIdle) | ActivityState::IsVisible | ActivityState::IsVisibleOrOccluded);
- else
- setActivityState((m_activityState & ~(ActivityState::IsVisible | ActivityState::IsVisibleOrOccluded)) | ActivityState::IsVisuallyIdle);
+ auto state = m_activityState;
+
+ if (isVisible) {
+ state -= ActivityState::IsVisuallyIdle;
+ state |= { ActivityState::IsVisible, ActivityState::IsVisibleOrOccluded };
+ } else {
+ state |= ActivityState::IsVisuallyIdle;
+ state -= { ActivityState::IsVisible, ActivityState::IsVisibleOrOccluded };
+ }
+ setActivityState(state);
}
enum class SVGAnimationsState { Paused, Resumed };
Modified: trunk/Source/WebCore/page/Page.h (234919 => 234920)
--- trunk/Source/WebCore/page/Page.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/Page.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -415,18 +415,18 @@
#endif
// Notifications when the Page starts and stops being presented via a native window.
- WEBCORE_EXPORT void setActivityState(ActivityState::Flags);
- ActivityState::Flags activityState() const { return m_activityState; }
+ WEBCORE_EXPORT void setActivityState(OptionSet<ActivityState::Flag>);
+ OptionSet<ActivityState::Flag> activityState() const { return m_activityState; }
bool isWindowActive() const;
bool isVisibleAndActive() const;
WEBCORE_EXPORT void setIsVisible(bool);
WEBCORE_EXPORT void setIsPrerender();
- bool isVisible() const { return m_activityState & ActivityState::IsVisible; }
+ bool isVisible() const { return m_activityState.contains(ActivityState::IsVisible); }
// Notification that this Page was moved into or out of a native window.
WEBCORE_EXPORT void setIsInWindow(bool);
- bool isInWindow() const { return m_activityState & ActivityState::IsInWindow; }
+ bool isInWindow() const { return m_activityState.contains(ActivityState::IsInWindow); }
void setIsClosing() { m_isClosing = true; }
bool isClosing() const { return m_isClosing; }
@@ -811,7 +811,7 @@
bool m_isEditable { false };
bool m_isPrerender { false };
- ActivityState::Flags m_activityState;
+ OptionSet<ActivityState::Flag> m_activityState;
LayoutMilestones m_requestedLayoutMilestones { 0 };
Modified: trunk/Source/WebCore/page/PerformanceMonitor.cpp (234919 => 234920)
--- trunk/Source/WebCore/page/PerformanceMonitor.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/PerformanceMonitor.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -55,7 +55,7 @@
static const uint64_t postPageLoadMemoryUsageDomainReportingThreshold { 2048 * MB };
#endif
-static inline ActivityStateForCPUSampling activityStateForCPUSampling(ActivityState::Flags state)
+static inline ActivityStateForCPUSampling activityStateForCPUSampling(OptionSet<ActivityState::Flag> state)
{
if (!(state & ActivityState::IsVisible))
return ActivityStateForCPUSampling::NonVisible;
@@ -101,10 +101,10 @@
m_postPageLoadMemoryUsageTimer.startOneShot(memoryUsageMeasurementDelay);
}
-void PerformanceMonitor::activityStateChanged(ActivityState::Flags oldState, ActivityState::Flags newState)
+void PerformanceMonitor::activityStateChanged(OptionSet<ActivityState::Flag> oldState, OptionSet<ActivityState::Flag> newState)
{
- ActivityState::Flags changed = oldState ^ newState;
- bool visibilityChanged = changed & ActivityState::IsVisible;
+ auto changed = oldState ^ newState;
+ bool visibilityChanged = changed.contains(ActivityState::IsVisible);
// Measure CPU usage of pages when they are no longer visible.
if (DeprecatedGlobalSettings::isPostBackgroundingCPUUsageMeasurementEnabled() && visibilityChanged) {
Modified: trunk/Source/WebCore/page/PerformanceMonitor.h (234919 => 234920)
--- trunk/Source/WebCore/page/PerformanceMonitor.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/page/PerformanceMonitor.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -40,7 +40,7 @@
void didStartProvisionalLoad();
void didFinishLoad();
- void activityStateChanged(ActivityState::Flags oldState, ActivityState::Flags newState);
+ void activityStateChanged(OptionSet<ActivityState::Flag> oldState, OptionSet<ActivityState::Flag> newState);
private:
void measurePostLoadCPUUsage();
Modified: trunk/Source/WebCore/testing/Internals.cpp (234919 => 234920)
--- trunk/Source/WebCore/testing/Internals.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebCore/testing/Internals.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -4331,7 +4331,7 @@
auto state = page.activityState();
if (!isVisible)
- state &= ~ActivityState::IsVisible;
+ state -= ActivityState::IsVisible;
else
state |= ActivityState::IsVisible;
Modified: trunk/Source/WebKit/ChangeLog (234919 => 234920)
--- trunk/Source/WebKit/ChangeLog 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/ChangeLog 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1,3 +1,50 @@
+2018-08-16 Antti Koivisto <an...@apple.com>
+
+ Use OptionSet for ActivityState::Flags
+ https://bugs.webkit.org/show_bug.cgi?id=188554
+
+ Reviewed by Brent Fulgham.
+
+ * Shared/WebPageCreationParameters.h:
+ * UIProcess/Cocoa/WebViewImpl.mm:
+ (WebKit::WebViewImpl::windowDidOrderOffScreen):
+ (WebKit::WebViewImpl::windowDidOrderOnScreen):
+ (WebKit::WebViewImpl::viewDidMoveToWindow):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::updateActivityState):
+ (WebKit::WebPageProxy::activityStateDidChange):
+ (WebKit::WebPageProxy::dispatchActivityStateChange):
+ (WebKit::WebPageProxy::setMuted):
+ (WebKit::WebPageProxy::isPlayingMediaDidChange):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::isInWindow const):
+ (WebKit::WebPageProxy::isViewVisible const):
+ (WebKit::WebPageProxy::isViewFocused const):
+ (WebKit::WebPageProxy::isViewWindowActive const):
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::activityStateDidChange):
+ * WebProcess/Plugins/PluginView.h:
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::activityStateDidChange):
+ * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
+ * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
+ (WebKit::RemoteLayerTreeDrawingArea::activityStateDidChange):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updateThrottleState):
+ (WebKit::WebPage::updateIsInWindow):
+ (WebKit::WebPage::visibilityDidChange):
+ (WebKit::WebPage::setActivityState):
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::isVisible const):
+ (WebKit::WebPage::isVisibleOrOccluded const):
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::activityStateDidChange):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::pageActivityStateDidChange):
+ * WebProcess/WebProcess.h:
+
2018-08-15 Ansh Shukla <ansh_shu...@apple.com>
NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (234919 => 234920)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -67,7 +67,7 @@
WebCore::IntSize viewSize;
- WebCore::ActivityState::Flags activityState;
+ OptionSet<WebCore::ActivityState::Flag> activityState;
WebPreferencesStore store;
DrawingAreaType drawingAreaType;
Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -48,9 +48,9 @@
return ProxyingRefPtr<WebGrammarDetail>(WebGrammarDetail::create(grammarDetail));
}
-inline WebCore::ActivityState::Flags toViewStateFlags(WKViewState wkViewState)
+inline OptionSet<WebCore::ActivityState::Flag> toViewStateFlags(WKViewState wkViewState)
{
- unsigned viewStateFlags = 0;
+ OptionSet<WebCore::ActivityState::Flag> viewStateFlags;
if (wkViewState & kWKViewStateIsInWindow)
viewStateFlags |= WebCore::ActivityState::IsInWindow;
@@ -57,7 +57,7 @@
if (wkViewState & kWKViewStateIsVisible)
viewStateFlags |= WebCore::ActivityState::IsVisible;
- return static_cast<WebCore::ActivityState::Flags>(viewStateFlags);
+ return viewStateFlags;
}
}
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2018-08-16 12:49:01 UTC (rev 234920)
@@ -2313,7 +2313,7 @@
- (void)didMoveToWindow
{
- _page->activityStateDidChange(WebCore::ActivityState::AllFlags);
+ _page->activityStateDidChange(WebCore::ActivityState::allFlags());
}
- (void)setOpaque:(BOOL)opaque
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -155,7 +155,7 @@
if (!pageProxy)
return;
pageProxy->activityStateDidChange(activityStateFlagsToUpdate);
- activityStateFlagsToUpdate = ActivityState::NoFlags;
+ activityStateFlagsToUpdate = { };
}
WebKitWebViewChildrenMap children;
@@ -185,8 +185,8 @@
unsigned long toplevelWindowRealizedID { 0 };
// View State.
- ActivityState::Flags activityState { 0 };
- ActivityState::Flags activityStateFlagsToUpdate { 0 };
+ OptionSet<ActivityState::Flag> activityState;
+ OptionSet<ActivityState::Flag> activityStateFlagsToUpdate;
RunLoop::Timer<WebKitWebViewBasePrivate> updateActivityStateTimer;
#if ENABLE(FULLSCREEN_API)
@@ -207,7 +207,7 @@
WEBKIT_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER)
-static void webkitWebViewBaseScheduleUpdateActivityState(WebKitWebViewBase* webViewBase, ActivityState::Flags flagsToUpdate)
+static void webkitWebViewBaseScheduleUpdateActivityState(WebKitWebViewBase* webViewBase, OptionSet<ActivityState::Flag> flagsToUpdate)
{
WebKitWebViewBasePrivate* priv = webViewBase->priv;
priv->activityStateFlagsToUpdate |= flagsToUpdate;
@@ -239,7 +239,7 @@
if (!(priv->activityState & ActivityState::WindowIsActive))
return FALSE;
- priv->activityState &= ~ActivityState::WindowIsActive;
+ priv->activityState -= ActivityState::WindowIsActive;
webkitWebViewBaseScheduleUpdateActivityState(webViewBase, ActivityState::WindowIsActive);
return FALSE;
@@ -258,7 +258,7 @@
if (visible)
priv->activityState |= ActivityState::IsVisible;
else
- priv->activityState &= ~ActivityState::IsVisible;
+ priv->activityState -= ActivityState::IsVisible;
webkitWebViewBaseScheduleUpdateActivityState(webViewBase, ActivityState::IsVisible);
return FALSE;
@@ -301,13 +301,13 @@
priv->toplevelOnScreenWindow = window;
if (!priv->toplevelOnScreenWindow) {
- ActivityState::Flags flagsToUpdate = 0;
+ OptionSet<ActivityState::Flag> flagsToUpdate;
if (priv->activityState & ActivityState::IsInWindow) {
- priv->activityState &= ~ActivityState::IsInWindow;
+ priv->activityState -= ActivityState::IsInWindow;
flagsToUpdate |= ActivityState::IsInWindow;
}
if (priv->activityState & ActivityState::WindowIsActive) {
- priv->activityState &= ~ActivityState::WindowIsActive;
+ priv->activityState -= ActivityState::WindowIsActive;
flagsToUpdate |= ActivityState::IsInWindow;
}
if (flagsToUpdate)
@@ -624,7 +624,7 @@
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget);
WebKitWebViewBasePrivate* priv = webViewBase->priv;
- ActivityState::Flags flagsToUpdate = 0;
+ OptionSet<ActivityState::Flag> flagsToUpdate;
if (!(priv->activityState & ActivityState::IsVisible))
flagsToUpdate |= ActivityState::IsVisible;
if (priv->toplevelOnScreenWindow) {
@@ -649,7 +649,7 @@
if (!(priv->activityState & ActivityState::IsVisible))
return;
- priv->activityState &= ~ActivityState::IsVisible;
+ priv->activityState -= ActivityState::IsVisible;
webkitWebViewBaseScheduleUpdateActivityState(webViewBase, ActivityState::IsVisible);
}
@@ -1493,7 +1493,7 @@
if ((focused && priv->activityState & ActivityState::IsFocused) || (!focused && !(priv->activityState & ActivityState::IsFocused)))
return;
- ActivityState::Flags flagsToUpdate = ActivityState::IsFocused;
+ OptionSet<ActivityState::Flag> flagsToUpdate { ActivityState::IsFocused };
if (focused) {
priv->activityState |= ActivityState::IsFocused;
@@ -1507,7 +1507,7 @@
flagsToUpdate |= ActivityState::WindowIsActive;
}
} else
- priv->activityState &= ~ActivityState::IsFocused;
+ priv->activityState -= ActivityState::IsFocused;
webkitWebViewBaseScheduleUpdateActivityState(webViewBase, flagsToUpdate);
}
@@ -1514,22 +1514,22 @@
bool webkitWebViewBaseIsInWindowActive(WebKitWebViewBase* webViewBase)
{
- return webViewBase->priv->activityState & ActivityState::WindowIsActive;
+ return webViewBase->priv->activityState.contains(ActivityState::WindowIsActive);
}
bool webkitWebViewBaseIsFocused(WebKitWebViewBase* webViewBase)
{
- return webViewBase->priv->activityState & ActivityState::IsFocused;
+ return webViewBase->priv->activityState.contains(ActivityState::IsFocused);
}
bool webkitWebViewBaseIsVisible(WebKitWebViewBase* webViewBase)
{
- return webViewBase->priv->activityState & ActivityState::IsVisible;
+ return webViewBase->priv->activityState.contains(ActivityState::IsVisible);
}
bool webkitWebViewBaseIsInWindow(WebKitWebViewBase* webViewBase)
{
- return webViewBase->priv->activityState & ActivityState::IsInWindow;
+ return webViewBase->priv->activityState.contains(ActivityState::IsInWindow);
}
void webkitWebViewBaseSetInputMethodState(WebKitWebViewBase* webkitWebViewBase, bool enabled)
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -172,11 +172,11 @@
m_pageProxy->drawingArea()->setSize(size);
}
-void View::setViewState(WebCore::ActivityState::Flags flags)
+void View::setViewState(OptionSet<WebCore::ActivityState::Flag> flags)
{
- static const WebCore::ActivityState::Flags defaultFlags = WebCore::ActivityState::WindowIsActive | WebCore::ActivityState::IsFocused;
+ static const OptionSet<WebCore::ActivityState::Flag> defaultFlags { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsFocused };
- WebCore::ActivityState::Flags changedFlags = m_viewStateFlags ^ (defaultFlags | flags);
+ auto = m_viewStateFlags ^ (defaultFlags | flags);
m_viewStateFlags = defaultFlags | flags;
if (changedFlags)
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -67,8 +67,8 @@
const WebCore::IntSize& size() const { return m_size; }
- WebCore::ActivityState::Flags viewState() const { return m_viewStateFlags; }
- void setViewState(WebCore::ActivityState::Flags);
+ OptionSet<WebCore::ActivityState::Flag> viewState() const { return m_viewStateFlags; }
+ void setViewState(OptionSet<WebCore::ActivityState::Flag>);
void close();
@@ -87,7 +87,7 @@
std::unique_ptr<WebKit::PageClientImpl> m_pageClient;
RefPtr<WebKit::WebPageProxy> m_pageProxy;
WebCore::IntSize m_size;
- WebCore::ActivityState::Flags m_viewStateFlags;
+ OptionSet<WebCore::ActivityState::Flag> m_viewStateFlags;
WebKit::CompositingManagerProxy m_compositingManagerProxy;
struct wpe_view_backend* m_backend;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1892,13 +1892,13 @@
void WebViewImpl::windowDidOrderOffScreen()
{
LOG(ActivityState, "WebViewImpl %p (page %llu) windowDidOrderOffScreen", this, m_page->pageID());
- m_page->activityStateDidChange(WebCore::ActivityState::IsVisible | WebCore::ActivityState::WindowIsActive);
+ m_page->activityStateDidChange({ WebCore::ActivityState::IsVisible, WebCore::ActivityState::WindowIsActive });
}
void WebViewImpl::windowDidOrderOnScreen()
{
LOG(ActivityState, "WebViewImpl %p (page %llu) windowDidOrderOnScreen", this, m_page->pageID());
- m_page->activityStateDidChange(WebCore::ActivityState::IsVisible | WebCore::ActivityState::WindowIsActive);
+ m_page->activityStateDidChange({ WebCore::ActivityState::IsVisible, WebCore::ActivityState::WindowIsActive });
}
void WebViewImpl::windowDidBecomeKey(NSWindow *keyWindow)
@@ -2064,7 +2064,7 @@
if (window) {
windowDidChangeScreen();
- WebCore::ActivityState::Flags activityStateChanges = WebCore::ActivityState::WindowIsActive | WebCore::ActivityState::IsVisible;
+ OptionSet<WebCore::ActivityState::Flag> activityStateChanges { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsVisible };
if (m_shouldDeferViewInWindowChanges)
m_viewInWindowChangeWasDeferred = true;
else
@@ -2090,7 +2090,7 @@
if (m_immediateActionGestureRecognizer && ![[m_view gestureRecognizers] containsObject:m_immediateActionGestureRecognizer.get()] && !m_ignoresNonWheelEvents && m_allowsLinkPreview)
[m_view addGestureRecognizer:m_immediateActionGestureRecognizer.get()];
} else {
- WebCore::ActivityState::Flags activityStateChanges = WebCore::ActivityState::WindowIsActive | WebCore::ActivityState::IsVisible;
+ OptionSet<WebCore::ActivityState::Flag> activityStateChanges { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsVisible };
if (m_shouldDeferViewInWindowChanges)
m_viewInWindowChangeWasDeferred = true;
else
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1492,9 +1492,9 @@
}
}
-void WebPageProxy::updateActivityState(ActivityState::Flags flagsToUpdate)
+void WebPageProxy::updateActivityState(OptionSet<ActivityState::Flag> flagsToUpdate)
{
- m_activityState &= ~flagsToUpdate;
+ m_activityState = m_activityState - flagsToUpdate;
if (flagsToUpdate & ActivityState::IsFocused && m_pageClient.isViewFocused())
m_activityState |= ActivityState::IsFocused;
if (flagsToUpdate & ActivityState::WindowIsActive && m_pageClient.isViewWindowActive())
@@ -1515,9 +1515,9 @@
m_activityState |= ActivityState::IsCapturingMedia;
}
-void WebPageProxy::activityStateDidChange(ActivityState::Flags mayHaveChanged, bool wantsSynchronousReply, ActivityStateChangeDispatchMode dispatchMode)
+void WebPageProxy::activityStateDidChange(OptionSet<ActivityState::Flag> mayHaveChanged, bool wantsSynchronousReply, ActivityStateChangeDispatchMode dispatchMode)
{
- LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " activityStateDidChange - mayHaveChanged " << activityStateFlagsToString(mayHaveChanged));
+ LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " activityStateDidChange - mayHaveChanged " << mayHaveChanged);
m_potentiallyChangedActivityStateFlags |= mayHaveChanged;
m_activityStateChangeWantsSynchronousReply = m_activityStateChangeWantsSynchronousReply || wantsSynchronousReply;
@@ -1566,20 +1566,20 @@
if (!isValid())
return;
- LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " dispatchActivityStateChange - potentiallyChangedActivityStateFlags " << activityStateFlagsToString(m_potentiallyChangedActivityStateFlags));
+ LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " dispatchActivityStateChange - potentiallyChangedActivityStateFlags " << m_potentiallyChangedActivityStateFlags);
// If the visibility state may have changed, then so may the visually idle & occluded agnostic state.
if (m_potentiallyChangedActivityStateFlags & ActivityState::IsVisible)
- m_potentiallyChangedActivityStateFlags |= ActivityState::IsVisibleOrOccluded | ActivityState::IsVisuallyIdle;
+ m_potentiallyChangedActivityStateFlags |= { ActivityState::IsVisibleOrOccluded, ActivityState::IsVisuallyIdle };
// Record the prior view state, update the flags that may have changed,
// and check which flags have actually changed.
- ActivityState::Flags previousActivityState = m_activityState;
+ auto previousActivityState = m_activityState;
updateActivityState(m_potentiallyChangedActivityStateFlags);
- ActivityState::Flags changed = m_activityState ^ previousActivityState;
+ auto changed = m_activityState ^ previousActivityState;
if (changed)
- LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " dispatchActivityStateChange: state changed from " << activityStateFlagsToString(previousActivityState) << " to " << activityStateFlagsToString(m_activityState));
+ LOG_WITH_STREAM(ActivityState, stream << "WebPageProxy " << pageID() << " dispatchActivityStateChange: state changed from " << previousActivityState << " to " << m_activityState);
if ((m_potentiallyChangedActivityStateFlags & ActivityState::IsVisible) && isViewVisible())
viewIsBecomingVisible();
@@ -1637,7 +1637,7 @@
if (activityStateChangeID != ActivityStateChangeAsynchronous)
waitForDidUpdateActivityState(activityStateChangeID);
- m_potentiallyChangedActivityStateFlags = ActivityState::NoFlags;
+ m_potentiallyChangedActivityStateFlags = { };
m_activityStateChangeWantsSynchronousReply = false;
m_viewWasEverInWindow |= isNowInWindow;
}
@@ -1663,8 +1663,8 @@
m_pageIsUserObservableCount = m_process->processPool().userObservablePageCount();
#if PLATFORM(IOS)
- bool isCapturingMedia = m_activityState & ActivityState::IsCapturingMedia;
- bool isAudible = m_activityState & ActivityState::IsAudible;
+ bool isCapturingMedia = m_activityState.contains(ActivityState::IsCapturingMedia);
+ bool isAudible = m_activityState.contains(ActivityState::IsAudible);
if (!isViewVisible() && !m_alwaysRunsAtForegroundPriority && !isCapturingMedia && !isAudible) {
if (m_activityToken) {
RELEASE_LOG_IF_ALLOWED(ProcessSuspension, "%p - UIProcess is releasing a foreground assertion because the view is no longer visible", this);
@@ -4712,7 +4712,7 @@
#endif
m_process->send(Messages::WebPage::SetMuted(state), m_pageID);
- activityStateDidChange(ActivityState::IsAudible | ActivityState::IsCapturingMedia);
+ activityStateDidChange({ ActivityState::IsAudible, ActivityState::IsCapturingMedia });
}
void WebPageProxy::setMediaCaptureEnabled(bool enabled)
@@ -7269,7 +7269,7 @@
}
#endif
- activityStateDidChange(ActivityState::IsAudible | ActivityState::IsCapturingMedia);
+ activityStateDidChange({ ActivityState::IsAudible, ActivityState::IsCapturingMedia });
playingMediaMask |= WebCore::MediaProducer::MediaCaptureMask;
if ((oldState & playingMediaMask) != (m_mediaState & playingMediaMask))
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -515,8 +515,8 @@
bool delegatesScrolling() const { return m_delegatesScrolling; }
enum class ActivityStateChangeDispatchMode { Deferrable, Immediate };
- void activityStateDidChange(WebCore::ActivityState::Flags mayHaveChanged, bool wantsSynchronousReply = false, ActivityStateChangeDispatchMode = ActivityStateChangeDispatchMode::Deferrable);
- bool isInWindow() const { return m_activityState & WebCore::ActivityState::IsInWindow; }
+ void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> mayHaveChanged, bool wantsSynchronousReply = false, ActivityStateChangeDispatchMode = ActivityStateChangeDispatchMode::Deferrable);
+ bool isInWindow() const { return m_activityState.contains(WebCore::ActivityState::IsInWindow); }
void waitForDidUpdateActivityState(ActivityStateChangeID);
void didUpdateActivityState() { m_waitingForDidUpdateActivityState = false; }
@@ -523,9 +523,9 @@
void layerHostingModeDidChange();
WebCore::IntSize viewSize() const;
- bool isViewVisible() const { return m_activityState & WebCore::ActivityState::IsVisible; }
- bool isViewFocused() const { return m_activityState & WebCore::ActivityState::IsFocused; }
- bool isViewWindowActive() const { return m_activityState & WebCore::ActivityState::WindowIsActive; }
+ bool isViewVisible() const { return m_activityState.contains(WebCore::ActivityState::IsVisible); }
+ bool isViewFocused() const { return m_activityState.contains(WebCore::ActivityState::IsFocused); }
+ bool isViewWindowActive() const { return m_activityState.contains(WebCore::ActivityState::WindowIsActive); }
void addMIMETypeWithCustomContentProvider(const String& mimeType);
@@ -1358,7 +1358,7 @@
RefPtr<API::Navigation> goToBackForwardItem(WebBackForwardListItem&, WebCore::FrameLoadType);
- void updateActivityState(WebCore::ActivityState::Flags flagsToUpdate = WebCore::ActivityState::AllFlags);
+ void updateActivityState(OptionSet<WebCore::ActivityState::Flag> flagsToUpdate = WebCore::ActivityState::allFlags());
void updateThrottleState();
void updateHiddenPageThrottlingAutoIncreases();
@@ -1939,7 +1939,7 @@
std::unique_ptr<UserMediaPermissionRequestManagerProxy> m_userMediaPermissionRequestManager;
#endif
- WebCore::ActivityState::Flags m_activityState { WebCore::ActivityState::NoFlags };
+ OptionSet<WebCore::ActivityState::Flag> m_activityState;
bool m_viewWasEverInWindow { false };
#if PLATFORM(IOS)
bool m_allowsMediaDocumentInlinePlayback { false };
@@ -2176,7 +2176,7 @@
ActivityStateChangeID m_currentActivityStateChangeID { ActivityStateChangeAsynchronous };
WebPreferencesStore::ValueMap m_configurationPreferenceValues;
- WebCore::ActivityState::Flags m_potentiallyChangedActivityStateFlags { WebCore::ActivityState::NoFlags };
+ OptionSet<WebCore::ActivityState::Flag> m_potentiallyChangedActivityStateFlags;
bool m_activityStateChangeWantsSynchronousReply { false };
Vector<CallbackID> m_nextActivityStateChangeCallbacks;
Modified: trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm (234919 => 234920)
--- trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm 2018-08-16 12:49:01 UTC (rev 234920)
@@ -73,7 +73,7 @@
return;
page->applicationDidEnterBackground();
- page->activityStateDidChange(WebCore::ActivityState::AllFlags & ~WebCore::ActivityState::IsInWindow);
+ page->activityStateDidChange(WebCore::ActivityState::allFlags() - WebCore::ActivityState::IsInWindow);
}
- (void)_applicationDidFinishSnapshottingAfterEnteringBackground
@@ -89,7 +89,7 @@
return;
page->applicationWillEnterForeground();
- page->activityStateDidChange(WebCore::ActivityState::AllFlags & ~WebCore::ActivityState::IsInWindow, true, WebKit::WebPageProxy::ActivityStateChangeDispatchMode::Immediate);
+ page->activityStateDidChange(WebCore::ActivityState::allFlags() - WebCore::ActivityState::IsInWindow, true, WebKit::WebPageProxy::ActivityStateChangeDispatchMode::Immediate);
}
- (BOOL)isBackground
Modified: trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -515,7 +515,7 @@
m_webPage = 0;
}
-void PluginView::activityStateDidChange(ActivityState::Flags changed)
+void PluginView::activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> changed)
{
if (!m_plugin || !m_isInitialized)
return;
Modified: trunk/Source/WebKit/WebProcess/Plugins/PluginView.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/Plugins/PluginView.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/Plugins/PluginView.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -79,7 +79,7 @@
void manualLoadDidFinishLoading();
void manualLoadDidFail(const WebCore::ResourceError&);
- void activityStateDidChange(WebCore::ActivityState::Flags changed);
+ void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> changed);
void setLayerHostingMode(LayerHostingMode);
#if PLATFORM(COCOA)
Modified: trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -455,7 +455,7 @@
}
#endif
-void AcceleratedDrawingArea::activityStateDidChange(ActivityState::Flags changed, ActivityStateChangeID, const Vector<CallbackID>&)
+void AcceleratedDrawingArea::activityStateDidChange(OptionSet<ActivityState::Flag> changed, ActivityStateChangeID, const Vector<CallbackID>&)
{
if (changed & ActivityState::IsVisible) {
if (m_webPage.isVisible())
Modified: trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -68,7 +68,7 @@
void destroyNativeSurfaceHandleForCompositing(bool&) override;
#endif
- void activityStateDidChange(WebCore::ActivityState::Flags, ActivityStateChangeID, const Vector<CallbackID>& /* callbackIDs */) override;
+ void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag>, ActivityStateChangeID, const Vector<CallbackID>& /* callbackIDs */) override;
void attachViewOverlayGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*) override;
void layerHostDidFlushLayers() override;
Modified: trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -119,7 +119,7 @@
virtual void dispatchAfterEnsuringUpdatedScrollPosition(WTF::Function<void ()>&&);
- virtual void activityStateDidChange(WebCore::ActivityState::Flags, ActivityStateChangeID, const Vector<CallbackID>&) { }
+ virtual void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag>, ActivityStateChangeID, const Vector<CallbackID>&) { }
virtual void setLayerHostingMode(LayerHostingMode) { }
virtual bool markLayersVolatileImmediatelyIfPossible() { return true; }
Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -102,7 +102,7 @@
void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
- void activityStateDidChange(WebCore::ActivityState::Flags changed, ActivityStateChangeID, const Vector<CallbackID>& callbackIDs) override;
+ void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> changed, ActivityStateChangeID, const Vector<CallbackID>& callbackIDs) override;
bool adjustLayerFlushThrottling(WebCore::LayerFlushThrottleState::Flags) override;
Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2018-08-16 12:49:01 UTC (rev 234920)
@@ -488,7 +488,7 @@
m_connection->sendMessage(WTFMove(m_commitEncoder), { });
}
-void RemoteLayerTreeDrawingArea::activityStateDidChange(ActivityState::Flags, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>&)
+void RemoteLayerTreeDrawingArea::activityStateDidChange(OptionSet<WebCore::ActivityState::Flag>, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>&)
{
// FIXME: Should we suspend painting while not visible, like TiledCoreAnimationDrawingArea? Probably.
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -663,13 +663,9 @@
void WebPage::updateThrottleState()
{
- // We should suppress if the page is not active, is visually idle, and supression is enabled.
- bool isLoading = m_activityState & ActivityState::IsLoading;
- bool isPlayingAudio = m_activityState & ActivityState::IsAudible;
- bool isCapturingMedia = m_activityState & ActivityState::IsCapturingMedia;
- bool isVisuallyIdle = m_activityState & ActivityState::IsVisuallyIdle;
- bool windowIsActive = m_activityState & ActivityState::WindowIsActive;
- bool pageSuppressed = !windowIsActive && !isLoading && !isPlayingAudio && !isCapturingMedia && m_processSuppressionEnabled && isVisuallyIdle;
+ bool isActive = m_activityState.containsAny({ ActivityState::IsLoading, ActivityState::IsAudible, ActivityState::IsCapturingMedia, ActivityState::WindowIsActive });
+ bool isVisuallyIdle = m_activityState.contains(ActivityState::IsVisuallyIdle);
+ bool pageSuppressed = m_processSuppressionEnabled && !isActive && isVisuallyIdle;
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
if (!pageSuppressed) {
@@ -2760,7 +2756,7 @@
void WebPage::updateIsInWindow(bool isInitialState)
{
- bool isInWindow = m_activityState & WebCore::ActivityState::IsInWindow;
+ bool isInWindow = m_activityState.contains(WebCore::ActivityState::IsInWindow);
if (!isInWindow) {
m_setCanStartMediaTimer.stop();
@@ -2785,7 +2781,7 @@
void WebPage::visibilityDidChange()
{
- bool isVisible = m_activityState & ActivityState::IsVisible;
+ bool isVisible = m_activityState.contains(ActivityState::IsVisible);
if (!isVisible) {
// We save the document / scroll state when backgrounding a tab so that we are able to restore it
// if it gets terminated while in the background.
@@ -2794,11 +2790,11 @@
}
}
-void WebPage::setActivityState(ActivityState::Flags activityState, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>& callbackIDs)
+void WebPage::setActivityState(OptionSet<ActivityState::Flag> activityState, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>& callbackIDs)
{
- LOG_WITH_STREAM(ActivityState, stream << "WebPage " << pageID() << " setActivityState to " << activityStateFlagsToString(activityState));
+ LOG_WITH_STREAM(ActivityState, stream << "WebPage " << pageID() << " setActivityState to " << activityState);
- ActivityState::Flags changed = m_activityState ^ activityState;
+ auto changed = m_activityState ^ activityState;
m_activityState = activityState;
if (changed)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -498,8 +498,8 @@
void addPluginView(PluginView*);
void removePluginView(PluginView*);
- bool isVisible() const { return m_activityState & WebCore::ActivityState::IsVisible; }
- bool isVisibleOrOccluded() const { return m_activityState & WebCore::ActivityState::IsVisibleOrOccluded; }
+ bool isVisible() const { return m_activityState.contains(WebCore::ActivityState::IsVisible); }
+ bool isVisibleOrOccluded() const { return m_activityState.contains(WebCore::ActivityState::IsVisibleOrOccluded); }
LayerHostingMode layerHostingMode() const { return m_layerHostingMode; }
void setLayerHostingMode(LayerHostingMode);
@@ -1171,7 +1171,7 @@
void setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent&, CallbackID);
void updateIsInWindow(bool isInitialState = false);
void visibilityDidChange();
- void setActivityState(WebCore::ActivityState::Flags, ActivityStateChangeID, const Vector<CallbackID>& callbackIDs);
+ void setActivityState(OptionSet<WebCore::ActivityState::Flag>, ActivityStateChangeID, const Vector<CallbackID>& callbackIDs);
void validateCommand(const String&, CallbackID);
void executeEditCommand(const String&, const String&);
void setEditable(bool);
@@ -1689,7 +1689,7 @@
bool m_useAsyncScrolling { false };
- WebCore::ActivityState::Flags m_activityState;
+ OptionSet<WebCore::ActivityState::Flag> m_activityState;
bool m_processSuppressionEnabled;
UserActivity m_userActivity;
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2018-08-16 12:49:01 UTC (rev 234920)
@@ -22,7 +22,7 @@
messages -> WebPage LegacyReceiver {
SetInitialFocus(bool forward, bool isKeyboardEventValid, WebKit::WebKeyboardEvent event, WebKit::CallbackID callbackID)
- SetActivityState(unsigned activityState, WebKit::ActivityStateChangeID activityStateChangeID, Vector<WebKit::CallbackID> callbackIDs)
+ SetActivityState(OptionSet<WebCore::ActivityState::Flag> activityState, WebKit::ActivityStateChangeID activityStateChangeID, Vector<WebKit::CallbackID> callbackIDs)
SetLayerHostingMode(enum WebKit::LayerHostingMode layerHostingMode)
SetDrawsBackground(bool drawsBackground)
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -81,7 +81,7 @@
bool shouldUseTiledBackingForFrameView(const WebCore::FrameView&) override;
- void activityStateDidChange(WebCore::ActivityState::Flags changed, ActivityStateChangeID, const Vector<CallbackID>&) override;
+ void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> changed, ActivityStateChangeID, const Vector<CallbackID>&) override;
void didUpdateActivityStateTimerFired();
void attachViewOverlayGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*) override;
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2018-08-16 12:49:01 UTC (rev 234920)
@@ -468,7 +468,7 @@
}
}
-void TiledCoreAnimationDrawingArea::activityStateDidChange(ActivityState::Flags changed, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>& nextActivityStateChangeCallbackIDs)
+void TiledCoreAnimationDrawingArea::activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> changed, ActivityStateChangeID activityStateChangeID, const Vector<CallbackID>& nextActivityStateChangeCallbackIDs)
{
m_nextActivityStateChangeCallbackIDs.appendVector(nextActivityStateChangeCallbackIDs);
m_activityStateChangeID = std::max(m_activityStateChangeID, activityStateChangeID);
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1373,7 +1373,7 @@
#endif
-void WebProcess::pageActivityStateDidChange(uint64_t, WebCore::ActivityState::Flags changed)
+void WebProcess::pageActivityStateDidChange(uint64_t, OptionSet<WebCore::ActivityState::Flag> changed)
{
if (changed & WebCore::ActivityState::IsVisible)
updateCPUMonitorState(CPUMonitorUpdateReason::VisibilityHasChanged);
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (234919 => 234920)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2018-08-16 12:49:01 UTC (rev 234920)
@@ -195,7 +195,7 @@
#endif
void updateActivePages();
- void pageActivityStateDidChange(uint64_t pageID, WebCore::ActivityState::Flags changed);
+ void pageActivityStateDidChange(uint64_t pageID, OptionSet<WebCore::ActivityState::Flag> changed);
void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds);
Modified: trunk/Tools/ChangeLog (234919 => 234920)
--- trunk/Tools/ChangeLog 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Tools/ChangeLog 2018-08-16 12:49:01 UTC (rev 234920)
@@ -1,3 +1,13 @@
+2018-08-16 Antti Koivisto <an...@apple.com>
+
+ Use OptionSet for ActivityState::Flags
+ https://bugs.webkit.org/show_bug.cgi?id=188554
+
+ Reviewed by Brent Fulgham.
+
+ * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
+ (TestWebKitAPI::TEST):
+
2018-08-16 Carlos Garcia Campos <cgar...@igalia.com>
[GTK] MiniBrowser: web view doesn't get the focus when new window is created
Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp (234919 => 234920)
--- trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp 2018-08-16 11:48:36 UTC (rev 234919)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp 2018-08-16 12:49:01 UTC (rev 234920)
@@ -379,6 +379,31 @@
}
}
+TEST(WTF_OptionSet, OperatorXor)
+{
+ OptionSet<ExampleFlags> a { ExampleFlags::A };
+ OptionSet<ExampleFlags> ac { ExampleFlags::A, ExampleFlags::C };
+ OptionSet<ExampleFlags> bc { ExampleFlags::B, ExampleFlags::C };
+ {
+ auto set = a ^ ac;
+ EXPECT_FALSE(set.contains(ExampleFlags::A));
+ EXPECT_FALSE(set.contains(ExampleFlags::B));
+ EXPECT_TRUE(set.contains(ExampleFlags::C));
+ }
+ {
+ auto set = a ^ bc;
+ EXPECT_TRUE(set.contains(ExampleFlags::A));
+ EXPECT_TRUE(set.contains(ExampleFlags::B));
+ EXPECT_TRUE(set.contains(ExampleFlags::C));
+ }
+ {
+ auto set = ac ^ bc;
+ EXPECT_TRUE(set.contains(ExampleFlags::A));
+ EXPECT_TRUE(set.contains(ExampleFlags::B));
+ EXPECT_FALSE(set.contains(ExampleFlags::C));
+ }
+}
+
TEST(WTF_OptionSet, ContainsAny)
{
OptionSet<ExampleFlags> set { ExampleFlags::A, ExampleFlags::B };