Index: content/shell/browser/layout_test/blink_test_controller.cc |
diff --git a/content/shell/browser/layout_test/blink_test_controller.cc b/content/shell/browser/layout_test/blink_test_controller.cc |
index 15d0f3911ae9f8b50eb2347d08a60c1afaa0ac83..b823e7feca30e350616fffe5cc4b047db8479efd 100644 |
--- a/content/shell/browser/layout_test/blink_test_controller.cc |
+++ b/content/shell/browser/layout_test/blink_test_controller.cc |
@@ -7,6 +7,7 @@ |
#include <stddef.h> |
#include <iostream> |
+#include <set> |
#include <utility> |
#include "base/base64.h" |
@@ -20,7 +21,6 @@ |
#include "base/strings/stringprintf.h" |
#include "base/thread_task_runner_handle.h" |
#include "build/build_config.h" |
-#include "components/test_runner/layout_dump_flags.h" |
#include "content/public/browser/devtools_agent_host.h" |
#include "content/public/browser/dom_storage_context.h" |
#include "content/public/browser/gpu_data_manager.h" |
@@ -269,6 +269,7 @@ bool BlinkTestController::PrepareForLayoutTest( |
printer_->reset(); |
frame_to_layout_dump_map_.clear(); |
render_process_host_observer_.RemoveAll(); |
+ accumulated_layout_dump_flags_changes_.Clear(); |
ShellBrowserContext* browser_context = |
ShellContentBrowserClient::Get()->browser_context(); |
if (test_url.spec().find("compositing/") != std::string::npos) |
@@ -440,6 +441,8 @@ bool BlinkTestController::OnMessageReceived( |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(BlinkTestController, message, |
render_frame_host) |
+ IPC_MESSAGE_HANDLER(ShellViewHostMsg_LayoutDumpFlagsChanged, |
+ OnLayoutDumpFlagsChanged) |
IPC_MESSAGE_HANDLER(ShellViewHostMsg_LayoutDumpResponse, |
OnLayoutDumpResponse) |
IPC_MESSAGE_UNHANDLED(handled = false) |
@@ -597,7 +600,7 @@ void BlinkTestController::HandleNewRenderFrameHost(RenderFrameHost* frame) { |
if (did_send_initial_test_configuration_) { |
frame->Send(new ShellViewMsg_ReplicateTestConfiguration( |
- frame->GetRoutingID(), params)); |
+ frame->GetRoutingID(), params, accumulated_layout_dump_flags_changes_)); |
} else { |
did_send_initial_test_configuration_ = true; |
frame->Send( |
@@ -667,11 +670,36 @@ void BlinkTestController::OnTextDump(const std::string& dump) { |
printer_->PrintTextFooter(); |
} |
-void BlinkTestController::OnInitiateLayoutDump( |
- const test_runner::LayoutDumpFlags& layout_dump_flags) { |
- DCHECK(layout_dump_flags.dump_child_frames()); |
+void BlinkTestController::OnInitiateLayoutDump() { |
pending_layout_dumps_ = main_window_->web_contents()->SendToAllFrames( |
- new ShellViewMsg_LayoutDumpRequest(MSG_ROUTING_NONE, layout_dump_flags)); |
+ new ShellViewMsg_LayoutDumpRequest(MSG_ROUTING_NONE)); |
+} |
+ |
+void BlinkTestController::OnLayoutDumpFlagsChanged( |
+ RenderFrameHost* sender, |
+ const base::DictionaryValue& changed_layout_dump_flags) { |
+ // Stash the changes for future renderers. |
+ accumulated_layout_dump_flags_changes_.MergeDictionary( |
+ &changed_layout_dump_flags); |
+ |
+ // Only need to send the propagation message once per renderer process. |
+ std::set<int> already_covered_process_ids; |
+ |
+ // No need to propagate the changes back to the process that originated them. |
+ // (propagating them back could also clobber subsequent changes in the |
+ // originator). |
+ already_covered_process_ids.insert(sender->GetProcess()->GetID()); |
+ |
+ // Propagate the changes to all the renderer processes associated with the |
+ // main window. |
+ for (RenderFrameHost* frame : main_window_->web_contents()->GetAllFrames()) { |
+ bool inserted_new_item = |
+ already_covered_process_ids.insert(frame->GetProcess()->GetID()).second; |
+ if (inserted_new_item) { |
+ frame->Send(new ShellViewMsg_ReplicateLayoutDumpFlagsChanges( |
+ frame->GetRoutingID(), changed_layout_dump_flags)); |
+ } |
+ } |
} |
void BlinkTestController::OnLayoutDumpResponse(RenderFrameHost* sender, |