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

Side by Side Diff: sky/engine/tonic/dart_wrappable.cc

Issue 936193005: Make it possible to inherit from any constructable host object (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Remove extra comment Created 5 years, 10 months 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
« no previous file with comments | « sky/engine/tonic/dart_wrappable.h ('k') | sky/tests/dom/inherit-from-text.sky » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "sky/engine/config.h" 5 #include "sky/engine/config.h"
6 #include "sky/engine/tonic/dart_wrappable.h" 6 #include "sky/engine/tonic/dart_wrappable.h"
7 7
8 #include "sky/engine/tonic/dart_class_library.h" 8 #include "sky/engine/tonic/dart_class_library.h"
9 #include "sky/engine/tonic/dart_error.h" 9 #include "sky/engine/tonic/dart_error.h"
10 #include "sky/engine/tonic/dart_exception_factory.h" 10 #include "sky/engine/tonic/dart_exception_factory.h"
(...skipping 23 matching lines...) Expand all
34 Dart_AllocateWithNativeFields(type, kNumberOfNativeFields, native_fields); 34 Dart_AllocateWithNativeFields(type, kNumberOfNativeFields, native_fields);
35 DCHECK(!LogIfError(wrapper)); 35 DCHECK(!LogIfError(wrapper));
36 36
37 info.ref_object(this); // Balanced in FinalizeDartWrapper. 37 info.ref_object(this); // Balanced in FinalizeDartWrapper.
38 dart_wrapper_ = Dart_NewPrologueWeakPersistentHandle( 38 dart_wrapper_ = Dart_NewPrologueWeakPersistentHandle(
39 wrapper, this, info.size_in_bytes, &FinalizeDartWrapper); 39 wrapper, this, info.size_in_bytes, &FinalizeDartWrapper);
40 40
41 return wrapper; 41 return wrapper;
42 } 42 }
43 43
44 void DartWrappable::AssociateWithDartWrapper(Dart_NativeArguments args) {
45 DCHECK(!dart_wrapper_);
46
47 Dart_Handle wrapper = Dart_GetNativeArgument(args, 0);
48 CHECK(!LogIfError(wrapper));
49
50 intptr_t native_fields[kNumberOfNativeFields];
51 CHECK(!LogIfError(Dart_GetNativeFieldsOfArgument(
52 args, 0, kNumberOfNativeFields, native_fields)));
esprehn 2015/02/20 06:56:10 So all things have the same number of native field
abarth-chromium 2015/02/20 07:00:34 Yes. Always two there are.
53 CHECK(!native_fields[kPeerIndex]);
54 CHECK(!native_fields[kWrapperInfoIndex]);
55
56 const DartWrapperInfo& info = GetDartWrapperInfo();
57 CHECK(!LogIfError(Dart_SetNativeInstanceField(
58 wrapper, kPeerIndex, reinterpret_cast<intptr_t>(this))));
59 CHECK(!LogIfError(Dart_SetNativeInstanceField(
60 wrapper, kWrapperInfoIndex, reinterpret_cast<intptr_t>(&info))));
61
62 info.ref_object(this); // Balanced in FinalizeDartWrapper.
63 dart_wrapper_ = Dart_NewPrologueWeakPersistentHandle(
64 wrapper, this, info.size_in_bytes, &FinalizeDartWrapper);
65 }
66
44 void DartWrappable::FinalizeDartWrapper(void* isolate_callback_data, 67 void DartWrappable::FinalizeDartWrapper(void* isolate_callback_data,
45 Dart_WeakPersistentHandle wrapper, 68 Dart_WeakPersistentHandle wrapper,
46 void* peer) { 69 void* peer) {
47 DartWrappable* wrappable = reinterpret_cast<DartWrappable*>(peer); 70 DartWrappable* wrappable = reinterpret_cast<DartWrappable*>(peer);
48 wrappable->dart_wrapper_ = nullptr; 71 wrappable->dart_wrapper_ = nullptr;
49 const DartWrapperInfo& info = wrappable->GetDartWrapperInfo(); 72 const DartWrapperInfo& info = wrappable->GetDartWrapperInfo();
50 info.deref_object(wrappable); // Balanced in CreateDartWrapper. 73 info.deref_object(wrappable); // Balanced in CreateDartWrapper.
51 } 74 }
52 75
53 DartWrappable* DartConverterWrappable::FromDart(Dart_Handle handle) { 76 DartWrappable* DartConverterWrappable::FromDart(Dart_Handle handle) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 args, index, DartWrappable::kNumberOfNativeFields, native_fields); 109 args, index, DartWrappable::kNumberOfNativeFields, native_fields);
87 if (Dart_IsError(result)) { 110 if (Dart_IsError(result)) {
88 exception = Dart_NewStringFromCString(DartError::kInvalidArgument); 111 exception = Dart_NewStringFromCString(DartError::kInvalidArgument);
89 return nullptr; 112 return nullptr;
90 } 113 }
91 return reinterpret_cast<DartWrappable*>( 114 return reinterpret_cast<DartWrappable*>(
92 native_fields[DartWrappable::kPeerIndex]); 115 native_fields[DartWrappable::kPeerIndex]);
93 } 116 }
94 117
95 } // namespace blink 118 } // namespace blink
OLDNEW
« no previous file with comments | « sky/engine/tonic/dart_wrappable.h ('k') | sky/tests/dom/inherit-from-text.sky » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698