Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Side by Side Diff: chrome/browser/webdata/web_data_request_manager.h

Issue 13392014: Move c/b/webdata/ code to components/webdata/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pure merge Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 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 // Chromium settings and storage represent user-selected preferences and
6 // information and MUST not be extracted, overwritten or modified except
7 // through Chromium defined APIs.
8
9 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__
10 #define CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__
11
12 #include <map>
13
14 #include "base/memory/ref_counted.h"
15 #include "base/synchronization/lock.h"
16 #include "chrome/browser/api/webdata/web_data_results.h"
17 #include "chrome/browser/api/webdata/web_data_service_base.h"
18 #include "chrome/browser/api/webdata/web_data_service_consumer.h"
19
20 class WebDataService;
21 class WebDataServiceConsumer;
22 class WebDataRequestManager;
23
24 namespace base {
25 class MessageLoop;
26 }
27
28 //////////////////////////////////////////////////////////////////////////////
29 //
30 // Webdata requests
31 //
32 // Every request is processed using a request object. The object contains
33 // both the request parameters and the results.
34 //////////////////////////////////////////////////////////////////////////////
35 class WebDataRequest {
36 public:
37 WebDataRequest(WebDataServiceConsumer* consumer,
38 WebDataRequestManager* manager);
39
40 virtual ~WebDataRequest();
41
42 WebDataServiceBase::Handle GetHandle() const;
43
44 // Retrieves the |consumer_| set in the constructor.
45 WebDataServiceConsumer* GetConsumer() const;
46
47 // Retrieves the original message loop the of the request.
48 base::MessageLoop* GetMessageLoop() const;
49
50 // Returns |true| if the request was cancelled via the |Cancel()| method.
51 bool IsCancelled() const;
52
53 // This can be invoked from any thread. From this point we assume that
54 // our consumer_ reference is invalid.
55 void Cancel();
56
57 // Invoked when the request has been completed.
58 void OnComplete();
59
60 // The result is owned by the request.
61 void SetResult(scoped_ptr<WDTypedResult> r);
62
63 // Transfers ownership pof result to caller. Should only be called once per
64 // result.
65 scoped_ptr<WDTypedResult> GetResult();
66
67 private:
68 // Used to notify manager if request is cancelled. Uses a raw ptr instead of
69 // a ref_ptr so that it can be set to NULL when a request is cancelled.
70 WebDataRequestManager* manager_;
71
72 // Tracks loop that the request originated on.
73 base::MessageLoop* message_loop_;
74
75 // Identifier for this request.
76 WebDataServiceBase::Handle handle_;
77
78 // A lock to protect against simultaneous cancellations of the request.
79 // Cancellation affects both the |cancelled_| flag and |consumer_|.
80 mutable base::Lock cancel_lock_;
81 bool cancelled_;
82
83 // The originator of the service request.
84 WebDataServiceConsumer* consumer_;
85
86 scoped_ptr<WDTypedResult> result_;
87
88 DISALLOW_COPY_AND_ASSIGN(WebDataRequest);
89 };
90
91 //////////////////////////////////////////////////////////////////////////////
92 //
93 // Webdata Request Manager
94 //
95 // Tracks all WebDataRequests for a WebDataService.
96 //
97 // Note: This is an internal interface, not to be used outside of webdata/
98 //////////////////////////////////////////////////////////////////////////////
99 class WebDataRequestManager
100 : public base::RefCountedThreadSafe<WebDataRequestManager> {
101 public:
102 WebDataRequestManager();
103
104 // Cancel any pending request.
105 void CancelRequest(WebDataServiceBase::Handle h);
106
107 // Invoked by the WebDataService when |request| has been completed.
108 void RequestCompleted(scoped_ptr<WebDataRequest> request);
109
110 // Register the request as a pending request.
111 void RegisterRequest(WebDataRequest* request);
112
113 // Return the next request handle.
114 int GetNextRequestHandle();
115
116 private:
117 friend class base::RefCountedThreadSafe<WebDataRequestManager>;
118
119 ~WebDataRequestManager();
120
121 // This will notify the consumer in whatever thread was used to create this
122 // request.
123 void RequestCompletedOnThread(scoped_ptr<WebDataRequest> request);
124
125 // A lock to protect pending requests and next request handle.
126 base::Lock pending_lock_;
127
128 // Next handle to be used for requests. Incremented for each use.
129 WebDataServiceBase::Handle next_request_handle_;
130
131 typedef std::map<WebDataServiceBase::Handle, WebDataRequest*> RequestMap;
132 RequestMap pending_requests_;
133
134 DISALLOW_COPY_AND_ASSIGN(WebDataRequestManager);
135 };
136
137 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698