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