|  | // Copyright 2017 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 "chrome/browser/devtools/protocol/page_handler.h" | 
|  |  | 
|  | #include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h" | 
|  |  | 
|  | PageHandler::PageHandler(content::WebContents* web_contents, | 
|  | protocol::UberDispatcher* dispatcher) | 
|  | : content::WebContentsObserver(web_contents) { | 
|  | DCHECK(web_contents); | 
|  | protocol::Page::Dispatcher::wire(dispatcher, this); | 
|  | } | 
|  |  | 
|  | PageHandler::~PageHandler() { | 
|  | ToggleAdBlocking(false /* enabled */); | 
|  | } | 
|  |  | 
|  | void PageHandler::ToggleAdBlocking(bool enabled) { | 
|  | if (!web_contents()) | 
|  | return; | 
|  | if (auto* client = | 
|  | ChromeSubresourceFilterClient::FromWebContents(web_contents())) { | 
|  | client->ToggleForceActivationInCurrentWebContents(enabled); | 
|  | } | 
|  | } | 
|  |  | 
|  | protocol::Response PageHandler::Enable() { | 
|  | enabled_ = true; | 
|  | // Do not mark the command as handled. Let it fall through instead, so that | 
|  | // the handler in content gets a chance to process the command. | 
|  | return protocol::Response::FallThrough(); | 
|  | } | 
|  |  | 
|  | protocol::Response PageHandler::Disable() { | 
|  | enabled_ = false; | 
|  | ToggleAdBlocking(false /* enable */); | 
|  | // Do not mark the command as handled. Let it fall through instead, so that | 
|  | // the handler in content gets a chance to process the command. | 
|  | return protocol::Response::FallThrough(); | 
|  | } | 
|  |  | 
|  | protocol::Response PageHandler::SetAdBlockingEnabled(bool enabled) { | 
|  | if (!enabled_) | 
|  | return protocol::Response::Error("Page domain is disabled."); | 
|  | ToggleAdBlocking(enabled); | 
|  | return protocol::Response::OK(); | 
|  | } |