web_view_manager.cc 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright (c) 2014 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "shell/browser/web_view_manager.h"
  5. #include "content/public/browser/web_contents.h"
  6. #include "shell/browser/electron_browser_context.h"
  7. namespace electron {
  8. WebViewManager::WebViewManager() = default;
  9. WebViewManager::~WebViewManager() = default;
  10. void WebViewManager::AddGuest(int guest_instance_id,
  11. content::WebContents* embedder,
  12. content::WebContents* web_contents) {
  13. web_contents_embedder_map_[guest_instance_id] = {web_contents, embedder};
  14. }
  15. void WebViewManager::RemoveGuest(int guest_instance_id) {
  16. web_contents_embedder_map_.erase(guest_instance_id);
  17. }
  18. bool WebViewManager::ForEachGuest(
  19. content::WebContents* embedder_web_contents,
  20. base::FunctionRef<bool(content::WebContents*)> fn) {
  21. for (auto& item : web_contents_embedder_map_) {
  22. if (item.second.embedder != embedder_web_contents)
  23. continue;
  24. content::WebContents* guest_web_contents = item.second.web_contents;
  25. if (guest_web_contents && fn(guest_web_contents))
  26. return true;
  27. }
  28. return false;
  29. }
  30. // static
  31. WebViewManager* WebViewManager::GetWebViewManager(
  32. content::WebContents* web_contents) {
  33. auto* context = web_contents->GetBrowserContext();
  34. if (context) {
  35. auto* manager = context->GetGuestManager();
  36. return static_cast<WebViewManager*>(manager);
  37. } else {
  38. return nullptr;
  39. }
  40. }
  41. } // namespace electron