Home | History | Annotate | Download | only in devtools
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
      6 #define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/compiler_specific.h"
     12 #include "base/values.h"
     13 
     14 // Utility class for processing DevTools remote debugging messages.
     15 // This is a stripped down clone of content::DevTools which is not accessible
     16 // from chrome component (see content/browser/devtools/devtools_protocol.*).
     17 class DevToolsProtocol {
     18  public:
     19   class Message {
     20    public:
     21     virtual ~Message();
     22 
     23     std::string method() { return method_; }
     24     base::DictionaryValue* params() { return params_.get(); }
     25 
     26    protected:
     27     // Takes ownership of |params|.
     28     Message(const std::string& method, base::DictionaryValue* params);
     29 
     30     std::string method_;
     31     scoped_ptr<base::DictionaryValue> params_;
     32 
     33    private:
     34     DISALLOW_COPY_AND_ASSIGN(Message);
     35   };
     36 
     37   class Command : public Message {
     38    public:
     39     // Takes ownership of |params|.
     40     Command(int id, const std::string& method, base::DictionaryValue* params);
     41     virtual ~Command();
     42 
     43     int id() { return id_; }
     44     std::string Serialize();
     45 
     46    private:
     47     int id_;
     48 
     49     DISALLOW_COPY_AND_ASSIGN(Command);
     50   };
     51 
     52   class Response {
     53    public:
     54     virtual ~Response();
     55 
     56     int id() { return id_; }
     57     int error_code() { return error_code_; }
     58 
     59    private:
     60     friend class DevToolsProtocol;
     61 
     62     Response(int id, int error_code);
     63     int id_;
     64     int error_code_;
     65 
     66     DISALLOW_COPY_AND_ASSIGN(Response);
     67   };
     68 
     69   class Notification : public Message {
     70    public:
     71     virtual ~Notification();
     72 
     73    private:
     74     friend class DevToolsProtocol;
     75 
     76     // Takes ownership of |params|.
     77     Notification(const std::string& method,
     78                  base::DictionaryValue* params);
     79 
     80     DISALLOW_COPY_AND_ASSIGN(Notification);
     81   };
     82 
     83   // Result ownership is passed to the caller.
     84   static Notification* ParseNotification(const std::string& json);
     85 
     86   // Result ownership is passed to the caller.
     87   static Response* ParseResponse(const std::string& json);
     88 
     89  private:
     90 
     91   DevToolsProtocol() {}
     92   ~DevToolsProtocol() {}
     93 };
     94 
     95 #endif  // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
     96