| // 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 HEADLESS_PUBLIC_HEADLESS_DEVTOOLS_CLIENT_H_ |
| #define HEADLESS_PUBLIC_HEADLESS_DEVTOOLS_CLIENT_H_ |
| |
| #include <memory> |
| |
| #include "base/macros.h" |
| #include "headless/public/headless_devtools_channel.h" |
| #include "headless/public/headless_export.h" |
| |
| namespace base { |
| class DictionaryValue; |
| } // namespace base |
| |
| namespace headless { |
| |
| namespace accessibility { |
| class Domain; |
| } |
| namespace animation { |
| class Domain; |
| } |
| namespace application_cache { |
| class Domain; |
| } |
| namespace browser { |
| class Domain; |
| } |
| namespace cache_storage { |
| class Domain; |
| } |
| namespace console { |
| class Domain; |
| } |
| namespace css { |
| class Domain; |
| } |
| namespace database { |
| class Domain; |
| } |
| namespace debugger { |
| class Domain; |
| } |
| namespace device_orientation { |
| class Domain; |
| } |
| namespace dom { |
| class Domain; |
| } |
| namespace dom_debugger { |
| class Domain; |
| } |
| namespace dom_snapshot { |
| class Domain; |
| } |
| namespace dom_storage { |
| class Domain; |
| } |
| namespace emulation { |
| class Domain; |
| } |
| namespace headless_experimental { |
| class Domain; |
| } |
| namespace heap_profiler { |
| class Domain; |
| } |
| namespace indexeddb { |
| class Domain; |
| } |
| namespace input { |
| class Domain; |
| } |
| namespace inspector { |
| class Domain; |
| } |
| namespace io { |
| class Domain; |
| } |
| namespace layer_tree { |
| class Domain; |
| } |
| namespace log { |
| class Domain; |
| } |
| namespace memory { |
| class Domain; |
| } |
| namespace network { |
| class Domain; |
| } |
| namespace page { |
| class Domain; |
| } |
| namespace performance { |
| class Domain; |
| } |
| namespace profiler { |
| class Domain; |
| } |
| namespace runtime { |
| class Domain; |
| } |
| namespace security { |
| class Domain; |
| } |
| namespace service_worker { |
| class Domain; |
| } |
| namespace target { |
| class Domain; |
| } |
| namespace tracing { |
| class Domain; |
| } |
| |
| // An interface for controlling and receiving events from a devtools target. |
| class HEADLESS_EXPORT HeadlessDevToolsClient { |
| public: |
| virtual ~HeadlessDevToolsClient() {} |
| |
| class HEADLESS_EXPORT ExternalHost { |
| public: |
| ExternalHost() {} |
| virtual ~ExternalHost() {} |
| virtual void SendProtocolMessage(const std::string& message) = 0; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ExternalHost); |
| }; |
| |
| static std::unique_ptr<HeadlessDevToolsClient> Create(); |
| |
| // TODO(dgozman): remove this method and ExternalHost altogether. |
| static std::unique_ptr<HeadlessDevToolsClient> CreateWithExternalHost( |
| ExternalHost*); |
| |
| // DevTools commands are split into domains which corresponds to the getters |
| // below. Each domain can be used to send commands and to subscribe to events. |
| // |
| // See http://chromedevtools.github.io/debugger-protocol-viewer/ for |
| // the capabilities of each domain. |
| virtual accessibility::Domain* GetAccessibility() = 0; |
| virtual animation::Domain* GetAnimation() = 0; |
| virtual application_cache::Domain* GetApplicationCache() = 0; |
| virtual browser::Domain* GetBrowser() = 0; |
| virtual cache_storage::Domain* GetCacheStorage() = 0; |
| virtual console::Domain* GetConsole() = 0; |
| virtual css::Domain* GetCSS() = 0; |
| virtual database::Domain* GetDatabase() = 0; |
| virtual debugger::Domain* GetDebugger() = 0; |
| virtual device_orientation::Domain* GetDeviceOrientation() = 0; |
| virtual dom::Domain* GetDOM() = 0; |
| virtual dom_debugger::Domain* GetDOMDebugger() = 0; |
| virtual dom_snapshot::Domain* GetDOMSnapshot() = 0; |
| virtual dom_storage::Domain* GetDOMStorage() = 0; |
| virtual emulation::Domain* GetEmulation() = 0; |
| virtual headless_experimental::Domain* GetHeadlessExperimental() = 0; |
| virtual heap_profiler::Domain* GetHeapProfiler() = 0; |
| virtual indexeddb::Domain* GetIndexedDB() = 0; |
| virtual input::Domain* GetInput() = 0; |
| virtual inspector::Domain* GetInspector() = 0; |
| virtual io::Domain* GetIO() = 0; |
| virtual layer_tree::Domain* GetLayerTree() = 0; |
| virtual log::Domain* GetLog() = 0; |
| virtual memory::Domain* GetMemory() = 0; |
| virtual network::Domain* GetNetwork() = 0; |
| virtual page::Domain* GetPage() = 0; |
| virtual performance::Domain* GetPerformance() = 0; |
| virtual profiler::Domain* GetProfiler() = 0; |
| virtual runtime::Domain* GetRuntime() = 0; |
| virtual security::Domain* GetSecurity() = 0; |
| virtual service_worker::Domain* GetServiceWorker() = 0; |
| virtual target::Domain* GetTarget() = 0; |
| virtual tracing::Domain* GetTracing() = 0; |
| |
| class HEADLESS_EXPORT RawProtocolListener { |
| public: |
| RawProtocolListener() {} |
| virtual ~RawProtocolListener() {} |
| |
| // Returns true if the listener handled the message. |
| virtual bool OnProtocolMessage( |
| const std::string& json_message, |
| const base::DictionaryValue& parsed_message) = 0; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(RawProtocolListener); |
| }; |
| |
| virtual void AttachToChannel( |
| std::unique_ptr<HeadlessDevToolsChannel> channel) = 0; |
| virtual void DetachFromChannel() = 0; |
| |
| virtual void SetRawProtocolListener( |
| RawProtocolListener* raw_protocol_listener) = 0; |
| |
| virtual std::unique_ptr<HeadlessDevToolsClient> CreateSession( |
| const std::string& session_id) = 0; |
| |
| // Generates an odd numbered ID. |
| virtual int GetNextRawDevToolsMessageId() = 0; |
| |
| // The id within the message must be odd to prevent collisions. |
| virtual void SendRawDevToolsMessage(const std::string& json_message) = 0; |
| |
| // TODO(dgozman): remove this method together with ExternalHost. |
| virtual void DispatchMessageFromExternalHost( |
| const std::string& json_message) = 0; |
| |
| // TODO(skyostil): Add notification for disconnection. |
| |
| private: |
| friend class HeadlessDevToolsClientImpl; |
| |
| HeadlessDevToolsClient() {} |
| |
| DISALLOW_COPY_AND_ASSIGN(HeadlessDevToolsClient); |
| }; |
| |
| } // namespace headless |
| |
| #endif // HEADLESS_PUBLIC_HEADLESS_DEVTOOLS_CLIENT_H_ |