Home | History | Annotate | Download | only in gin
      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