blob: 27d4cc87e5072918ed8dc4daa4b2ae9eccf526e6 [file] [log] [blame]
// Copyright 2019 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.
#include "content/browser/devtools/protocol/overlay_handler.h"
#include "content/browser/renderer_host/render_widget_host_input_event_router.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include <stdint.h>
#include <utility>
namespace content {
namespace protocol {
OverlayHandler::OverlayHandler()
: DevToolsDomainHandler(Overlay::Metainfo::domainName) {}
OverlayHandler::~OverlayHandler() = default;
void OverlayHandler::Wire(UberDispatcher* dispatcher) {
Overlay::Dispatcher::wire(dispatcher, this);
}
void OverlayHandler::SetRenderer(int process_host_id,
RenderFrameHostImpl* frame_host) {
if (host_ == frame_host)
return;
host_ = frame_host;
UpdateCaptureInputEvents();
}
Response OverlayHandler::SetInspectMode(
const String& in_mode,
Maybe<protocol::Overlay::HighlightConfig> in_highlightConfig) {
inspect_mode_ = in_mode;
UpdateCaptureInputEvents();
return Response::FallThrough();
}
Response OverlayHandler::SetPausedInDebuggerMessage(Maybe<String> message) {
paused_message_ = message.fromMaybe(std::string());
UpdateCaptureInputEvents();
return Response::FallThrough();
}
Response OverlayHandler::Disable() {
inspect_mode_ = std::string();
paused_message_ = std::string();
UpdateCaptureInputEvents();
return Response::FallThrough();
}
void OverlayHandler::UpdateCaptureInputEvents() {
if (!host_)
return;
auto* web_contents =
WebContentsImpl::FromFrameTreeNode(host_->frame_tree_node());
if (!web_contents)
return;
bool capture_input =
inspect_mode_ == Overlay::InspectModeEnum::CaptureAreaScreenshot ||
!paused_message_.empty();
if (!web_contents->GetInputEventRouter())
return;
web_contents->GetInputEventRouter()->set_route_to_root_for_devtools(
capture_input);
}
} // namespace protocol
} // namespace content