• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2008, The Android Open Source Project
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef WDS_COMMAND_H
27 #define WDS_COMMAND_H
28 
29 #include "wtf/MainThread.h"
30 #include "wtf/Vector.h"
31 
32 namespace WebCore {
33 class Frame;
34 }
35 
36 using namespace WTF;
37 using namespace WebCore;
38 
39 namespace android {
40 
41 // WebCore Debug Server
42 namespace WDS {
43 
44 class Connection;
45 
46 // Command identifier length
47 #define COMMAND_LENGTH 4
48 
49 // The dispatcher function called with a Frame for context and the established
50 // connection to the client. The connection can be used to read and write to the
51 // client application. Return true on successful completion of the command,
52 // return false to indicate failure.
53 typedef bool (*DispatchFunction)(const Frame*, const Connection*);
54 
55 // Note: Although the type is named MainThreadFunction, it may not always be
56 // the main thread. The type is generic enough to reuse here but named
57 // something more appropriate.
58 typedef MainThreadFunction TargetThreadFunction;
59 
60 // Helper class to dipatch functions on a particular thread.
61 class Handler {
62 public:
~Handler()63     virtual ~Handler() {}
64     virtual void post(TargetThreadFunction, void*) const = 0;
65 };
66 
67 // Class for containing information about particular commands.
68 class Command {
69 public:
Command(const char * name,const char * desc,const DispatchFunction func,const Handler & handler)70     Command(const char* name, const char* desc, const DispatchFunction func,
71             const Handler& handler)
72         : m_name(name)
73         , m_description(desc)
74         , m_dispatch(func)
75         , m_handler(handler) {}
Command(const Command & comm)76     Command(const Command& comm)
77         : m_name(comm.m_name)
78         , m_description(comm.m_description)
79         , m_dispatch(comm.m_dispatch)
80         , m_handler(comm.m_handler) {}
~Command()81     virtual ~Command() {}
82 
83     // Initialize the debug server commands
84     static void Init();
85 
86     // Find the command specified by the client request.
87     static Command* Find(const Connection* conn);
88 
89     // Dispatch this command
90     void dispatch();
91 
name()92     const char* name() const { return m_name; }
93 
94 protected:
95     const char* m_name;
96     const char* m_description;
97     const DispatchFunction m_dispatch;
98 
99 private:
100     const Handler& m_handler;
101     static Vector<const Command*>* s_commands;
102 };
103 
104 } // end namespace WDS
105 
106 } // end namespace android
107 
108 #endif
109