WebBrowserHost.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <SDL/include/SDL.h>
  2. #include <ThirdParty/SDL/include/SDL_syswm.h>
  3. #include <include/cef_app.h>
  4. #include <include/cef_client.h>
  5. #include <include/wrapper/cef_helpers.h>
  6. #include <include/base/cef_bind.h>
  7. #include <include/wrapper/cef_closure_task.h>
  8. #include <Atomic/Core/ProcessUtils.h>
  9. #include <Atomic/Core/CoreEvents.h>
  10. #include <Atomic/IO/Log.h>
  11. #include <Atomic/Graphics/Graphics.h>
  12. #include "Internal/WebAppBrowser.h"
  13. #include "WebSchemeHandler.h"
  14. #include "WebClient.h"
  15. #include "WebBrowserHost.h"
  16. namespace Atomic
  17. {
  18. class WebBrowserHostPrivate
  19. {
  20. friend class WebBrowserHost;
  21. public:
  22. WebBrowserHostPrivate(WebBrowserHost* host)
  23. {
  24. host_ = host;
  25. app_ = new WebAppBrowser();
  26. }
  27. virtual ~WebBrowserHostPrivate()
  28. {
  29. host_ = 0;
  30. }
  31. private:
  32. WeakPtr<WebBrowserHost> host_;
  33. CefRefPtr<CefApp> app_;
  34. };
  35. WebBrowserHost::WebBrowserHost(Context* context) : Object (context)
  36. {
  37. const Vector<String>& arguments = GetArguments();
  38. // IMPORTANT: Cef::App contains virtual void OnBeforeCommandLineProcessing(), which should make it possible
  39. // to setup args on Windows
  40. #ifdef ATOMIC_PLATFORM_OSX
  41. const char* _argv[3] = { "", "--enable-media-stream", "--enable-usermedia-screen-capturing" };
  42. CefMainArgs args(3, (char**) &_argv);
  43. #else
  44. CefMainArgs args;
  45. #endif
  46. CefSettings settings;
  47. settings.windowless_rendering_enabled = true;
  48. d_ = new WebBrowserHostPrivate(this);
  49. // If losing OSX system menu, it means we're calling this
  50. // before initializing graphics subsystem
  51. if (!CefInitialize(args, settings, d_->app_, nullptr))
  52. {
  53. LOGERROR("CefInitialize - Error");
  54. }
  55. RegisterWebSchemeHandlers(this);
  56. SubscribeToEvent(E_BEGINFRAME, HANDLER(WebBrowserHost, HandleBeginFrame));
  57. }
  58. WebBrowserHost::~WebBrowserHost()
  59. {
  60. CefClearSchemeHandlerFactories();
  61. CefShutdown();
  62. }
  63. void WebBrowserHost::HandleBeginFrame(StringHash eventType, VariantMap& eventData)
  64. {
  65. CefDoMessageLoopWork();
  66. }
  67. }