blob: 0b66d8254368657476ce58288fe2f3ad706757a7 [file] [log] [blame]
// Copyright 2016 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 COMPONENTS_UI_DEVTOOLS_DEVTOOLS_BASE_AGENT_H_
#define COMPONENTS_UI_DEVTOOLS_DEVTOOLS_BASE_AGENT_H_
#include "components/ui_devtools/Protocol.h"
namespace ui {
namespace devtools {
class UiDevToolsAgent {
public:
UiDevToolsAgent() {}
virtual ~UiDevToolsAgent() {}
virtual void Init(protocol::UberDispatcher*) = 0;
virtual void Disable() = 0;
};
// A base agent so that any Backend implementation has access to the
// corresponding frontend instance. This also wires the backend with
// the dispatcher. When initializing an instance of this class,
// the template argument is simply the generated Metainfo class of
// any domain type such as DOM or CSS.
template <typename DomainMetainfo>
class UiDevToolsBaseAgent : public UiDevToolsAgent,
public DomainMetainfo::BackendClass {
public:
// UiDevToolsAgent:
void Init(protocol::UberDispatcher* dispatcher) override {
frontend_.reset(
new typename DomainMetainfo::FrontendClass(dispatcher->channel()));
DomainMetainfo::DispatcherClass::wire(dispatcher, this);
}
void Disable() override { disable(); }
// Common methods between all generated Backends, subclasses may
// choose to override them (but not necessary).
ui::devtools::protocol::Response enable() override {
return ui::devtools::protocol::Response::OK();
};
ui::devtools::protocol::Response disable() override {
return ui::devtools::protocol::Response::OK();
};
protected:
UiDevToolsBaseAgent() {}
typename DomainMetainfo::FrontendClass* frontend() const {
return frontend_.get();
}
private:
std::unique_ptr<typename DomainMetainfo::FrontendClass> frontend_;
DISALLOW_COPY_AND_ASSIGN(UiDevToolsBaseAgent);
};
} // namespace devtools
} // namespace ui
#endif // COMPONENTS_UI_DEVTOOLS_DEVTOOLS_BASE_AGENT_H_