Changeset 170254 in webkit
- Timestamp:
- Jun 21, 2014 3:25:34 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r170253 r170254 1 2014-06-21 Dan Bernstein <mitz@apple.com> 2 3 CallbackMap::put should be able to take an unwrapped function 4 https://bugs.webkit.org/show_bug.cgi?id=134104 5 6 Reviewed by Anders Carlsson. 7 8 * UIProcess/GenericCallback.h: 9 (WebKit::CallbackMap::put): Added an overload that takes a function and creates and puts a 10 callback. Changed both overloads of put() to return the callback ID. 11 12 * UIProcess/WebPageProxy.cpp: 13 (WebKit::WebPageProxy::validateCommand): 14 (WebKit::WebPageProxy::runJavaScriptInMainFrame): 15 (WebKit::WebPageProxy::getRenderTreeExternalRepresentation): 16 (WebKit::WebPageProxy::getSourceForFrame): 17 (WebKit::WebPageProxy::getContentsAsString): 18 (WebKit::WebPageProxy::getBytecodeProfile): 19 (WebKit::WebPageProxy::getContentsAsMHTMLData): 20 (WebKit::WebPageProxy::getSelectionOrContentsAsString): 21 (WebKit::WebPageProxy::getSelectionAsWebArchiveData): 22 (WebKit::WebPageProxy::getMainResourceDataOfFrame): 23 (WebKit::WebPageProxy::getResourceDataFromFrame): 24 (WebKit::WebPageProxy::getWebArchiveOfFrame): 25 (WebKit::WebPageProxy::getMarkedRangeAsync): 26 (WebKit::WebPageProxy::getSelectedRangeAsync): 27 (WebKit::WebPageProxy::characterIndexForPointAsync): 28 (WebKit::WebPageProxy::firstRectForCharacterRangeAsync): 29 (WebKit::WebPageProxy::takeSnapshot): 30 1 31 2014-06-21 Anders Carlsson <andersca@apple.com> 2 32 -
trunk/Source/WebKit2/UIProcess/GenericCallback.h
r170168 r170254 168 168 class CallbackMap { 169 169 public: 170 voidput(PassRefPtr<CallbackBase> callback)170 uint64_t put(PassRefPtr<CallbackBase> callback) 171 171 { 172 172 ASSERT(!m_map.contains(callback->callbackID())); 173 m_map.set(callback->callbackID(), callback); 173 174 uint64_t callbackID = callback->callbackID(); 175 m_map.set(callbackID, callback); 176 return callbackID; 177 } 178 179 template<unsigned I, typename T, typename... U> 180 struct GenericCallbackType { 181 typedef typename GenericCallbackType<I - 1, U..., T>::type type; 182 }; 183 184 template<typename... U> 185 struct GenericCallbackType<1, CallbackBase::Error, U...> { 186 typedef GenericCallback<U...> type; 187 }; 188 189 template<typename... T> 190 uint64_t put(std::function<void (T...)> function) 191 { 192 auto callback = GenericCallbackType<sizeof...(T), T...>::type::create(std::move(function)); 193 return put(callback); 174 194 } 175 195 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r170222 r170254 1242 1242 void WebPageProxy::validateCommand(const String& commandName, std::function<void (const String&, bool, int32_t, CallbackBase::Error)> callbackFunction) 1243 1243 { 1244 RefPtr<ValidateCommandCallback> callback = ValidateCommandCallback::create(std::move(callbackFunction));1245 1246 1244 if (!isValid()) { 1247 callback->invalidate(); 1248 return; 1249 } 1250 1251 uint64_t callbackID = callback->callbackID(); 1252 m_callbacks.put(callback); 1245 callbackFunction(String(), false, 0, CallbackBase::Error::Unknown); 1246 return; 1247 } 1248 1249 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 1253 1250 m_process->send(Messages::WebPage::ValidateCommand(commandName, callbackID), m_pageID); 1254 1251 } … … 2188 2185 void WebPageProxy::runJavaScriptInMainFrame(const String& script, std::function<void (WebSerializedScriptValue*, CallbackBase::Error)> callbackFunction) 2189 2186 { 2190 RefPtr<ScriptValueCallback> callback = ScriptValueCallback::create(std::move(callbackFunction));2191 2187 if (!isValid()) { 2192 callback->invalidate(); 2193 return; 2194 } 2195 2196 uint64_t callbackID = callback->callbackID(); 2197 m_callbacks.put(callback); 2188 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2189 return; 2190 } 2191 2192 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2198 2193 m_process->send(Messages::WebPage::RunJavaScriptInMainFrame(script, callbackID), m_pageID); 2199 2194 } … … 2201 2196 void WebPageProxy::getRenderTreeExternalRepresentation(std::function<void (const String&, CallbackBase::Error)> callbackFunction) 2202 2197 { 2203 RefPtr<StringCallback> callback = StringCallback::create(std::move(callbackFunction));2204 2198 if (!isValid()) { 2205 callback ->invalidate();2199 callbackFunction(String(), CallbackBase::Error::Unknown); 2206 2200 return; 2207 2201 } 2208 2202 2209 uint64_t callbackID = callback->callbackID(); 2210 m_callbacks.put(callback); 2203 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2211 2204 m_process->send(Messages::WebPage::GetRenderTreeExternalRepresentation(callbackID), m_pageID); 2212 2205 } … … 2214 2207 void WebPageProxy::getSourceForFrame(WebFrameProxy* frame, std::function<void (const String&, CallbackBase::Error)> callbackFunction) 2215 2208 { 2216 RefPtr<StringCallback> callback = StringCallback::create(std::move(callbackFunction));2217 2209 if (!isValid()) { 2218 callback ->invalidate();2210 callbackFunction(String(), CallbackBase::Error::Unknown); 2219 2211 return; 2220 2212 } 2221 2213 2222 uint64_t callbackID = callback->callbackID();2214 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2223 2215 m_loadDependentStringCallbackIDs.add(callbackID); 2224 m_callbacks.put(callback);2225 2216 m_process->send(Messages::WebPage::GetSourceForFrame(frame->frameID(), callbackID), m_pageID); 2226 2217 } … … 2228 2219 void WebPageProxy::getContentsAsString(std::function<void (const String&, CallbackBase::Error)> callbackFunction) 2229 2220 { 2230 RefPtr<StringCallback> callback = StringCallback::create(std::move(callbackFunction));2231 2221 if (!isValid()) { 2232 callback ->invalidate();2222 callbackFunction(String(), CallbackBase::Error::Unknown); 2233 2223 return; 2234 2224 } 2235 2225 2236 uint64_t callbackID = callback->callbackID();2226 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2237 2227 m_loadDependentStringCallbackIDs.add(callbackID); 2238 m_callbacks.put(callback);2239 2228 m_process->send(Messages::WebPage::GetContentsAsString(callbackID), m_pageID); 2240 2229 } … … 2242 2231 void WebPageProxy::getBytecodeProfile(std::function<void (const String&, CallbackBase::Error)> callbackFunction) 2243 2232 { 2244 RefPtr<StringCallback> callback = StringCallback::create(std::move(callbackFunction));2245 2233 if (!isValid()) { 2246 callback ->invalidate();2234 callbackFunction(String(), CallbackBase::Error::Unknown); 2247 2235 return; 2248 2236 } 2249 2237 2250 uint64_t callbackID = callback->callbackID();2238 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2251 2239 m_loadDependentStringCallbackIDs.add(callbackID); 2252 m_callbacks.put(callback);2253 2240 m_process->send(Messages::WebPage::GetBytecodeProfile(callbackID), m_pageID); 2254 2241 } … … 2257 2244 void WebPageProxy::getContentsAsMHTMLData(std::function<void (API::Data*, CallbackBase::Error)> callbackFunction, bool useBinaryEncoding) 2258 2245 { 2259 RefPtr<DataCallback> callback = DataCallback::create(std::move(callbackFunction));2260 2246 if (!isValid()) { 2261 callback->invalidate(); 2262 return; 2263 } 2264 2265 uint64_t callbackID = callback->callbackID(); 2266 m_callbacks.put(callback); 2247 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2248 return; 2249 } 2250 2251 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2267 2252 m_process->send(Messages::WebPage::GetContentsAsMHTMLData(callbackID, useBinaryEncoding), m_pageID); 2268 2253 } … … 2271 2256 void WebPageProxy::getSelectionOrContentsAsString(std::function<void (const String&, CallbackBase::Error)> callbackFunction) 2272 2257 { 2273 RefPtr<StringCallback> callback = StringCallback::create(std::move(callbackFunction));2274 2258 if (!isValid()) { 2275 callback ->invalidate();2259 callbackFunction(String(), CallbackBase::Error::Unknown); 2276 2260 return; 2277 2261 } 2278 2262 2279 uint64_t callbackID = callback->callbackID(); 2280 m_callbacks.put(callback); 2263 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2281 2264 m_process->send(Messages::WebPage::GetSelectionOrContentsAsString(callbackID), m_pageID); 2282 2265 } … … 2284 2267 void WebPageProxy::getSelectionAsWebArchiveData(std::function<void (API::Data*, CallbackBase::Error)> callbackFunction) 2285 2268 { 2286 RefPtr<DataCallback> callback = DataCallback::create(std::move(callbackFunction));2287 2269 if (!isValid()) { 2288 callback ->invalidate();2270 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2289 2271 return; 2290 2272 } 2291 2273 2292 uint64_t callbackID = callback->callbackID(); 2293 m_callbacks.put(callback); 2274 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2294 2275 m_process->send(Messages::WebPage::GetSelectionAsWebArchiveData(callbackID), m_pageID); 2295 2276 } … … 2297 2278 void WebPageProxy::getMainResourceDataOfFrame(WebFrameProxy* frame, std::function<void (API::Data*, CallbackBase::Error)> callbackFunction) 2298 2279 { 2299 RefPtr<DataCallback> callback = DataCallback::create(std::move(callbackFunction));2300 2280 if (!isValid() || !frame) { 2301 callback ->invalidate();2281 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2302 2282 return; 2303 2283 } 2304 2284 2305 uint64_t callbackID = callback->callbackID(); 2306 m_callbacks.put(callback); 2285 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2307 2286 m_process->send(Messages::WebPage::GetMainResourceDataOfFrame(frame->frameID(), callbackID), m_pageID); 2308 2287 } … … 2310 2289 void WebPageProxy::getResourceDataFromFrame(WebFrameProxy* frame, API::URL* resourceURL, std::function<void (API::Data*, CallbackBase::Error)> callbackFunction) 2311 2290 { 2312 RefPtr<DataCallback> callback = DataCallback::create(std::move(callbackFunction));2313 2291 if (!isValid()) { 2314 callback ->invalidate();2292 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2315 2293 return; 2316 2294 } 2317 2295 2318 uint64_t callbackID = callback->callbackID(); 2319 m_callbacks.put(callback); 2296 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2320 2297 m_process->send(Messages::WebPage::GetResourceDataFromFrame(frame->frameID(), resourceURL->string(), callbackID), m_pageID); 2321 2298 } … … 2323 2300 void WebPageProxy::getWebArchiveOfFrame(WebFrameProxy* frame, std::function<void (API::Data*, CallbackBase::Error)> callbackFunction) 2324 2301 { 2325 RefPtr<DataCallback> callback = DataCallback::create(std::move(callbackFunction));2326 2302 if (!isValid()) { 2327 callback ->invalidate();2303 callbackFunction(nullptr, CallbackBase::Error::Unknown); 2328 2304 return; 2329 2305 } 2330 2306 2331 uint64_t callbackID = callback->callbackID(); 2332 m_callbacks.put(callback); 2307 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 2333 2308 m_process->send(Messages::WebPage::GetWebArchiveOfFrame(frame->frameID(), callbackID), m_pageID); 2334 2309 } … … 4969 4944 void WebPageProxy::getMarkedRangeAsync(std::function<void (EditingRange, CallbackBase::Error)> callbackFunction) 4970 4945 { 4946 if (!isValid()) { 4947 callbackFunction(EditingRange(), CallbackBase::Error::Unknown); 4948 return; 4949 } 4950 4951 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 4952 process().send(Messages::WebPage::GetMarkedRangeAsync(callbackID), m_pageID); 4953 } 4954 4955 void WebPageProxy::getSelectedRangeAsync(std::function<void (EditingRange, CallbackBase::Error)> callbackFunction) 4956 { 4971 4957 RefPtr<EditingRangeCallback> callback = EditingRangeCallback::create(std::move(callbackFunction)); 4972 4958 … … 4976 4962 } 4977 4963 4978 uint64_t callbackID = callback->callbackID(); 4979 m_callbacks.put(callback); 4980 4981 process().send(Messages::WebPage::GetMarkedRangeAsync(callbackID), m_pageID); 4982 } 4983 4984 void WebPageProxy::getSelectedRangeAsync(std::function<void (EditingRange, CallbackBase::Error)> callbackFunction) 4985 { 4986 RefPtr<EditingRangeCallback> callback = EditingRangeCallback::create(std::move(callbackFunction)); 4987 4964 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 4965 process().send(Messages::WebPage::GetSelectedRangeAsync(callbackID), m_pageID); 4966 } 4967 4968 void WebPageProxy::characterIndexForPointAsync(const WebCore::IntPoint& point, std::function<void (uint64_t, CallbackBase::Error)> callbackFunction) 4969 { 4988 4970 if (!isValid()) { 4989 callback->invalidate(); 4990 return; 4991 } 4992 4993 uint64_t callbackID = callback->callbackID(); 4994 m_callbacks.put(callback); 4995 4996 process().send(Messages::WebPage::GetSelectedRangeAsync(callbackID), m_pageID); 4997 } 4998 4999 void WebPageProxy::characterIndexForPointAsync(const WebCore::IntPoint& point, std::function<void (uint64_t, CallbackBase::Error)> callbackFunction) 5000 { 5001 RefPtr<UnsignedCallback> callback = UnsignedCallback::create(std::move(callbackFunction)); 5002 4971 callbackFunction(0, CallbackBase::Error::Unknown); 4972 return; 4973 } 4974 4975 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 4976 process().send(Messages::WebPage::CharacterIndexForPointAsync(point, callbackID), m_pageID); 4977 } 4978 4979 void WebPageProxy::firstRectForCharacterRangeAsync(const EditingRange& range, std::function<void (const WebCore::IntRect&, const EditingRange&, CallbackBase::Error)> callbackFunction) 4980 { 5003 4981 if (!isValid()) { 5004 callback->invalidate(); 5005 return; 5006 } 5007 5008 uint64_t callbackID = callback->callbackID(); 5009 m_callbacks.put(callback); 5010 5011 process().send(Messages::WebPage::CharacterIndexForPointAsync(point, callbackID), m_pageID); 5012 } 5013 5014 void WebPageProxy::firstRectForCharacterRangeAsync(const EditingRange& range, std::function<void (const WebCore::IntRect&, const EditingRange&, CallbackBase::Error)> callbackFunction) 5015 { 5016 RefPtr<RectForCharacterRangeCallback> callback = RectForCharacterRangeCallback::create(std::move(callbackFunction)); 5017 5018 if (!isValid()) { 5019 callback->invalidate(); 5020 return; 5021 } 5022 5023 uint64_t callbackID = callback->callbackID(); 5024 m_callbacks.put(callback); 5025 4982 callbackFunction(WebCore::IntRect(), EditingRange(), CallbackBase::Error::Unknown); 4983 return; 4984 } 4985 4986 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 5026 4987 process().send(Messages::WebPage::FirstRectForCharacterRangeAsync(range, callbackID), m_pageID); 5027 4988 } … … 5050 5011 void WebPageProxy::takeSnapshot(IntRect rect, IntSize bitmapSize, SnapshotOptions options, std::function<void (const ShareableBitmap::Handle&, CallbackBase::Error)> callbackFunction) 5051 5012 { 5052 RefPtr<ImageCallback> callback = ImageCallback::create(std::move(callbackFunction));5053 5054 5013 if (!isValid()) { 5055 callback->invalidate(); 5056 return; 5057 } 5058 5059 uint64_t callbackID = callback->callbackID(); 5060 m_callbacks.put(callback); 5061 5014 callbackFunction(ShareableBitmap::Handle(), CallbackBase::Error::Unknown); 5015 return; 5016 } 5017 5018 uint64_t callbackID = m_callbacks.put(std::move(callbackFunction)); 5062 5019 m_process->send(Messages::WebPage::TakeSnapshot(rect, bitmapSize, options, callbackID), m_pageID); 5063 5020 }
Note: See TracChangeset
for help on using the changeset viewer.