Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Unified Diff: Source/WebCore/bindings/dart/DartApplicationLoader.cpp

Issue 9188009: Things to unfork. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/bindings/dart/DartApplicationLoader.cpp
diff --git a/Source/WebCore/bindings/dart/DartApplicationLoader.cpp b/Source/WebCore/bindings/dart/DartApplicationLoader.cpp
deleted file mode 100644
index 41310c3594d30797663f85cd46f1f679538a8f4e..0000000000000000000000000000000000000000
--- a/Source/WebCore/bindings/dart/DartApplicationLoader.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright (c) 2009, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "config.h"
-#include "DartApplicationLoader.h"
-
-#include "CachedResourceClient.h"
-#include "CachedResourceLoader.h"
-#include "DOMWindow.h"
-#include "DartDOMWrapper.h"
-#include "DartIsolateState.h"
-#include "DartUtilities.h"
-#include "Document.h"
-#include "Frame.h"
-#include "ScriptCallStack.h"
-#include "ScriptSourceCode.h"
-
-#include <dart_api.h>
-
-namespace WebCore {
-
-DartApplicationLoader::DartApplicationLoader(Document* document)
- : m_document(document)
- , m_libraryUrl()
- , m_importedLibraries()
- , m_importersForSource()
- , m_sources()
- , m_mainScriptHasBeenLoaded(false)
-{
-}
-
-void DartApplicationLoader::load(const String& url, const String& source)
-{
- DartApiScope dartApiScope;
-
- if (m_importedLibraries.isEmpty() && m_importersForSource.isEmpty())
- loadScript(url, source);
- else {
- if (m_importedLibraries.contains(url)) {
- loadLibrary(url, source);
- m_importedLibraries.remove(url);
- }
-
- if (m_importersForSource.contains(url)) {
- loadSource(url, source);
- m_importersForSource.remove(url);
- }
- }
-
- m_sources.add(url, source);
-
- if (m_importedLibraries.isEmpty() && m_importersForSource.isEmpty() && m_mainScriptHasBeenLoaded)
- callEntryPoint();
-}
-
-void DartApplicationLoader::importBuiltinLibrary(const String& url, const String& source)
-{
- Dart_Handle result = Dart_LoadLibrary(DartUtilities::stringToDartString(url), DartUtilities::stringToDartString(source));
- if (Dart_IsError(result)) {
- DartUtilities::reportProblem(m_document, result);
- return;
- }
- m_sources.add(url, source);
-}
-
-IsolateToDartApplicationLoaderMap& isolateToDartApplicationLoaderMap()
-{
- DEFINE_STATIC_LOCAL(IsolateToDartApplicationLoaderMap, map, ());
- return map;
-}
-
-static DartApplicationLoader* currentAppLoader()
-{
- IsolateToDartApplicationLoaderMap::iterator it = isolateToDartApplicationLoaderMap().find(Dart_CurrentIsolate());
- ASSERT(it != isolateToDartApplicationLoaderMap().end());
- return it->second;
-}
-
-template <class Loader>
-class ScriptLoader {
-public:
- static void loadScript(const String& url, const String& source, ScriptExecutionContext* context)
- {
- Dart_Handle result = Dart_LoadScript(
- DartUtilities::stringToDartString(url),
- DartUtilities::stringToDartString(source),
- &handler);
- if (Dart_IsError(result))
- DartUtilities::reportProblem(context, result);
- }
-
-private:
- static Dart_Handle handler(Dart_LibraryTag tag, Dart_Handle library, Dart_Handle urlHandle)
- {
- ASSERT(Dart_IsLibrary(library));
-
- String url = DartUtilities::dartStringToString(urlHandle);
-
- Dart_Handle libraryURLHandle = Dart_LibraryUrl(library);
- ASSERT(!Dart_IsError(libraryURLHandle));
- const String libraryURL = DartUtilities::dartStringToString(libraryURLHandle);
-
- if (tag == kCanonicalizeUrl) {
- const KURL canonical = KURL(KURL(KURL(), libraryURL), url);
- return DartUtilities::stringToDartString(canonical.string());
- }
-
- return Loader::load(tag, library, libraryURL, url);
- }
-};
-
-struct InitialLoader {
- static Dart_Handle load(Dart_LibraryTag tag, Dart_Handle library, const String& libraryUrl, const String& importedUrl)
- {
- currentAppLoader()->triggerImport(libraryUrl, importedUrl, tag);
- return Dart_NewBoolean(true);
- }
-};
-
-void DartApplicationLoader::loadScript(const String& url, const String& source)
-{
- ASSERT(m_importedLibraries.isEmpty());
- ASSERT(m_importersForSource.isEmpty());
- m_libraryUrl = url;
- ScriptLoader<InitialLoader>::loadScript(url, source, m_document);
- m_mainScriptHasBeenLoaded = true;
-}
-
-void DartApplicationLoader::loadSource(const String& url, const String& source)
-{
- ASSERT(m_importersForSource.contains(url));
- const UrlSet* importers = m_importersForSource.find(url)->second;
- Dart_Handle dartUrl = DartUtilities::stringToDartString(url);
- Dart_Handle dartSource = DartUtilities::stringToDartString(source);
- for (UrlSet::iterator iter = importers->begin(); iter != importers->end(); ++iter) {
- Dart_Handle library = Dart_LookupLibrary(DartUtilities::stringToDartString(*iter));
- if (Dart_IsError(library)) {
- DartUtilities::reportProblem(m_document, library);
- return;
- }
- Dart_Handle result = Dart_LoadSource(library, dartUrl, dartSource);
- if (Dart_IsError(result)) {
- DartUtilities::reportProblem(m_document, result);
- return;
- }
- }
-}
-
-void DartApplicationLoader::loadLibrary(const String& url, const String& source)
-{
- ASSERT(m_importedLibraries.contains(url));
- Dart_Handle result = Dart_LoadLibrary(DartUtilities::stringToDartString(url), DartUtilities::stringToDartString(source));
- if (Dart_IsError(result))
- DartUtilities::reportProblem(m_document, result);
-}
-
-void DartApplicationLoader::callEntryPoint()
-{
- ASSERT(m_document->readyState() != "loading");
- Dart_Handle result = Dart_InvokeStatic(topLevelLibrary(), Dart_NewString(""), Dart_NewString("main"), 0, 0);
- if (Dart_IsError(result))
- DartUtilities::reportProblem(m_document, result);
-}
-
-Dart_Handle DartApplicationLoader::topLevelLibrary()
-{
- Dart_Handle library = Dart_LookupLibrary(DartUtilities::stringToDartString(m_libraryUrl));
- ASSERT(!Dart_IsError(library));
- return library;
-}
-
-Dart_Handle DartApplicationLoader::domLibrary()
-{
- Dart_Handle library = Dart_LookupLibrary(Dart_NewString(DartUtilities::domLibraryName));
- ASSERT(!Dart_IsError(library));
- return library;
-}
-
-class ScriptLoadCallback : public CachedResourceClient {
-public:
- ScriptLoadCallback(DartApplicationLoader* loader, CachedScript* cachedScript, Dart_Isolate isolate)
- : m_loader(loader)
- , m_cachedScript(cachedScript)
- , m_isolate(isolate)
- {
- }
-
- virtual void notifyFinished(CachedResource* cachedResource)
- {
- ASSERT(cachedResource->type() == CachedResource::Script);
- ASSERT(cachedResource == m_cachedScript.get());
- ASSERT(WTF::isMainThread());
-
- if (cachedResource->errorOccurred())
- m_loader->scriptLoadError(cachedResource->url());
- else if (cachedResource->wasCanceled()) {
- // FIXME: shall we let VM know, so it can inform application some of its
- // resources cannot be loaded?
- } else {
- // FIXME: we can get rid of imported libs and sources map.
- ScriptSourceCode sourceCode(m_cachedScript.get());
- DartIsolateState::Scope scope(m_isolate);
- m_loader->load(sourceCode.url(), sourceCode.source());
- }
-
- m_cachedScript->removeClient(this);
- delete this;
- }
-
- private:
- RefPtr<DartApplicationLoader> m_loader;
- CachedResourceHandle<CachedScript> m_cachedScript;
- Dart_Isolate m_isolate;
-};
-
-void DartApplicationLoader::triggerImport(const String& libraryUrl, const String& importedUrl, Dart_LibraryTag tag)
-{
- ASSERT(importedUrl != "dart:dom");
- ASSERT(importedUrl != "dart:json");
- ASSERT(importedUrl != "dart:html");
- ASSERT(importedUrl != "dart:htmlimpl");
-
- // Record the importer.
- if (tag == kImportTag)
- m_importedLibraries.add(importedUrl);
- else if (tag == kSourceTag)
- add(m_importersForSource, importedUrl, libraryUrl);
- else
- ASSERT_NOT_REACHED();
-
- loadScriptResource(importedUrl);
-}
-
-void DartApplicationLoader::loadScriptResource(const String& url)
-{
- // Request loading of script dependencies.
- CachedResourceLoader* loader = m_document->cachedResourceLoader();
- ResourceRequest request(m_document->completeURL(url));
- // FIXME: what about charset for this script, maybe use charset of initial script tag?
- CachedScript* cachedScript = loader->requestScript(request, "utf-8");
- if (cachedScript)
- cachedScript->addClient(new ScriptLoadCallback(this, cachedScript, Dart_CurrentIsolate()));
- else
- scriptLoadError(KURL(KURL(), url));
-}
-
-void DartApplicationLoader::scriptLoadError(const KURL& url)
-{
- // FIXME: source file info (must be captured when requesting resource).
- String sourceFile = "FIXME";
- // FIXME: line number info (must be captured when requesting resource).
- int lineNumber = 0;
- // FIXME: call stack info (must be captured when requesting resource).
- RefPtr<ScriptCallStack> callStack;
- String errorMessage = "Cannot load Dart script " + url.string();
- m_document->reportException(errorMessage, lineNumber, sourceFile, callStack);
- // FIXME: shall we let VM know, so it can inform application some of its
- // resources cannot be loaded?
-}
-
-Dart_Handle DartApplicationLoader::reinject(Dart_Handle library, const String& libraryUrl, const String& importedUrl, Dart_LibraryTag tag)
-{
- ASSERT(m_sources.contains(importedUrl));
- const String& source = m_sources.get(importedUrl);
-
- Dart_Handle dartSource = DartUtilities::stringToDartString(source);
- if (tag == kImportTag) {
- Dart_Handle result = Dart_LoadLibrary(DartUtilities::stringToDartString(importedUrl), dartSource);
- if (Dart_IsError(result))
- return result;
- } else if (tag == kSourceTag) {
- Dart_Handle result = Dart_LoadSource(library, DartUtilities::stringToDartString(importedUrl), dartSource);
- if (Dart_IsError(result))
- return result;
- } else
- ASSERT_NOT_REACHED();
-
- return Dart_NewBoolean(true);
-}
-
-void DartApplicationLoader::add(UrlMultiMap& map, const String& key, const String& value)
-{
- // We should never have a self dependence.
- ASSERT(key != value);
- UrlMultiMap::iterator iter = map.find(key);
- if (iter == map.end())
- iter = map.add(key, new UrlSet()).first;
- UrlSet* set = iter->second;
- set->add(value);
-}
-
-struct ReinjectLoader {
- static Dart_Handle load(Dart_LibraryTag tag, Dart_Handle library, const String& libraryUrl, const String& importedUrl)
- {
- return currentAppLoader()->reinject(library, libraryUrl, importedUrl, tag);
- }
-};
-
-void DartApplicationLoader::reinjectSources()
-{
- ASSERT(!isLoadingMainIsolate());
-
- // FIXME: propagate flags as well.
-
- // Set proper dart loader for child isolate.
- isolateToDartApplicationLoaderMap().set(Dart_CurrentIsolate(), this);
-
- ASSERT(m_sources.contains(m_libraryUrl));
- ScriptLoader<ReinjectLoader>::loadScript(m_libraryUrl, m_sources.get(m_libraryUrl), m_document);
-}
-
-}
« no previous file with comments | « Source/WebCore/bindings/dart/DartApplicationLoader.h ('k') | Source/WebCore/bindings/dart/DartBindingsCommonIncludes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698