blob: 34faf992e291c853bc8b68a368ec1f52eccc0448 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef InspectorEmulationAgent_h
#define InspectorEmulationAgent_h
#include "base/macros.h"
#include "core/CoreExport.h"
#include "core/inspector/InspectorBaseAgent.h"
#include "core/inspector/protocol/Emulation.h"
#include "core/loader/FrameLoaderTypes.h"
#include "platform/scheduler/renderer/web_view_scheduler.h"
#include "platform/wtf/Optional.h"
#include "platform/wtf/Time.h"
namespace blink {
class WebLocalFrameImpl;
class WebViewImpl;
namespace protocol {
namespace DOM {
class RGBA;
} // namespace DOM
} // namespace protocol
class CORE_EXPORT InspectorEmulationAgent final
: public InspectorBaseAgent<protocol::Emulation::Metainfo>,
public WebViewScheduler::VirtualTimeObserver {
public:
explicit InspectorEmulationAgent(WebLocalFrameImpl*);
~InspectorEmulationAgent() override;
// protocol::Dispatcher::EmulationCommandHandler implementation.
protocol::Response resetPageScaleFactor() override;
protocol::Response setPageScaleFactor(double) override;
protocol::Response setScriptExecutionDisabled(bool value) override;
protocol::Response setTouchEmulationEnabled(
bool enabled,
protocol::Maybe<int> max_touch_points) override;
protocol::Response setEmulatedMedia(const String&) override;
protocol::Response setCPUThrottlingRate(double) override;
protocol::Response setVirtualTimePolicy(
const String& policy,
protocol::Maybe<double> virtual_time_budget_ms,
protocol::Maybe<int> max_virtual_time_task_starvation_count,
protocol::Maybe<bool> wait_for_navigation,
double* virtual_time_base_ms) override;
protocol::Response setNavigatorOverrides(const String& platform) override;
protocol::Response setDefaultBackgroundColorOverride(
protocol::Maybe<protocol::DOM::RGBA>) override;
protocol::Response setDeviceMetricsOverride(
int width,
int height,
double device_scale_factor,
bool mobile,
protocol::Maybe<double> scale,
protocol::Maybe<int> screen_width,
protocol::Maybe<int> screen_height,
protocol::Maybe<int> position_x,
protocol::Maybe<int> position_y,
protocol::Maybe<bool> dont_set_visible_size,
protocol::Maybe<protocol::Emulation::ScreenOrientation>,
protocol::Maybe<protocol::Page::Viewport>) override;
protocol::Response clearDeviceMetricsOverride() override;
// InspectorInstrumentation API
void FrameStartedLoading(LocalFrame*, FrameLoadType);
// InspectorBaseAgent overrides.
protocol::Response disable() override;
void Restore() override;
// scheduler::WebViewScheduler::VirtualTimeObserver implementation.
void OnVirtualTimeAdvanced(WTF::TimeDelta virtual_time_offset) override;
void OnVirtualTimePaused(WTF::TimeDelta virtual_time_offset) override;
void Trace(blink::Visitor*) override;
private:
WebViewImpl* GetWebViewImpl();
void VirtualTimeBudgetExpired();
struct PendingVirtualTimePolicy {
WebViewScheduler::VirtualTimePolicy policy;
WTF::Optional<double> virtual_time_budget_ms;
WTF::Optional<int> max_virtual_time_task_starvation_count;
};
WTF::TimeTicks ApplyVirtualTimePolicy(
const PendingVirtualTimePolicy& new_policy);
Member<WebLocalFrameImpl> web_local_frame_;
bool virtual_time_setup_ = false;
// Supports a virtual time policy change scheduled to occur after any
// navigation has started.
WTF::Optional<PendingVirtualTimePolicy> pending_virtual_time_policy_;
DISALLOW_COPY_AND_ASSIGN(InspectorEmulationAgent);
};
} // namespace blink
#endif // !defined(InspectorEmulationAgent_h)