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