158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EMBEDDER_MESSAGE_DISPATCHER_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EMBEDDER_MESSAGE_DISPATCHER_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <map>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <string>
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/callback.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/insets.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/rect.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/size.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace base {
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ListValue;
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/**
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Dispatcher for messages sent from the DevTools frontend running in an
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * isolated renderer (on chrome-devtools://) to the embedder in the browser.
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * The messages are sent via InspectorFrontendHost.sendMessageToEmbedder method.
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class DevToolsEmbedderMessageDispatcher {
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  class Delegate {
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   public:
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual ~Delegate() {}
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void ActivateWindow() = 0;
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void CloseWindow() = 0;
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    virtual void SetInspectedPageBounds(const gfx::Rect& rect) = 0;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void InspectElementCompleted() = 0;
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    virtual void InspectedURLChanged(const std::string& url) = 0;
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void MoveWindow(int x, int y) = 0;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void SetIsDocked(bool is_docked) = 0;
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void OpenInNewTab(const std::string& url) = 0;
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void SaveToFile(const std::string& url,
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                            const std::string& content,
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                            bool save_as) = 0;
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void AppendToFile(const std::string& url,
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              const std::string& content) = 0;
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void RequestFileSystems() = 0;
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void AddFileSystem() = 0;
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void RemoveFileSystem(const std::string& file_system_path) = 0;
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    virtual void UpgradeDraggedFileSystemPermissions(
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        const std::string& file_system_url) = 0;
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void IndexPath(int request_id,
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                           const std::string& file_system_path) = 0;
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void StopIndexing(int request_id) = 0;
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual void SearchInPath(int request_id,
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              const std::string& file_system_path,
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              const std::string& query) = 0;
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    virtual void SetWhitelistedShortcuts(const std::string& message) = 0;
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void ZoomIn() = 0;
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void ZoomOut() = 0;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void ResetZoom() = 0;
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    virtual void OpenUrlOnRemoteDeviceAndInspect(const std::string& browser_id,
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                                 const std::string& url) = 0;
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual void SetDeviceCountUpdatesEnabled(bool enabled) = 0;
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual void SetDevicesUpdatesEnabled(bool enabled) = 0;
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual void SendMessageToBrowser(const std::string& message) = 0;
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  };
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~DevToolsEmbedderMessageDispatcher() {}
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool Dispatch(const std::string& method,
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                        const base::ListValue* params,
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                        std::string* error) = 0;
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static DevToolsEmbedderMessageDispatcher* createForDevToolsFrontend(
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      Delegate* delegate);
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EMBEDDER_MESSAGE_DISPATCHER_H_
78