atom_render_frame_observer.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (c) 2017 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_RENDERER_ATOM_RENDER_FRAME_OBSERVER_H_
  5. #define ATOM_RENDERER_ATOM_RENDER_FRAME_OBSERVER_H_
  6. #include "atom/renderer/renderer_client_base.h"
  7. #include "base/strings/string16.h"
  8. #include "content/public/renderer/render_frame_observer.h"
  9. #include "third_party/WebKit/public/web/WebLocalFrame.h"
  10. namespace base {
  11. class ListValue;
  12. }
  13. namespace atom {
  14. enum World {
  15. MAIN_WORLD = 0,
  16. // Use a high number far away from 0 to not collide with any other world
  17. // IDs created internally by Chrome.
  18. ISOLATED_WORLD = 999
  19. };
  20. // Helper class to forward the messages to the client.
  21. class AtomRenderFrameObserver : public content::RenderFrameObserver {
  22. public:
  23. AtomRenderFrameObserver(content::RenderFrame* frame,
  24. RendererClientBase* renderer_client);
  25. // content::RenderFrameObserver:
  26. void DidClearWindowObject() override;
  27. void DidCreateScriptContext(v8::Handle<v8::Context> context,
  28. int world_id) override;
  29. void DraggableRegionsChanged() override;
  30. void WillReleaseScriptContext(v8::Local<v8::Context> context,
  31. int world_id) override;
  32. void OnDestruct() override;
  33. bool OnMessageReceived(const IPC::Message& message) override;
  34. void DidCreateDocumentElement() override;
  35. protected:
  36. virtual void EmitIPCEvent(blink::WebLocalFrame* frame,
  37. const base::string16& channel,
  38. const base::ListValue& args);
  39. private:
  40. bool ShouldNotifyClient(int world_id);
  41. void CreateIsolatedWorldContext();
  42. bool IsMainWorld(int world_id);
  43. bool IsIsolatedWorld(int world_id);
  44. void OnBrowserMessage(bool send_to_all,
  45. const base::string16& channel,
  46. const base::ListValue& args);
  47. content::RenderFrame* render_frame_;
  48. RendererClientBase* renderer_client_;
  49. bool document_created_ = false;
  50. DISALLOW_COPY_AND_ASSIGN(AtomRenderFrameObserver);
  51. };
  52. } // namespace atom
  53. #endif // ATOM_RENDERER_ATOM_RENDER_FRAME_OBSERVER_H_