15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef InspectorBaseAgent_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define InspectorBaseAgent_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/InspectorBackendDispatcher.h" 35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/inspector/InstrumentingAgents.h" 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/heap/Handle.h" 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h" 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Vector.h" 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/WTFString.h" 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorFrontend; 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class InspectorCompositeState; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorState; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InstrumentingAgents; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class InspectorAgent : public NoBaseWillBeGarbageCollectedFinalized<InspectorAgent> { 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) explicit InspectorAgent(const String&); 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual ~InspectorAgent(); 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void trace(Visitor*); 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void init() { } 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setFrontend(InspectorFrontend*) { } 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void clearFrontend() { } 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void restore() { } 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void registerInDispatcher(InspectorBackendDispatcher*) = 0; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void discardAgent() { } 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didCommitLoadForMainFrame() { } 6143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual void flushPendingFrontendMessages() { } 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String name() { return m_name; } 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void appended(InstrumentingAgents*, InspectorState*); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InstrumentingAgents> m_instrumentingAgents; 68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InspectorState> m_state; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_name; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class InspectorAgentRegistry FINAL { 75c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) DISALLOW_ALLOCATION(); 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)public: 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) InspectorAgentRegistry(InstrumentingAgents*, InspectorCompositeState*); 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void append(PassOwnPtrWillBeRawPtr<InspectorAgent>); 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setFrontend(InspectorFrontend*); 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void clearFrontend(); 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void restore(); 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void registerInDispatcher(InspectorBackendDispatcher*); 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void discardAgents(); 8543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void flushPendingFrontendMessages(); 86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void didCommitLoadForMainFrame(); 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 88c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void trace(Visitor*); 89c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)private: 91c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InstrumentingAgents> m_instrumentingAgents; 92c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InspectorCompositeState> m_inspectorState; 93c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WillBeHeapVector<OwnPtrWillBeMember<InspectorAgent> > m_agents; 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template<typename T> 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class InspectorBaseAgent : public InspectorAgent { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~InspectorBaseAgent() { } 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void registerInDispatcher(InspectorBackendDispatcher* dispatcher) OVERRIDE FINAL 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatcher->registerAgent(static_cast<T*>(this)); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 107c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) explicit InspectorBaseAgent(const String& name) : InspectorAgent(name) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)inline bool asBool(const bool* const b) 113c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 114c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return b ? *b : false; 115c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 116c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 117c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // !defined(InspectorBaseAgent_h) 120