Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: gin/wrappable.cc

Issue 116163008: Move the plugin placeholder from CppBoundClass to gin::Wrappable (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: counter-proposal Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gin/wrappable.h" 5 #include "gin/wrappable.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "gin/object_template_builder.h" 8 #include "gin/object_template_builder.h"
9 #include "gin/per_isolate_data.h" 9 #include "gin/per_isolate_data.h"
10 10
11 namespace gin { 11 namespace gin {
12 12
13 WrappableBase::WrappableBase() { 13 WrappableBase::WrappableBase() {
14 } 14 }
15 15
16 WrappableBase::~WrappableBase() { 16 WrappableBase::~WrappableBase() {
17 wrapper_.Reset(); 17 wrapper_.Reset();
18 } 18 }
19 19
20 v8::Handle<v8::Object> WrappableBase::GetWrapperImpl( 20 ObjectTemplateBuilder WrappableBase::GetObjectTemplateBuilder(
21 v8::Isolate* isolate,
22 WrapperInfo* wrapper_info,
23 GetObjectTemplateFunction template_getter) {
24 if (wrapper_.IsEmpty())
25 CreateWrapper(isolate, wrapper_info, template_getter);
26 return v8::Local<v8::Object>::New(isolate, wrapper_);
27 }
28
29 v8::Local<v8::ObjectTemplate> WrappableBase::GetObjectTemplate(
30 v8::Isolate* isolate) { 21 v8::Isolate* isolate) {
31 return ObjectTemplateBuilder(isolate).Build(); 22 return ObjectTemplateBuilder(isolate);
32 } 23 }
33 24
34 void WrappableBase::WeakCallback( 25 void WrappableBase::WeakCallback(
35 const v8::WeakCallbackData<v8::Object, WrappableBase>& data) { 26 const v8::WeakCallbackData<v8::Object, WrappableBase>& data) {
36 WrappableBase* wrappable = data.GetParameter(); 27 WrappableBase* wrappable = data.GetParameter();
37 wrappable->wrapper_.Reset(); 28 wrappable->wrapper_.Reset();
38 delete wrappable; 29 delete wrappable;
39 } 30 }
40 31
41 v8::Handle<v8::Object> WrappableBase::CreateWrapper( 32 v8::Handle<v8::Object> WrappableBase::GetWrapperImpl(v8::Isolate* isolate,
Aaron Boodman 2013/12/18 19:12:18 There was no caller for CreateWrapper other than G
42 v8::Isolate* isolate, 33 WrapperInfo* info) {
43 WrapperInfo* info, 34 if (!wrapper_.IsEmpty()) {
44 GetObjectTemplateFunction template_getter) { 35 return v8::Local<v8::Object>::New(isolate, wrapper_);
36 }
37
45 PerIsolateData* data = PerIsolateData::From(isolate); 38 PerIsolateData* data = PerIsolateData::From(isolate);
46 v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate(info); 39 v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate(info);
47 if (templ.IsEmpty()) { 40 if (templ.IsEmpty()) {
48 templ = template_getter(isolate); 41 templ = GetObjectTemplateBuilder(isolate).Build();
49 CHECK(!templ.IsEmpty()); 42 CHECK(!templ.IsEmpty());
50 data->SetObjectTemplate(info, templ); 43 data->SetObjectTemplate(info, templ);
51 } 44 }
52 CHECK_EQ(kNumberOfInternalFields, templ->InternalFieldCount()); 45 CHECK_EQ(kNumberOfInternalFields, templ->InternalFieldCount());
53 v8::Handle<v8::Object> wrapper = templ->NewInstance(); 46 v8::Handle<v8::Object> wrapper = templ->NewInstance();
54 wrapper->SetAlignedPointerInInternalField(kWrapperInfoIndex, info); 47 wrapper->SetAlignedPointerInInternalField(kWrapperInfoIndex, info);
55 wrapper->SetAlignedPointerInInternalField(kEncodedValueIndex, this); 48 wrapper->SetAlignedPointerInInternalField(kEncodedValueIndex, this);
56 wrapper_.Reset(isolate, wrapper); 49 wrapper_.Reset(isolate, wrapper);
57 wrapper_.SetWeak(this, WeakCallback); 50 wrapper_.SetWeak(this, WeakCallback);
58 return wrapper; 51 return wrapper;
(...skipping 18 matching lines...) Expand all
77 // instance of the C++ class associated with wrapper_info. 70 // instance of the C++ class associated with wrapper_info.
78 if (info != wrapper_info) 71 if (info != wrapper_info)
79 return NULL; 72 return NULL;
80 73
81 return obj->GetAlignedPointerFromInternalField(kEncodedValueIndex); 74 return obj->GetAlignedPointerFromInternalField(kEncodedValueIndex);
82 } 75 }
83 76
84 } // namespace internal 77 } // namespace internal
85 78
86 } // namespace gin 79 } // namespace gin
OLDNEW
« gin/wrappable.h ('K') | « gin/wrappable.h ('k') | gin/wrappable_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698