1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochdef GetScriptToWaitForUnchangingDOM():
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  """Gets Javascript that waits until the DOM is stable for 5 seconds.
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Times out if the DOM is not stable within 30 seconds.
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Returns:
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Javascript as a string.
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  """
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return """
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    var target = document.body;
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    var callback = arguments[arguments.length - 1]
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    var timeout_id = setTimeout(function() {
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      callback()
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    }, 5000);
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    var observer = new MutationObserver(function(mutations) {
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      clearTimeout(timeout_id);
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      timeout_id = setTimeout(function() {
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        callback();
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      }, 5000);
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    }).observe(target, {attributes: true, childList: true,
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      characterData: true, subtree: true});
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  """
30