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
3 // found in the LICENSE file.
5 #include "gin/per_context_data.h"
7 #include "base/logging.h"
8 #include "gin/public/context_holder.h"
9 #include "gin/public/wrapper_info.h"
13 ContextSupplement::ContextSupplement() {
16 ContextSupplement::~ContextSupplement() {
19 PerContextData::PerContextData(v8::Handle
<v8::Context
> context
)
21 context
->SetAlignedPointerInEmbedderData(
22 kPerContextDataStartIndex
+ kEmbedderNativeGin
, this);
25 PerContextData::~PerContextData() {
26 DCHECK(supplements_
.empty());
29 void PerContextData::Detach(v8::Handle
<v8::Context
> context
) {
30 DCHECK(From(context
) == this);
31 context
->SetAlignedPointerInEmbedderData(
32 kPerContextDataStartIndex
+ kEmbedderNativeGin
, NULL
);
34 SuplementVector supplements
;
35 supplements
.swap(supplements_
);
37 for (SuplementVector::iterator it
= supplements
.begin();
38 it
!= supplements
.end(); ++it
) {
39 (*it
)->Detach(context
);
43 PerContextData
* PerContextData::From(v8::Handle
<v8::Context
> context
) {
44 return static_cast<PerContextData
*>(
45 context
->GetAlignedPointerFromEmbedderData(kEncodedValueIndex
));
48 void PerContextData::AddSupplement(scoped_ptr
<ContextSupplement
> supplement
) {
49 supplements_
.push_back(supplement
.release());