// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gin/per_context_data.h"

#include "base/logging.h"
#include "gin/public/wrapper_info.h"

namespace gin {

ContextSupplement::ContextSupplement() {
}

ContextSupplement::~ContextSupplement() {
}

PerContextData::PerContextData(v8::Handle<v8::Context> context)
    : runner_(NULL) {
  context->SetAlignedPointerInEmbedderData(kEncodedValueIndex, this);
}

PerContextData::~PerContextData() {
  DCHECK(supplements_.empty());
}

void PerContextData::Detach(v8::Handle<v8::Context> context) {
  DCHECK(From(context) == this);
  context->SetAlignedPointerInEmbedderData(kEncodedValueIndex, NULL);

  SuplementVector supplements;
  supplements.swap(supplements_);

  for (SuplementVector::iterator it = supplements.begin();
       it != supplements.end(); ++it) {
    (*it)->Detach(context);
  }
}

PerContextData* PerContextData::From(v8::Handle<v8::Context> context) {
  return static_cast<PerContextData*>(
      context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex));
}

void PerContextData::AddSupplement(scoped_ptr<ContextSupplement> supplement) {
  supplements_.push_back(supplement.release());
}

}  // namespace gin
