15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The background page is asking us to find an address on the page.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (window == top) {
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.extension.onRequest.addListener(function(req, sender, sendResponse) {
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sendResponse(findAddress());
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Search the text nodes for a US-style mailing address.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return null if none is found.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var findAddress = function() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var found;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var re = /(\d+\s+[':.,\s\w]*,\s*[A-Za-z]+\s*\d{5}(-\d{4})?)/m;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var node = document.body;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var done = false;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (!done) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    done = true;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var i = 0; i < node.childNodes.length; ++i) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var child = node.childNodes[i];
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (child.textContent.match(re)) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        node = child;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        found = node;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        done = false;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (found) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var text = "";
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (found.childNodes.length) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < found.childNodes.length; ++i) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        text += found.childNodes[i].textContent + " ";
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      text = found.textContent;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var match = re.exec(text);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (match && match.length) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      console.log("found: " + match[0]);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var trim = /\s{2,}/g;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return match[0].replace(trim, " ");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      console.log("bad initial match: " + found.textContent);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      console.log("no match in: " + text);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return null;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53