| 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() {
|
|
|