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#ifndef CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/basictypes.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/content_export.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/platform/WebURLResponse.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GURL; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace blink { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebFrame; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ResourceFetcher; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Helper class to download a Web Manifest. When an instance is created, the 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// caller need to call Start() and wait for the passed callback to be executed. 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// If the fetch fails, the callback will be called with two empty objects. 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CONTENT_EXPORT ManifestFetcher { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This will be called asynchronously after the URL has been fetched, 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // successfully or not. If there is a failure, response and data will both be 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // empty. |response| and |data| are both valid until the URLFetcher instance 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // is destroyed. 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef base::Callback<void(const blink::WebURLResponse& response, 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& data)> Callback; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit ManifestFetcher(const GURL& url); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ManifestFetcher(); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Start(blink::WebFrame* frame, const Callback& callback); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Cancel(); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnLoadComplete(const blink::WebURLResponse& response, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& data); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool completed_; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Callback callback_; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ResourceFetcher> fetcher_; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ManifestFetcher); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 58