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