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

Unified Diff: webkit/glue/webframe_impl.cc

Issue 335019: Replace MessageLoop+ScopedRunnableMethodFactory with WebCore::Timer+Vector... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/webframe_impl.h ('k') | webkit/glue/webview_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/webframe_impl.cc
===================================================================
--- webkit/glue/webframe_impl.cc (revision 29946)
+++ webkit/glue/webframe_impl.cc (working copy)
@@ -128,7 +128,6 @@
#include <wtf/CurrentTime.h>
#undef LOG
-#include "base/message_loop.h"
#include "webkit/api/public/WebConsoleMessage.h"
#include "webkit/api/public/WebFindOptions.h"
#include "webkit/api/public/WebForm.h"
@@ -189,6 +188,7 @@
using WebCore::String;
using WebCore::SubstituteData;
using WebCore::TextIterator;
+using WebCore::Timer;
using WebCore::VisiblePosition;
using WebCore::XPathResult;
@@ -348,8 +348,42 @@
return loader ? WebDataSourceImpl::fromDocumentLoader(loader) : NULL;
}
+
// WebFrame -------------------------------------------------------------------
+class WebFrameImpl::DeferredScopeStringMatches {
+ public:
+ DeferredScopeStringMatches(WebFrameImpl* webframe,
+ int identifier,
+ const WebString& search_text,
+ const WebFindOptions& options,
+ bool reset)
+ : timer_(this, &DeferredScopeStringMatches::DoTimeout),
+ webframe_(webframe),
+ identifier_(identifier),
+ search_text_(search_text),
+ options_(options),
+ reset_(reset) {
+ timer_.startOneShot(0.0);
+ }
+
+ private:
+ void DoTimeout(Timer<DeferredScopeStringMatches>*) {
+ webframe_->CallScopeStringMatches(
+ this, identifier_, search_text_, options_, reset_);
+ }
+
+ Timer<DeferredScopeStringMatches> timer_;
+ RefPtr<WebFrameImpl> webframe_;
+ int identifier_;
+ WebString search_text_;
+ WebFindOptions options_;
+ bool reset_;
+};
+
+
+// WebFrame -------------------------------------------------------------------
+
// static
WebFrame* WebFrame::frameForEnteredContext() {
Frame* frame =
@@ -1227,14 +1261,11 @@
main_frame_impl->frames_scoping_count_++;
// Now, defer scoping until later to allow find operation to finish quickly.
- // TODO(darin): Replace with a WebCore Timer.
- MessageLoop::current()->PostTask(FROM_HERE,
- scope_matches_factory_.NewRunnableMethod(
- &WebFrameImpl::scopeStringMatches,
- request_id,
- search_text,
- options,
- false)); // false=we just reset, so don't do it again.
+ ScopeStringMatchesSoon(
+ request_id,
+ search_text,
+ options,
+ false); // false=we just reset, so don't do it again.
return;
}
@@ -1366,15 +1397,11 @@
InvalidateIfNecessary();
// Scoping effort ran out of time, lets ask for another time-slice.
- // TODO(darin): Replace with a WebCore Timer.
- MessageLoop::current()->PostTask(FROM_HERE,
- scope_matches_factory_.NewRunnableMethod(
- &WebFrameImpl::scopeStringMatches,
- request_id,
- search_text,
- options,
- false)); // don't reset.
-
+ ScopeStringMatchesSoon(
+ request_id,
+ search_text,
+ options,
+ false); // don't reset.
return; // Done for now, resume work later.
}
@@ -1393,7 +1420,9 @@
}
void WebFrameImpl::cancelPendingScopingEffort() {
- scope_matches_factory_.RevokeAll();
+ deleteAllValues(deferred_scoping_work_);
+ deferred_scoping_work_.clear();
+
active_match_index_ = -1;
}
@@ -1457,7 +1486,6 @@
WebFrameImpl::WebFrameImpl(PassRefPtr<ClientHandle> client_handle)
: ALLOW_THIS_IN_INITIALIZER_LIST(frame_loader_client_(this)),
- ALLOW_THIS_IN_INITIALIZER_LIST(scope_matches_factory_(this)),
client_handle_(client_handle),
active_match_frame_(NULL),
active_match_index_(-1),
@@ -1823,6 +1851,24 @@
return true;
}
+void WebFrameImpl::ScopeStringMatchesSoon(
+ int identifier, const WebString& search_text,
+ const WebFindOptions& options, bool reset) {
+ deferred_scoping_work_.append(new DeferredScopeStringMatches(
+ this, identifier, search_text, options, reset));
+}
+
+void WebFrameImpl::CallScopeStringMatches(
+ DeferredScopeStringMatches* caller, int identifier,
+ const WebString& search_text, const WebFindOptions& options, bool reset) {
+ deferred_scoping_work_.remove(deferred_scoping_work_.find(caller));
+
+ scopeStringMatches(identifier, search_text, options, reset);
+
+ // This needs to happen last since search_text is passed by reference.
+ delete caller;
+}
+
void WebFrameImpl::InvalidateIfNecessary() {
if (last_match_count_ > next_invalidate_after_) {
// TODO(finnur): (http://b/1088165) Optimize the drawing of the
« no previous file with comments | « webkit/glue/webframe_impl.h ('k') | webkit/glue/webview_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698