1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 6#define CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/callback.h" 12#include "base/memory/scoped_ptr.h" 13#include "content/common/content_export.h" 14#include "third_party/WebKit/public/platform/WebURLResponse.h" 15 16class GURL; 17 18namespace blink { 19class WebFrame; 20} 21 22namespace content { 23 24class ResourceFetcher; 25 26// Helper class to download a Web Manifest. When an instance is created, the 27// caller need to call Start() and wait for the passed callback to be executed. 28// If the fetch fails, the callback will be called with two empty objects. 29class CONTENT_EXPORT ManifestFetcher { 30 public: 31 // This will be called asynchronously after the URL has been fetched, 32 // successfully or not. If there is a failure, response and data will both be 33 // empty. |response| and |data| are both valid until the URLFetcher instance 34 // is destroyed. 35 typedef base::Callback<void(const blink::WebURLResponse& response, 36 const std::string& data)> Callback; 37 38 explicit ManifestFetcher(const GURL& url); 39 virtual ~ManifestFetcher(); 40 41 void Start(blink::WebFrame* frame, const Callback& callback); 42 void Cancel(); 43 44 private: 45 void OnLoadComplete(const blink::WebURLResponse& response, 46 const std::string& data); 47 48 bool completed_; 49 Callback callback_; 50 scoped_ptr<ResourceFetcher> fetcher_; 51 52 DISALLOW_COPY_AND_ASSIGN(ManifestFetcher); 53}; 54 55} // namespace content 56 57#endif // CONTENT_RENDERER_FETCHERS_MANIFEST_FETCHER_H_ 58