Index: webkit/glue/devtools/debugger_agent_impl.cc |
=================================================================== |
--- webkit/glue/devtools/debugger_agent_impl.cc (revision 14719) |
+++ webkit/glue/devtools/debugger_agent_impl.cc (working copy) |
@@ -9,10 +9,9 @@ |
#include <wtf/Vector.h> |
#include "Document.h" |
-#include "Frame.h" |
#include "Node.h" |
#include "Page.h" |
-#include "PageGroup.h" |
+#include "PageGroupLoadDeferrer.h" |
#undef LOG |
#include "grit/webkit_resources.h" |
@@ -29,10 +28,9 @@ |
using WebCore::DOMWindow; |
using WebCore::Document; |
-using WebCore::Frame; |
using WebCore::Node; |
using WebCore::Page; |
-using WebCore::PageGroup; |
+using WebCore::PageGroupLoadDeferrer; |
using WebCore::String; |
using WebCore::V8ClassIndex; |
using WebCore::V8Custom; |
@@ -144,59 +142,24 @@ |
void DebuggerAgentImpl::RunWithDeferredMessages( |
const HashSet<DebuggerAgentImpl*>& agents, |
WebDevToolsAgent::MessageLoopDispatchHandler handler) { |
- |
- // TODO(pfeldman): Make PageGroupLoadDeferrer visible and use it from here. |
- // Code below is derived from the Chrome.cpp's PageGroupLoadDeferrer: |
+ Vector<PageGroupLoadDeferrer*> deferrers; |
// 1. Disable active objects and input events. |
- Vector<RefPtr<Frame>, 16> deferred_frames; |
for (HashSet<DebuggerAgentImpl*>::const_iterator ag_it = agents.begin(); |
ag_it != agents.end(); ++ag_it) { |
DebuggerAgentImpl* agent = *ag_it; |
+ deferrers.append(new PageGroupLoadDeferrer(agent->GetPage(), true)); |
agent->web_view()->SetIgnoreInputEvents(true); |
- const HashSet<Page*>& pages = agent->GetPage()->group().pages(); |
- HashSet<Page*>::const_iterator end = pages.end(); |
- for (HashSet<Page*>::const_iterator it = pages.begin(); it != end; ++it) { |
- Page* other_page = *it; |
- if (!other_page->defersLoading()) { |
- deferred_frames.append(other_page->mainFrame()); |
-#if !PLATFORM(MAC) |
- for (Frame* frame = other_page->mainFrame(); frame; |
- frame = frame->tree()->traverseNext()) { |
- frame->document()->suspendActiveDOMObjects(); |
- } |
-#endif |
- } |
- } |
} |
- // 2. Disable loading. |
- size_t count = deferred_frames.size(); |
- for (size_t i = 0; i < count; ++i) { |
- if (Page* page = deferred_frames[i]->page()) { |
- page->setDefersLoading(true); |
- } |
- } |
- // 3. Process messages. |
+ // 2. Process messages. |
handler(); |
- // 4. Bring things back. |
- for (size_t i = 0; i < deferred_frames.size(); ++i) { |
- if (Page* page = deferred_frames[i]->page()) { |
- page->setDefersLoading(false); |
- |
-#if !PLATFORM(MAC) |
- for (Frame* frame = page->mainFrame(); frame; frame = |
- frame->tree()->traverseNext()) { |
- frame->document()->resumeActiveDOMObjects(); |
- } |
-#endif |
- } |
- } |
- |
+ // 3. Bring things back. |
for (HashSet<DebuggerAgentImpl*>::const_iterator ag_it = agents.begin(); |
ag_it != agents.end(); ++ag_it) { |
(*ag_it)->web_view()->SetIgnoreInputEvents(false); |
} |
+ deleteAllValues(deferrers); |
} |
WebCore::Page* DebuggerAgentImpl::GetPage() { |