Make sure javascript environment is initialized after ProxyResolverV8.
This commit is contained in:
parent
7a89a08534
commit
a6ede12cd7
5 changed files with 65 additions and 25 deletions
2
atom.gyp
2
atom.gyp
|
@ -93,6 +93,8 @@
|
||||||
'atom/browser/browser_mac.mm',
|
'atom/browser/browser_mac.mm',
|
||||||
'atom/browser/browser_win.cc',
|
'atom/browser/browser_win.cc',
|
||||||
'atom/browser/browser_observer.h',
|
'atom/browser/browser_observer.h',
|
||||||
|
'atom/browser/javascript_environment.cc',
|
||||||
|
'atom/browser/javascript_environment.h',
|
||||||
'atom/browser/mac/atom_application.h',
|
'atom/browser/mac/atom_application.h',
|
||||||
'atom/browser/mac/atom_application.mm',
|
'atom/browser/mac/atom_application.mm',
|
||||||
'atom/browser/mac/atom_application_delegate.h',
|
'atom/browser/mac/atom_application_delegate.h',
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
#include "atom/browser/atom_browser_client.h"
|
#include "atom/browser/atom_browser_client.h"
|
||||||
#include "atom/browser/atom_browser_context.h"
|
#include "atom/browser/atom_browser_context.h"
|
||||||
#include "atom/browser/browser.h"
|
#include "atom/browser/browser.h"
|
||||||
|
#include "atom/browser/javascript_environment.h"
|
||||||
#include "atom/common/api/atom_bindings.h"
|
#include "atom/common/api/atom_bindings.h"
|
||||||
#include "atom/common/node_bindings.h"
|
#include "atom/common/node_bindings.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "net/proxy/proxy_resolver_v8.h"
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include "ui/gfx/win/dpi.h"
|
#include "ui/gfx/win/dpi.h"
|
||||||
|
@ -28,14 +28,9 @@ namespace atom {
|
||||||
AtomBrowserMainParts* AtomBrowserMainParts::self_ = NULL;
|
AtomBrowserMainParts* AtomBrowserMainParts::self_ = NULL;
|
||||||
|
|
||||||
AtomBrowserMainParts::AtomBrowserMainParts()
|
AtomBrowserMainParts::AtomBrowserMainParts()
|
||||||
: atom_bindings_(new AtomBindings),
|
: browser_(new Browser),
|
||||||
browser_(new Browser),
|
|
||||||
node_bindings_(NodeBindings::Create(true)),
|
node_bindings_(NodeBindings::Create(true)),
|
||||||
isolate_(v8::Isolate::GetCurrent()),
|
atom_bindings_(new AtomBindings) {
|
||||||
locker_(isolate_),
|
|
||||||
handle_scope_(isolate_),
|
|
||||||
context_(isolate_, v8::Context::New(isolate_)),
|
|
||||||
context_scope_(v8::Local<v8::Context>::New(isolate_, context_)) {
|
|
||||||
DCHECK(!self_) << "Cannot have two AtomBrowserMainParts";
|
DCHECK(!self_) << "Cannot have two AtomBrowserMainParts";
|
||||||
self_ = this;
|
self_ = this;
|
||||||
}
|
}
|
||||||
|
@ -53,21 +48,20 @@ brightray::BrowserContext* AtomBrowserMainParts::CreateBrowserContext() {
|
||||||
return new AtomBrowserContext();
|
return new AtomBrowserContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomBrowserMainParts::InitProxyResolverV8() {
|
|
||||||
brightray::BrowserMainParts::InitProxyResolverV8();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AtomBrowserMainParts::PostEarlyInitialization() {
|
void AtomBrowserMainParts::PostEarlyInitialization() {
|
||||||
brightray::BrowserMainParts::PostEarlyInitialization();
|
brightray::BrowserMainParts::PostEarlyInitialization();
|
||||||
|
|
||||||
|
// The ProxyResolverV8 has setup a complete V8 environment, in order to avoid
|
||||||
|
// conflicts we only initialize our V8 environment after that.
|
||||||
|
js_env_.reset(new JavascriptEnvironment);
|
||||||
|
|
||||||
node_bindings_->Initialize();
|
node_bindings_->Initialize();
|
||||||
|
|
||||||
// Create the global environment.
|
// Create the global environment.
|
||||||
global_env = node_bindings_->CreateEnvironment(
|
global_env = node_bindings_->CreateEnvironment(js_env_->context());
|
||||||
v8::Local<v8::Context>::New(isolate_, context_));
|
|
||||||
|
|
||||||
// Add atom-shell extended APIs.
|
// Add atom-shell extended APIs.
|
||||||
atom_bindings_->BindTo(isolate_, global_env->process_object());
|
atom_bindings_->BindTo(js_env_->isolate(), global_env->process_object());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomBrowserMainParts::PreMainMessageLoopRun() {
|
void AtomBrowserMainParts::PreMainMessageLoopRun() {
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
#define ATOM_BROWSER_ATOM_BROWSER_MAIN_PARTS_H_
|
#define ATOM_BROWSER_ATOM_BROWSER_MAIN_PARTS_H_
|
||||||
|
|
||||||
#include "brightray/browser/browser_main_parts.h"
|
#include "brightray/browser/browser_main_parts.h"
|
||||||
#include "v8/include/v8.h"
|
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
class AtomBindings;
|
class AtomBindings;
|
||||||
class Browser;
|
class Browser;
|
||||||
|
class JavascriptEnvironment;
|
||||||
class NodeBindings;
|
class NodeBindings;
|
||||||
|
|
||||||
class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
|
@ -26,7 +26,6 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
protected:
|
protected:
|
||||||
// Implementations of brightray::BrowserMainParts.
|
// Implementations of brightray::BrowserMainParts.
|
||||||
virtual brightray::BrowserContext* CreateBrowserContext() OVERRIDE;
|
virtual brightray::BrowserContext* CreateBrowserContext() OVERRIDE;
|
||||||
virtual void InitProxyResolverV8() OVERRIDE;
|
|
||||||
|
|
||||||
// Implementations of content::BrowserMainParts.
|
// Implementations of content::BrowserMainParts.
|
||||||
virtual void PostEarlyInitialization() OVERRIDE;
|
virtual void PostEarlyInitialization() OVERRIDE;
|
||||||
|
@ -37,16 +36,10 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
scoped_ptr<AtomBindings> atom_bindings_;
|
|
||||||
scoped_ptr<Browser> browser_;
|
scoped_ptr<Browser> browser_;
|
||||||
|
scoped_ptr<JavascriptEnvironment> js_env_;
|
||||||
scoped_ptr<NodeBindings> node_bindings_;
|
scoped_ptr<NodeBindings> node_bindings_;
|
||||||
|
scoped_ptr<AtomBindings> atom_bindings_;
|
||||||
// The V8 environment of browser process.
|
|
||||||
v8::Isolate* isolate_;
|
|
||||||
v8::Locker locker_;
|
|
||||||
v8::HandleScope handle_scope_;
|
|
||||||
v8::UniquePersistent<v8::Context> context_;
|
|
||||||
v8::Context::Scope context_scope_;
|
|
||||||
|
|
||||||
static AtomBrowserMainParts* self_;
|
static AtomBrowserMainParts* self_;
|
||||||
|
|
||||||
|
|
17
atom/browser/javascript_environment.cc
Normal file
17
atom/browser/javascript_environment.cc
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||||
|
// Use of this source code is governed by the MIT license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "atom/browser/javascript_environment.h"
|
||||||
|
|
||||||
|
namespace atom {
|
||||||
|
|
||||||
|
JavascriptEnvironment::JavascriptEnvironment()
|
||||||
|
: isolate_(v8::Isolate::GetCurrent()),
|
||||||
|
locker_(isolate_),
|
||||||
|
handle_scope_(isolate_),
|
||||||
|
context_(isolate_, v8::Context::New(isolate_)),
|
||||||
|
context_scope_(v8::Local<v8::Context>::New(isolate_, context_)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace atom
|
34
atom/browser/javascript_environment.h
Normal file
34
atom/browser/javascript_environment.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
|
||||||
|
// Use of this source code is governed by the MIT license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
|
||||||
|
#define ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
|
||||||
|
|
||||||
|
#include "base/basictypes.h"
|
||||||
|
#include "v8/include/v8.h"
|
||||||
|
|
||||||
|
namespace atom {
|
||||||
|
|
||||||
|
class JavascriptEnvironment {
|
||||||
|
public:
|
||||||
|
JavascriptEnvironment();
|
||||||
|
|
||||||
|
v8::Isolate* isolate() const { return isolate_; }
|
||||||
|
v8::Local<v8::Context> context() const {
|
||||||
|
return v8::Local<v8::Context>::New(isolate_, context_);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
v8::Isolate* isolate_;
|
||||||
|
v8::Locker locker_;
|
||||||
|
v8::HandleScope handle_scope_;
|
||||||
|
v8::UniquePersistent<v8::Context> context_;
|
||||||
|
v8::Context::Scope context_scope_;
|
||||||
|
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(JavascriptEnvironment);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace atom
|
||||||
|
|
||||||
|
#endif // ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
|
Loading…
Add table
Add a link
Reference in a new issue