• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "gin/per_context_data.h"
6 
7 #include "base/logging.h"
8 #include "gin/public/context_holder.h"
9 #include "gin/public/wrapper_info.h"
10 
11 namespace gin {
12 
ContextSupplement()13 ContextSupplement::ContextSupplement() {
14 }
15 
~ContextSupplement()16 ContextSupplement::~ContextSupplement() {
17 }
18 
PerContextData(v8::Handle<v8::Context> context)19 PerContextData::PerContextData(v8::Handle<v8::Context> context)
20     : runner_(NULL) {
21   context->SetAlignedPointerInEmbedderData(
22       kPerContextDataStartIndex + kEmbedderNativeGin, this);
23 }
24 
~PerContextData()25 PerContextData::~PerContextData() {
26   DCHECK(supplements_.empty());
27 }
28 
Detach(v8::Handle<v8::Context> context)29 void PerContextData::Detach(v8::Handle<v8::Context> context) {
30   DCHECK(From(context) == this);
31   context->SetAlignedPointerInEmbedderData(
32       kPerContextDataStartIndex + kEmbedderNativeGin, NULL);
33 
34   SuplementVector supplements;
35   supplements.swap(supplements_);
36 
37   for (SuplementVector::iterator it = supplements.begin();
38        it != supplements.end(); ++it) {
39     (*it)->Detach(context);
40   }
41 }
42 
From(v8::Handle<v8::Context> context)43 PerContextData* PerContextData::From(v8::Handle<v8::Context> context) {
44   return static_cast<PerContextData*>(
45       context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex));
46 }
47 
AddSupplement(scoped_ptr<ContextSupplement> supplement)48 void PerContextData::AddSupplement(scoped_ptr<ContextSupplement> supplement) {
49   supplements_.push_back(supplement.release());
50 }
51 
52 }  // namespace gin
53