11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/renderer/fetchers/manifest_fetcher.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/renderer/resource_fetcher.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/platform/WebURLRequest.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebFrame.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content {
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestFetcher::ManifestFetcher(const GURL& url)
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : completed_(false) {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher_.reset(ResourceFetcher::Create(url));
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciManifestFetcher::~ManifestFetcher() {
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!completed_)
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    Cancel();
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestFetcher::Start(blink::WebFrame* frame, const Callback& callback) {
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  callback_ = callback;
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher_->Start(frame,
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  blink::WebURLRequest::RequestContextManifest,
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  blink::WebURLRequest::FrameTypeNone,
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  ResourceFetcher::FRAME_ASSOCIATED_LOADER,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  base::Bind(&ManifestFetcher::OnLoadComplete,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             base::Unretained(this)));
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestFetcher::Cancel() {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!completed_);
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher_->Cancel();
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ManifestFetcher::OnLoadComplete(const blink::WebURLResponse& response,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                     const std::string& data) {
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!completed_);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  completed_ = true;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Callback callback = callback_;
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  callback.Run(response, data);
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content
50