web_view_manager.cc 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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(content::WebContents* embedder_web_contents,
  19. const GuestCallback& callback) {
  20. for (auto& item : web_contents_embedder_map_) {
  21. if (item.second.embedder != embedder_web_contents)
  22. continue;
  23. auto* guest_web_contents = item.second.web_contents;
  24. if (guest_web_contents && callback.Run(guest_web_contents))
  25. return true;
  26. }
  27. return false;
  28. }
  29. // static
  30. WebViewManager* WebViewManager::GetWebViewManager(
  31. content::WebContents* web_contents) {
  32. auto* context = web_contents->GetBrowserContext();
  33. if (context) {
  34. auto* manager = context->GetGuestManager();
  35. return static_cast<WebViewManager*>(manager);
  36. } else {
  37. return nullptr;
  38. }
  39. }
  40. } // namespace electron