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