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

Unified Diff: Source/core/loader/ManifestLoader.cpp

Issue 295063002: [NotLanded] Implement the fetching algorithm of the Web Manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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/core/loader/ManifestLoader.cpp
diff --git a/Source/core/loader/ManifestLoader.cpp b/Source/core/loader/ManifestLoader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7a619f7b63065817eafff4a3c4feb93ba12e66d1
--- /dev/null
+++ b/Source/core/loader/ManifestLoader.cpp
@@ -0,0 +1,78 @@
+// Copyright 2014 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 "config.h"
+#include "ManifestLoader.h"
+
+#include "core/dom/Document.h"
+#include "core/fetch/FetchRequest.h"
+#include "core/fetch/ResourceFetcher.h"
+#include "core/html/HTMLLinkElement.h"
+#include "platform/network/ResourceRequest.h"
+#include "public/platform/WebManifest.h"
+#include "public/platform/WebManifestRequest.h"
+
+using namespace WebCore;
+
+void ManifestLoader::LoadManifest(
+ blink::WebManifestRequest* request,
+ Document* document)
+{
+ ManifestLoader* leakedManifestLoader ALLOW_UNUSED = new ManifestLoader(request);
dcheng 2014/05/20 22:40:51 Is the ALLOW_UNUSED attribute required? It's proba
mlamouri (slow - plz ping) 2014/05/21 09:51:12 Done.
+ leakedManifestLoader->startLoading(document);
+}
+
+ManifestLoader::ManifestLoader(blink::WebManifestRequest* request)
+ : m_request(request)
+{
+ ASSERT(m_request);
+}
+
+ManifestLoader::~ManifestLoader()
+{
+}
+
+void ManifestLoader::startLoading(Document* document)
+{
+ ASSERT(document);
+
+ HTMLLinkElement* linkElement = document->linkManifest();
+ if (!linkElement) {
+ m_request->requestFailed(blink::WebManifestRequest::NoLinkManifest);
+ delete this;
+ return;
+ }
+
+ KURL url(document->baseURL(), linkElement->href(), document->encoding());
+ FetchRequest request = FetchRequest(ResourceRequest(url), FetchInitiatorInfo());
+ AtomicString crossOriginMode = linkElement->fastGetAttribute(HTMLNames::crossoriginAttr);
+ if (!crossOriginMode.isNull()) {
+ request.setCrossOriginAccessControl(document->securityOrigin(), crossOriginMode);
+ }
+
+ ResourcePtr<Resource> resource = document->fetcher()->fetchManifest(request);
+ if (!resource) {
+ m_request->requestFailed(blink::WebManifestRequest::NetworkError);
+ delete this;
+ return;
+ }
+
+ setResource(resource);
+}
+
+void ManifestLoader::notifyFinished(Resource* resource)
+{
+ ASSERT(resource == this->resource());
+
+ if (resource->loadFailedOrCanceled() || resource->errorOccurred()) {
+ m_request->requestFailed(blink::WebManifestRequest::NetworkError);
+ } else {
+ // FIXME: parse the received data.
+ blink::WebManifest manifest;
+ m_request->requestSucceeded(manifest);
+ }
+
+ clearResource();
+ delete this;
+}

Powered by Google App Engine
This is Rietveld 408576698