12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/base_requests.h"
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_wapi_url_generator.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace google_apis {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ResourceEntry;
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Callback type for GetResourceEntryRequest.
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef base::Callback<void(GDataErrorCode error,
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                            scoped_ptr<ResourceEntry> entry)>
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    GetResourceEntryCallback;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This class performs the request for fetching a single resource entry.
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class GetResourceEntryRequest : public UrlFetchRequestBase {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |callback| must not be null.
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GetResourceEntryRequest(RequestSender* sender,
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          const GDataWapiUrlGenerator& url_generator,
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          const std::string& resource_id,
29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch                          const GURL& embed_origin,
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                          const GetResourceEntryCallback& callback);
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~GetResourceEntryRequest();
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UrlFetchRequestBase overrides.
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE;
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RunCallbackOnPrematureFailure(GDataErrorCode error) OVERRIDE;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void OnDataParsed(GDataErrorCode error, scoped_ptr<ResourceEntry> entry);
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GDataWapiUrlGenerator url_generator_;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resource id of the requested entry.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string resource_id_;
45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  // Embed origin for an url to the sharing dialog. Can be empty.
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GURL embed_origin_;
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const GetResourceEntryCallback callback_;
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Note: This should remain the last member so it'll be destroyed and
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // invalidate its weak pointers before any other members are destroyed.
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::WeakPtrFactory<GetResourceEntryRequest> weak_ptr_factory_;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GetResourceEntryRequest);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace google_apis
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
60