| Index: chrome/common/extensions/docs/examples/howto/contentscript_xhr/contentscript.js | 
| diff --git a/chrome/common/extensions/docs/examples/howto/contentscript_xhr/contentscript.js b/chrome/common/extensions/docs/examples/howto/contentscript_xhr/contentscript.js | 
| index 1719d8a91f4bb1d2f3c4d6fb1d3c79356d348009..33235e08cfe2a50020a16876a1a8fc812a8d97e0 100644 | 
| --- a/chrome/common/extensions/docs/examples/howto/contentscript_xhr/contentscript.js | 
| +++ b/chrome/common/extensions/docs/examples/howto/contentscript_xhr/contentscript.js | 
| @@ -1,44 +1,69 @@ | 
| /* | 
| - * Copyright (c) 2010 The Chromium Authors. All rights reserved.  Use of this | 
| - * source code is governed by a BSD-style license that can be found in the | 
| - * LICENSE file. | 
| +* Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| +* Use of this source code is governed by a BSD-style license that can be | 
| +* found in the LICENSE file. | 
| +*/ | 
| + | 
| +/** | 
| + * Performs an XMLHttpRequest to Twitter's API to get trending topics. | 
| + * | 
| + * @param callback Function If the response from fetching url has a | 
| + *     HTTP status of 200, this function is called with a JSON decoded | 
| + *     response.  Otherwise, this function is called with null. | 
| */ | 
| +function fetchTwitterFeed(callback) { | 
| +  var xhr = new XMLHttpRequest(); | 
| +  xhr.onreadystatechange = function(data) { | 
| +    if (xhr.readyState == 4) { | 
| +      if (xhr.status == 200) { | 
| +        var data = JSON.parse(xhr.responseText); | 
| +        callback(data); | 
| +      } else { | 
| +        callback(null); | 
| +      } | 
| +    } | 
| +  } | 
| +  // Note that any URL fetched here must be matched by a permission in | 
| +  // the manifest.json file! | 
| +  var url = 'https://api.twitter.com/1/trends.json?exclude=hashtags'; | 
| +  xhr.open('GET', url, true); | 
| +  xhr.send(); | 
| +}; | 
|  | 
| /** | 
| * Parses text from Twitter's API and generates a bar with trending topics at | 
| * the top of the current page | 
| + * | 
| * @param data Object JSON decoded response.  Null if the request failed. | 
| */ | 
| function onText(data) { | 
| // Only render the bar if the data is parsed into a format we recognize. | 
| if (data.trends) { | 
| -    var trend_names = [] | 
| -    for (var date in data.trends) { | 
| -      if (data.trends.hasOwnProperty(date)) { | 
| -        var trends = data.trends[date]; | 
| -        for (var i=0,trend; trend = trends[i]; i++) { | 
| -          trend_names.push(trend.name); | 
| -        } | 
| -      } | 
| -    } | 
| - | 
| // Create the overlay at the top of the page and fill it with data. | 
| var trends_dom = document.createElement('div'); | 
| var title_dom = document.createElement('strong'); | 
| -    var text_dom = document.createTextNode(trend_names.join(', ')); | 
| -    title_dom.innerText = 'Topics currently trending on Twitter '; | 
| +    title_dom.innerText = 'Topics currently trending on Twitter:'; | 
| trends_dom.appendChild(title_dom); | 
| -    trends_dom.appendChild(text_dom); | 
| -    trends_dom.style.background = '#36b'; | 
| -    trends_dom.style.color = '#fff'; | 
| -    trends_dom.style.padding = '10px'; | 
| -    trends_dom.style.position = 'relative'; | 
| -    trends_dom.style.zIndex = '123456'; | 
| -    trends_dom.style.font = '14px Arial'; | 
| -    document.body.insertBefore(trends_dom, document.body.firstChild); | 
| +    for (var i=0,trend; trend = data.trends[i]; i++) { | 
| +      var link_dom = document.createElement('a'); | 
| +      link_dom.setAttribute('href', trend.url) | 
| +      link_dom.innerText = trend.name; | 
| +      link_dom.style.color = '#000'; | 
| +      trends_dom.appendChild(document.createTextNode(' ')); | 
| +      trends_dom.appendChild(link_dom); | 
| +    } | 
| +    trends_dom.style.cssText = [ | 
| +      'background-color: #ffd700;', | 
| +      'background-image: -webkit-repeating-linear-gradient(' + | 
| +          '45deg, transparent, transparent 35px,' + | 
| +          'rgba(0,0,0,.1) 35px, rgba(0,0,0,.1) 70px);', | 
| +      'color: #000;', | 
| +      'padding: 10px;', | 
| +      'font: 14px Arial;' | 
| +    ].join(' '); | 
| +    document.body.style.cssText = 'position: relative'; | 
| +    document.body.parentElement.insertBefore(trends_dom, document.body); | 
| } | 
| }; | 
|  | 
| -// Send a request to fetch data from Twitter's API to the background page. | 
| -// Specify that onText should be called with the result. | 
| -chrome.extension.sendRequest({'action' : 'fetchTwitterFeed'}, onText); | 
| +fetchTwitterFeed(onText); | 
|  |