Make sure each C++ WebContents has only one JS WebContents
This commit is contained in:
		
					parent
					
						
							
								552a12d2ee
							
						
					
				
			
			
				commit
				
					
						1023b67d59
					
				
			
		
					 4 changed files with 21 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -784,6 +784,11 @@ bool WebContents::IsGuest() const {
 | 
			
		|||
  return is_guest();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WebContents::AfterInit(v8::Isolate* isolate) {
 | 
			
		||||
  mate::TrackableObject::AfterInit(isolate);
 | 
			
		||||
  AttachAsUserData(web_contents());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
 | 
			
		||||
    v8::Isolate* isolate) {
 | 
			
		||||
  if (template_.IsEmpty())
 | 
			
		||||
| 
						 | 
				
			
			@ -873,6 +878,13 @@ gfx::Size WebContents::GetDefaultSize() const {
 | 
			
		|||
// static
 | 
			
		||||
mate::Handle<WebContents> WebContents::CreateFrom(
 | 
			
		||||
    v8::Isolate* isolate, brightray::InspectableWebContents* web_contents) {
 | 
			
		||||
  // We have an existing WebContents object in JS.
 | 
			
		||||
  auto existing = TrackableObject::FromWrappedClass(
 | 
			
		||||
      isolate, web_contents->GetWebContents());
 | 
			
		||||
  if (existing)
 | 
			
		||||
    return mate::CreateHandle(isolate, static_cast<WebContents*>(existing));
 | 
			
		||||
 | 
			
		||||
  // Otherwise create a new WebContents wrapper object.
 | 
			
		||||
  auto handle = mate::CreateHandle(isolate, new WebContents(web_contents));
 | 
			
		||||
  g_wrap_web_contents.Run(handle.ToV8());
 | 
			
		||||
  return handle;
 | 
			
		||||
| 
						 | 
				
			
			@ -881,6 +893,12 @@ mate::Handle<WebContents> WebContents::CreateFrom(
 | 
			
		|||
// static
 | 
			
		||||
mate::Handle<WebContents> WebContents::CreateFrom(
 | 
			
		||||
    v8::Isolate* isolate, content::WebContents* web_contents) {
 | 
			
		||||
  // We have an existing WebContents object in JS.
 | 
			
		||||
  auto existing = TrackableObject::FromWrappedClass(isolate, web_contents);
 | 
			
		||||
  if (existing)
 | 
			
		||||
    return mate::CreateHandle(isolate, static_cast<WebContents*>(existing));
 | 
			
		||||
 | 
			
		||||
  // Otherwise create a new WebContents wrapper object.
 | 
			
		||||
  auto handle = mate::CreateHandle(isolate, new WebContents(web_contents));
 | 
			
		||||
  g_wrap_web_contents.Run(handle.ToV8());
 | 
			
		||||
  return handle;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -142,6 +142,7 @@ class WebContents : public mate::TrackableObject,
 | 
			
		|||
  ~WebContents();
 | 
			
		||||
 | 
			
		||||
  // mate::Wrappable:
 | 
			
		||||
  void AfterInit(v8::Isolate* isolate);
 | 
			
		||||
  mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
 | 
			
		||||
      v8::Isolate* isolate) override;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ void TrackableObject::AfterInit(v8::Isolate* isolate) {
 | 
			
		|||
  weak_map_id_ = weak_map_.Add(isolate, GetWrapper(isolate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TrackableObject::Attach(base::SupportsUserData* wrapped) {
 | 
			
		||||
void TrackableObject::AttachAsUserData(base::SupportsUserData* wrapped) {
 | 
			
		||||
  wrapped->SetUserData(kTrackedObjectKey, new IDUserData(weak_map_id_));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ class TrackableObject : public mate::EventEmitter {
 | 
			
		|||
  ~TrackableObject() override;
 | 
			
		||||
 | 
			
		||||
  // Wrap TrackableObject into a class that SupportsUserData.
 | 
			
		||||
  void Attach(base::SupportsUserData* wrapped);
 | 
			
		||||
  void AttachAsUserData(base::SupportsUserData* wrapped);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  static atom::IDWeakMap weak_map_;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue