| Index: shell/application_manager/network_fetcher.cc
|
| diff --git a/shell/application_manager/network_fetcher.cc b/shell/application_manager/network_fetcher.cc
|
| index 3caaa1a235e75e3a389cbd86e99f136d95dfcea6..159c28cd8583c07e7f38cf8a25a3a33d6efb2a97 100644
|
| --- a/shell/application_manager/network_fetcher.cc
|
| +++ b/shell/application_manager/network_fetcher.cc
|
| @@ -36,6 +36,9 @@ char kArchitecture[] = "macosx";
|
| #error "Unsupported."
|
| #endif
|
|
|
| +const bool kScheduleUpdate = true;
|
| +const bool kDoNotScheduleUpdate = false;
|
| +
|
| // The delay to wait before trying to update an application after having served
|
| // it from the cache.
|
| const uint32_t kUpdateApplicationDelayInSeconds = 60;
|
| @@ -63,6 +66,22 @@ mojo::URLRequestPtr GetRequest(const GURL& url, bool disable_cache) {
|
| return request.Pass();
|
| }
|
|
|
| +// Clone an URLResponse, except for the body.
|
| +mojo::URLResponsePtr CloneResponse(const mojo::URLResponsePtr& response) {
|
| + mojo::URLResponsePtr cloned = mojo::URLResponse::New();
|
| + cloned->error = response->error.Clone();
|
| + cloned->url = response->url;
|
| + cloned->status_code = response->status_code;
|
| + cloned->status_line = response->status_line;
|
| + cloned->headers = response->headers.Clone();
|
| + cloned->mime_type = response->mime_type;
|
| + cloned->charset = response->charset;
|
| + cloned->redirect_method = response->redirect_method;
|
| + cloned->redirect_url = response->redirect_url;
|
| + cloned->redirect_referrer = response->redirect_referrer;
|
| + return cloned.Pass();
|
| +}
|
| +
|
| // This class is self owned and will delete itself after having tried to update
|
| // the application cache.
|
| class ApplicationUpdater : public base::MessageLoop::DestructionObserver {
|
| @@ -119,7 +138,9 @@ void ApplicationUpdater::UpdateApplication() {
|
| }
|
|
|
| void ApplicationUpdater::OnLoadComplete(mojo::URLResponsePtr response) {
|
| + std::string url = response->url;
|
| url_response_disk_cache_->Update(response.Pass());
|
| + url_response_disk_cache_->Validate(url);
|
| delete this;
|
| }
|
|
|
| @@ -140,7 +161,7 @@ NetworkFetcher::NetworkFetcher(
|
| network_service_(network_service),
|
| weak_ptr_factory_(this) {
|
| if (CanLoadDirectlyFromCache()) {
|
| - LoadFromCache(true);
|
| + LoadFromCache();
|
| } else {
|
| StartNetworkRequest();
|
| }
|
| @@ -210,18 +231,17 @@ bool NetworkFetcher::CanLoadDirectlyFromCache() {
|
| return !(host == "localhost" || host == "127.0.0.1" || host == "[::1]");
|
| }
|
|
|
| -void NetworkFetcher::LoadFromCache(bool schedule_update) {
|
| +void NetworkFetcher::LoadFromCache() {
|
| url_response_disk_cache_->Get(
|
| mojo::String::From(url_),
|
| - base::Bind(&NetworkFetcher::OnCachedResponseReceived,
|
| - base::Unretained(this), schedule_update));
|
| + base::Bind(&NetworkFetcher::OnResponseReceived, base::Unretained(this),
|
| + kScheduleUpdate));
|
| }
|
|
|
| -void NetworkFetcher::OnCachedResponseReceived(
|
| - bool schedule_update,
|
| - mojo::URLResponsePtr response,
|
| - mojo::Array<uint8_t> path_as_array,
|
| - mojo::Array<uint8_t> cache_dir) {
|
| +void NetworkFetcher::OnResponseReceived(bool schedule_update,
|
| + mojo::URLResponsePtr response,
|
| + mojo::Array<uint8_t> path_as_array,
|
| + mojo::Array<uint8_t> cache_dir) {
|
| if (!response) {
|
| // Not in cache, loading from net.
|
| StartNetworkRequest();
|
| @@ -274,12 +294,15 @@ void NetworkFetcher::OnLoadComplete(mojo::URLResponsePtr response) {
|
| return;
|
| }
|
|
|
| + mojo::URLResponsePtr cloned_response = CloneResponse(response);
|
| url_response_disk_cache_->UpdateAndGet(
|
| response.Pass(), base::Bind(&NetworkFetcher::OnFileSavedToCache,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + base::Passed(cloned_response.Pass())));
|
| }
|
|
|
| -void NetworkFetcher::OnFileSavedToCache(mojo::Array<uint8_t> path_as_array,
|
| +void NetworkFetcher::OnFileSavedToCache(mojo::URLResponsePtr response,
|
| + mojo::Array<uint8_t> path_as_array,
|
| mojo::Array<uint8_t> cache_dir) {
|
| if (!path_as_array) {
|
| LOG(WARNING) << "Error when retrieving content from cache for: "
|
| @@ -288,7 +311,8 @@ void NetworkFetcher::OnFileSavedToCache(mojo::Array<uint8_t> path_as_array,
|
| delete this;
|
| return;
|
| }
|
| - LoadFromCache(false);
|
| + OnResponseReceived(kDoNotScheduleUpdate, response.Pass(),
|
| + path_as_array.Pass(), cache_dir.Pass());
|
| }
|
|
|
| void NetworkFetcher::RecordCacheToURLMapping(const base::FilePath& path,
|
|
|