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 13 ContextSupplement::ContextSupplement() { 14 } 15 16 ContextSupplement::~ContextSupplement() { 17 } 18 19 PerContextData::PerContextData(v8::Handle<v8::Context> context) 20 : runner_(NULL) { 21 context->SetAlignedPointerInEmbedderData( 22 kPerContextDataStartIndex + kEmbedderNativeGin, this); 23 } 24 25 PerContextData::~PerContextData() { 26 DCHECK(supplements_.empty()); 27 } 28 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 43 PerContextData* PerContextData::From(v8::Handle<v8::Context> context) { 44 return static_cast<PerContextData*>( 45 context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex)); 46 } 47 48 void PerContextData::AddSupplement(scoped_ptr<ContextSupplement> supplement) { 49 supplements_.push_back(supplement.release()); 50 } 51 52 } // namespace gin 53