WPSchemeHandler.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include <string>
  3. #include "WallpaperEngine/Assets/AssetLocator.h"
  4. #include "include/cef_resource_handler.h"
  5. #include "include/wrapper/cef_helpers.h"
  6. namespace WallpaperEngine::Data::Model {
  7. struct Project;
  8. }
  9. namespace WallpaperEngine::WebBrowser::CEF {
  10. using namespace WallpaperEngine::Assets;
  11. using namespace WallpaperEngine::Data::Model;
  12. /**
  13. * Serves one wallpaper's files under WPENGINE_SCHEME, bound to that wallpaper's Project by
  14. * WPSchemeHandlerFactory::Create once it's resolved the request's host to a workshop id.
  15. */
  16. class WPSchemeHandler : public CefResourceHandler {
  17. public:
  18. explicit WPSchemeHandler (const Project& project);
  19. bool Open (CefRefPtr<CefRequest> request, bool& handle_request, CefRefPtr<CefCallback> callback) override;
  20. void
  21. GetResponseHeaders (CefRefPtr<CefResponse> response, int64_t& response_length, CefString& redirectUrl) override;
  22. void Cancel () override;
  23. bool
  24. Read (void* data_out, int bytes_to_read, int& bytes_read, CefRefPtr<CefResourceReadCallback> callback) override;
  25. private:
  26. const Project& m_project;
  27. const AssetLocator& m_assetLoader;
  28. ReadStreamSharedPtr m_contents = nullptr;
  29. std::string m_mimeType;
  30. IMPLEMENT_REFCOUNTING (WPSchemeHandler);
  31. DISALLOW_COPY_AND_ASSIGN (WPSchemeHandler);
  32. };
  33. };