1// Copyright (c) 2012 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 GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
6#define GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
7
8#include <string>
9
10#include "google_apis/drive/base_requests.h"
11#include "google_apis/drive/gdata_wapi_url_generator.h"
12
13namespace google_apis {
14
15class ResourceEntry;
16
17// Callback type for GetResourceEntryRequest.
18typedef base::Callback<void(GDataErrorCode error,
19                            scoped_ptr<ResourceEntry> entry)>
20    GetResourceEntryCallback;
21
22// This class performs the request for fetching a single resource entry.
23class GetResourceEntryRequest : public UrlFetchRequestBase {
24 public:
25  // |callback| must not be null.
26  GetResourceEntryRequest(RequestSender* sender,
27                          const GDataWapiUrlGenerator& url_generator,
28                          const std::string& resource_id,
29                          const GURL& embed_origin,
30                          const GetResourceEntryCallback& callback);
31  virtual ~GetResourceEntryRequest();
32
33 protected:
34  // UrlFetchRequestBase overrides.
35  virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE;
36  virtual void RunCallbackOnPrematureFailure(GDataErrorCode error) OVERRIDE;
37  virtual GURL GetURL() const OVERRIDE;
38
39 private:
40  void OnDataParsed(GDataErrorCode error, scoped_ptr<ResourceEntry> entry);
41
42  const GDataWapiUrlGenerator url_generator_;
43  // Resource id of the requested entry.
44  const std::string resource_id_;
45  // Embed origin for an url to the sharing dialog. Can be empty.
46  GURL embed_origin_;
47
48  const GetResourceEntryCallback callback_;
49
50  // Note: This should remain the last member so it'll be destroyed and
51  // invalidate its weak pointers before any other members are destroyed.
52  base::WeakPtrFactory<GetResourceEntryRequest> weak_ptr_factory_;
53
54  DISALLOW_COPY_AND_ASSIGN(GetResourceEntryRequest);
55};
56
57}  // namespace google_apis
58
59#endif  // GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
60