diff --git a/atom.gyp b/atom.gyp index 02b12a80a8..c83529a5d2 100644 --- a/atom.gyp +++ b/atom.gyp @@ -88,6 +88,7 @@ 'atom/browser/api/atom_api_tray.h', 'atom/browser/api/atom_api_web_contents.cc', 'atom/browser/api/atom_api_web_contents.h', + 'atom/browser/api/atom_api_web_view_manager.cc', 'atom/browser/api/atom_api_window.cc', 'atom/browser/api/atom_api_window.h', 'atom/browser/api/event.cc', diff --git a/atom/browser/api/atom_api_web_view_manager.cc b/atom/browser/api/atom_api_web_view_manager.cc new file mode 100644 index 0000000000..bd5f47141f --- /dev/null +++ b/atom/browser/api/atom_api_web_view_manager.cc @@ -0,0 +1,70 @@ +// Copyright (c) 2015 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/api/atom_api_web_contents.h" +#include "atom/browser/atom_browser_context.h" +#include "atom/browser/web_view_manager.h" +#include "atom/common/native_mate_converters/gurl_converter.h" +#include "native_mate/dictionary.h" +#include "net/base/filename_util.h" + +#include "atom/common/node_includes.h" + +namespace mate { + +template<> +struct Converter { + static bool FromV8(v8::Isolate* isolate, v8::Handle val, + content::WebContents** out) { + atom::api::WebContents* contents; + if (!Converter::FromV8(isolate, val, &contents)) + return false; + *out = contents->web_contents(); + return true; + } +}; + +template<> +struct Converter { + static bool FromV8(v8::Isolate* isolate, v8::Handle val, + atom::WebViewManager::WebViewInfo* out) { + Dictionary options; + if (!ConvertFromV8(isolate, val, &options)) + return false; + + GURL preload_url; + if (!options.Get("preloadUrl", &preload_url)) + return false; + + if (!preload_url.is_empty() && + !net::FileURLToFilePath(preload_url, &(out->preload_script))) + return false; + + return options.Get("nodeIntegration", &(out->node_integration)) && + options.Get("plugins", &(out->plugins)) && + options.Get("disableWebSecurity", &(out->disable_web_security)); + } +}; + +} // namespace mate + +namespace { + +void Initialize(v8::Handle exports, v8::Handle unused, + v8::Handle context, void* priv) { + using atom::WebViewManager; + auto manager = static_cast( + atom::AtomBrowserContext::Get()->GetGuestManager()); + mate::Dictionary dict(context->GetIsolate(), exports); + dict.SetMethod("addGuest", + base::Bind(&WebViewManager::AddGuest, + base::Unretained(manager))); + dict.SetMethod("removeGuest", + base::Bind(&WebViewManager::RemoveGuest, + base::Unretained(manager))); +} + +} // namespace + +NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_web_view_manager, Initialize) diff --git a/atom/browser/web_view_manager.cc b/atom/browser/web_view_manager.cc index 90d51e93e4..78395da6ae 100644 --- a/atom/browser/web_view_manager.cc +++ b/atom/browser/web_view_manager.cc @@ -4,52 +4,9 @@ #include "atom/browser/web_view_manager.h" -#include "atom/browser/api/atom_api_web_contents.h" #include "atom/browser/atom_browser_context.h" -#include "atom/common/native_mate_converters/gurl_converter.h" #include "content/public/browser/render_process_host.h" -#include "native_mate/dictionary.h" -#include "net/base/filename_util.h" - -#include "atom/common/node_includes.h" - -namespace mate { - -template<> -struct Converter { - static bool FromV8(v8::Isolate* isolate, v8::Handle val, - content::WebContents** out) { - atom::api::WebContents* contents; - if (!Converter::FromV8(isolate, val, &contents)) - return false; - *out = contents->web_contents(); - return true; - } -}; - -template<> -struct Converter { - static bool FromV8(v8::Isolate* isolate, v8::Handle val, - atom::WebViewManager::WebViewInfo* out) { - Dictionary options; - if (!ConvertFromV8(isolate, val, &options)) - return false; - - GURL preload_url; - if (!options.Get("preloadUrl", &preload_url)) - return false; - - if (!preload_url.is_empty() && - !net::FileURLToFilePath(preload_url, &(out->preload_script))) - return false; - - return options.Get("nodeIntegration", &(out->node_integration)) && - options.Get("plugins", &(out->plugins)) && - options.Get("disableWebSecurity", &(out->disable_web_security)); - } -}; - -} // namespace mate +#include "content/public/browser/web_contents.h" namespace atom { @@ -144,23 +101,3 @@ bool WebViewManager::ForEachGuest(content::WebContents* embedder_web_contents, } } // namespace atom - -namespace { - -void Initialize(v8::Handle exports, v8::Handle unused, - v8::Handle context, void* priv) { - using atom::WebViewManager; - auto manager = static_cast( - atom::AtomBrowserContext::Get()->GetGuestManager()); - mate::Dictionary dict(context->GetIsolate(), exports); - dict.SetMethod("addGuest", - base::Bind(&WebViewManager::AddGuest, - base::Unretained(manager))); - dict.SetMethod("removeGuest", - base::Bind(&WebViewManager::RemoveGuest, - base::Unretained(manager))); -} - -} // namespace - -NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_web_view_manager, Initialize) diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 51133d41f8..20ac2b3d43 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -66,6 +66,7 @@ REFERENCE_MODULE(atom_browser_protocol); REFERENCE_MODULE(atom_browser_global_shortcut); REFERENCE_MODULE(atom_browser_tray); REFERENCE_MODULE(atom_browser_web_contents); +REFERENCE_MODULE(atom_browser_web_view_manager); REFERENCE_MODULE(atom_browser_window); REFERENCE_MODULE(atom_common_asar); REFERENCE_MODULE(atom_common_clipboard);