17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_BLOB_READER_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_BLOB_READER_H_
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string>
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/callback.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/base/io_buffer.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_request.h"
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class Profile;
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace net {
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class URLFetcher;
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This class may only be used from the UI thread.
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class BlobReader : public net::URLFetcherDelegate {
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public:
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |blob_data| contains the portion of the Blob requested. |blob_total_size|
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // is the total size of the Blob, and may be larger than |blob_data->size()|.
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |blob_total_size| is -1 if it cannot be determined.
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef base::Callback<void(scoped_ptr<std::string> blob_data,
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              int64 blob_total_size)>
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      BlobReadCallback;
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  BlobReader(Profile* profile,
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)             const std::string& blob_uuid,
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)             BlobReadCallback callback);
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual ~BlobReader();
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetByteRange(int64 offset, int64 length);
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void Start();
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Overridden from net::URLFetcherDelegate.
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  BlobReadCallback callback_;
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<net::URLFetcher> fetcher_;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BlobReader);
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_BLOB_READER_H_
52