// Copyright 2015 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.

#ifndef SKY_ENGINE_CORE_SCRIPT_DART_CONTROLLER_H_
#define SKY_ENGINE_CORE_SCRIPT_DART_CONTROLLER_H_

#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "dart/runtime/include/dart_api.h"
#include "mojo/public/cpp/system/data_pipe.h"
#include "sky/engine/wtf/OwnPtr.h"
#include "sky/engine/wtf/text/AtomicString.h"
#include "sky/engine/wtf/text/TextPosition.h"

namespace blink {
class AbstractModule;
class BuiltinSky;
class DOMDartState;
class DartLibraryProvider;
class DartSnapshotLoader;
class DartValue;
class KURL;
class View;

class DartController {
 public:
  DartController();
  ~DartController();

  static void InitVM();

  void RunFromLibrary(const String& name,
                      DartLibraryProvider* library_provider);
  void RunFromSnapshot(mojo::ScopedDataPipeConsumerHandle snapshot);

  void CreateIsolateFor(PassOwnPtr<DOMDartState> dom_dart_state);
  void Shutdown();
  void InstallView(View* view);

  DOMDartState* dart_state() const { return dom_dart_state_.get(); }

  void StartTracing();
  void StopTracing(mojo::ScopedDataPipeProducerHandle producer);

 private:
  void DidLoadMainLibrary(String url);
  void DidLoadSnapshot();

  OwnPtr<DOMDartState> dom_dart_state_;
  OwnPtr<BuiltinSky> builtin_sky_;
  OwnPtr<DartSnapshotLoader> snapshot_loader_;

  base::WeakPtrFactory<DartController> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(DartController);
};

}

#endif // SKY_ENGINE_CORE_SCRIPT_DART_CONTROLLER_H_
