atom_url_request.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright (c) 2016 GitHub, Inc.
  2. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
  3. // Use of this source code is governed by the MIT license that can be
  4. // found in the LICENSE file.
  5. #ifndef ATOM_BROWSER_NET_ATOM_URL_REQUEST_H_
  6. #define ATOM_BROWSER_NET_ATOM_URL_REQUEST_H_
  7. #include <string>
  8. #include <vector>
  9. #include "atom/browser/api/atom_api_url_request.h"
  10. #include "atom/browser/atom_browser_context.h"
  11. #include "base/memory/ref_counted.h"
  12. #include "base/memory/weak_ptr.h"
  13. #include "net/base/auth.h"
  14. #include "net/base/chunked_upload_data_stream.h"
  15. #include "net/base/io_buffer.h"
  16. #include "net/base/upload_element_reader.h"
  17. #include "net/http/http_response_headers.h"
  18. #include "net/url_request/url_request.h"
  19. #include "net/url_request/url_request_context_getter_observer.h"
  20. namespace atom {
  21. class AtomURLRequest : public base::RefCountedThreadSafe<AtomURLRequest>,
  22. public net::URLRequest::Delegate,
  23. public net::URLRequestContextGetterObserver {
  24. public:
  25. static scoped_refptr<AtomURLRequest> Create(
  26. AtomBrowserContext* browser_context,
  27. const std::string& method,
  28. const std::string& url,
  29. const std::string& redirect_policy,
  30. api::URLRequest* delegate);
  31. void Terminate();
  32. bool Write(scoped_refptr<const net::IOBufferWithSize> buffer, bool is_last);
  33. void SetChunkedUpload(bool is_chunked_upload);
  34. void Cancel();
  35. void FollowRedirect();
  36. void SetExtraHeader(const std::string& name, const std::string& value) const;
  37. void RemoveExtraHeader(const std::string& name) const;
  38. void PassLoginInformation(const base::string16& username,
  39. const base::string16& password) const;
  40. void SetLoadFlags(int flags) const;
  41. void GetUploadProgress(mate::Dictionary* progress) const;
  42. protected:
  43. // Overrides of net::URLRequest::Delegate
  44. void OnReceivedRedirect(net::URLRequest* request,
  45. const net::RedirectInfo& info,
  46. bool* defer_redirect) override;
  47. void OnAuthRequired(net::URLRequest* request,
  48. net::AuthChallengeInfo* auth_info) override;
  49. void OnResponseStarted(net::URLRequest* request, int net_error) override;
  50. void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
  51. // Overrides of net::URLRequestContextGetterObserver
  52. void OnContextShuttingDown() override;
  53. private:
  54. friend class base::RefCountedThreadSafe<AtomURLRequest>;
  55. explicit AtomURLRequest(api::URLRequest* delegate);
  56. ~AtomURLRequest() override;
  57. void DoInitialize(scoped_refptr<net::URLRequestContextGetter>,
  58. const std::string& method,
  59. const std::string& url,
  60. const std::string& redirect_policy);
  61. void DoTerminate();
  62. void DoWriteBuffer(scoped_refptr<const net::IOBufferWithSize> buffer,
  63. bool is_last);
  64. void DoCancel();
  65. void DoFollowRedirect();
  66. void DoSetExtraHeader(const std::string& name,
  67. const std::string& value) const;
  68. void DoRemoveExtraHeader(const std::string& name) const;
  69. void DoSetAuth(const base::string16& username,
  70. const base::string16& password) const;
  71. void DoCancelAuth() const;
  72. void DoCancelWithError(const std::string& error, bool isRequestError);
  73. void DoSetLoadFlags(int flags) const;
  74. void ReadResponse();
  75. bool CopyAndPostBuffer(int bytes_read);
  76. void InformDelegateReceivedRedirect(
  77. int status_code,
  78. const std::string& method,
  79. const GURL& url,
  80. scoped_refptr<net::HttpResponseHeaders> response_headers) const;
  81. void InformDelegateAuthenticationRequired(
  82. scoped_refptr<net::AuthChallengeInfo> auth_info) const;
  83. void InformDelegateResponseStarted(
  84. scoped_refptr<net::HttpResponseHeaders>) const;
  85. void InformDelegateResponseData(
  86. scoped_refptr<net::IOBufferWithSize> data) const;
  87. void InformDelegateResponseCompleted() const;
  88. void InformDelegateErrorOccured(const std::string& error,
  89. bool isRequestError) const;
  90. api::URLRequest* delegate_;
  91. std::unique_ptr<net::URLRequest> request_;
  92. scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
  93. bool is_chunked_upload_ = false;
  94. std::string redirect_policy_;
  95. std::unique_ptr<net::ChunkedUploadDataStream> chunked_stream_;
  96. std::unique_ptr<net::ChunkedUploadDataStream::Writer> chunked_stream_writer_;
  97. std::vector<std::unique_ptr<net::UploadElementReader>>
  98. upload_element_readers_;
  99. scoped_refptr<net::IOBuffer> response_read_buffer_;
  100. DISALLOW_COPY_AND_ASSIGN(AtomURLRequest);
  101. };
  102. } // namespace atom
  103. #endif // ATOM_BROWSER_NET_ATOM_URL_REQUEST_H_