From faaaaec8462aef6b2e44a1e76435018c32bd5e77 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Wed, 23 Jan 2013 12:14:38 -0700 Subject: [PATCH] Convert `atom` global to a window binding --- native/atom_cef_render_process_handler.mm | 2 +- native/v8_extensions/atom.h | 9 +++++++-- native/v8_extensions/atom.js | 9 --------- native/v8_extensions/atom.mm | 17 ++++++++++++++--- 4 files changed, 22 insertions(+), 15 deletions(-) delete mode 100644 native/v8_extensions/atom.js diff --git a/native/atom_cef_render_process_handler.mm b/native/atom_cef_render_process_handler.mm index 1db151518..2d5a82cf6 100644 --- a/native/atom_cef_render_process_handler.mm +++ b/native/atom_cef_render_process_handler.mm @@ -10,7 +10,6 @@ #include void AtomCefRenderProcessHandler::OnWebKitInitialized() { - new v8_extensions::Atom(); new v8_extensions::OnigRegExp(); new v8_extensions::OnigScanner(); new v8_extensions::Git(); @@ -20,6 +19,7 @@ void AtomCefRenderProcessHandler::OnWebKitInitialized() { void AtomCefRenderProcessHandler::OnContextCreated(CefRefPtr browser, CefRefPtr frame, CefRefPtr context) { + v8_extensions::Atom::CreateContextBinding(context); v8_extensions::Native::CreateContextBinding(context); } diff --git a/native/v8_extensions/atom.h b/native/v8_extensions/atom.h index 9aae075c0..0eb65ccbf 100644 --- a/native/v8_extensions/atom.h +++ b/native/v8_extensions/atom.h @@ -4,8 +4,7 @@ namespace v8_extensions { class Atom : public CefV8Handler { public: - Atom(); - + static void CreateContextBinding(CefRefPtr context); virtual bool Execute(const CefString& name, CefRefPtr object, const CefV8ValueList& arguments, @@ -14,5 +13,11 @@ namespace v8_extensions { // Provide the reference counting implementation for this class. IMPLEMENT_REFCOUNTING(Atom); + + private: + static CefRefPtr GetInstance(); + Atom(); + Atom(Atom const&); + void operator=(Atom const&); }; } diff --git a/native/v8_extensions/atom.js b/native/v8_extensions/atom.js deleted file mode 100644 index 5ec3a5922..000000000 --- a/native/v8_extensions/atom.js +++ /dev/null @@ -1,9 +0,0 @@ -(function () { - -native function sendMessageToBrowserProcess(name, array); - -this.atom = { - sendMessageToBrowserProcess: sendMessageToBrowserProcess -}; - -})(); diff --git a/native/v8_extensions/atom.mm b/native/v8_extensions/atom.mm index de6c7abe1..642fbbe6b 100644 --- a/native/v8_extensions/atom.mm +++ b/native/v8_extensions/atom.mm @@ -7,9 +7,20 @@ namespace v8_extensions { Atom::Atom() : CefV8Handler() { - NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"v8_extensions/atom.js"]; - NSString *extensionCode = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; - CefRegisterExtension("v8/atom", [extensionCode UTF8String], this); + } + + void Atom::CreateContextBinding(CefRefPtr context) { + CefRefPtr function = CefV8Value::CreateFunction("sendMessageToBrowserProcess", GetInstance()); + CefRefPtr atomObject = CefV8Value::CreateObject(NULL); + atomObject->SetValue("sendMessageToBrowserProcess", function, V8_PROPERTY_ATTRIBUTE_NONE); + CefRefPtr global = context->GetGlobal(); + global->SetValue("atom", atomObject, V8_PROPERTY_ATTRIBUTE_NONE); + } + + CefRefPtr Atom::GetInstance() { + static Atom instance; + static CefRefPtr instancePtr = CefRefPtr(&instance); + return instancePtr; } bool Atom::Execute(const CefString& name,