blob: 15dc8f12181dc19e9b765590fef5dc1abf668467 [file]
{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearch/1.1/","xmlns$batch":"http://schemas.google.com/gdata/batch","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$gAcl":"http://schemas.google.com/acl/2007","xmlns$gs":"http://schemas.google.com/spreadsheets/2006","xmlns$thr":"http://purl.org/syndication/thread/1.0","xmlns$sites":"http://schemas.google.com/sites/2008","xmlns$dc":"http://purl.org/dc/terms","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev"},"updated":{"$t":"2021-09-16T14:50:32.970Z"},"title":{"$t":"Content"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"next","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d3001\u0026max-results\u003d500"},{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"http://schemas.google.com/g/2005#post","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev"},{"rel":"http://schemas.google.com/g/2005#batch","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/batch"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d2501\u0026max-results\u003d500"},{"rel":"previous","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev?alt\u003djson\u0026start-index\u003d2000\u0026max-results\u003d501"}],"generator":{"version":"1","uri":"https://sites.google.com","$t":"Google Sites"},"openSearch$startIndex":{"$t":"2501"},"openSearch$itemsPerPage":{"$t":"500"},"entry":[{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5278017466506944670"},"published":{"$t":"2011-04-01T23:02:01.261Z"},"updated":{"$t":"2011-04-01T23:02:01.290Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-04-01T23:02:01.261Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#comment","label":"comment"}],"title":{"$t":""},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003eWindow is not a subclass of WidgetWin. Maybe WindowWin is meant?\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5077298636011219464"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5278017466506944670"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5278017466506944670"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5278017466506944670"}],"author":[{"name":{"$t":"Roy Hashimoto"},"email":{"$t":"rhashimoto@chromium.org"}}],"thr$in-reply-to":{"href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/chromeviews","ref":"https://sites.google.com/feeds/content/chromium.org/dev/5077298636011219464","source":"https://sites.google.com/feeds/content/chromium.org/dev","type":"text/html"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/540154804242656072"},"published":{"$t":"2011-04-01T19:03:03.943Z"},"updated":{"$t":"2011-04-01T19:03:03.957Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-04-01T19:03:03.943Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-04-01 at 11.59.21 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/540154804242656072"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/969660262670796398"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.21%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/540154804242656072"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/540154804242656072"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/540154804242656072"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/540154804242656072"}],"author":[{"name":{"$t":"Nico Weber"},"email":{"$t":"thakis@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1066528051636826737"},"published":{"$t":"2011-04-01T19:02:26.639Z"},"updated":{"$t":"2011-04-01T19:02:26.648Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-04-01T19:02:26.639Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-04-01 at 11.59.12 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1066528051636826737"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/969660262670796398"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.12%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1066528051636826737"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1066528051636826737"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1066528051636826737"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1066528051636826737"}],"author":[{"name":{"$t":"Nico Weber"},"email":{"$t":"thakis@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1680950381427922217"},"published":{"$t":"2011-04-01T18:59:50.922Z"},"updated":{"$t":"2011-04-01T18:59:50.932Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-04-01T18:59:50.922Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-04-01 at 11.57.03 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1680950381427922217"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/969660262670796398"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.57.03%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1680950381427922217"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1680950381427922217"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1680950381427922217"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1680950381427922217"}],"author":[{"name":{"$t":"Nico Weber"},"email":{"$t":"thakis@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6982147153630243279"},"published":{"$t":"2011-04-01T18:53:34.819Z"},"updated":{"$t":"2011-04-01T18:53:34.834Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-04-01T18:53:34.819Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-04-01 at 11.52.02 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6982147153630243279"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/969660262670796398"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.52.02%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6982147153630243279"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6982147153630243279"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6982147153630243279"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6982147153630243279"}],"author":[{"name":{"$t":"Nico Weber"},"email":{"$t":"thakis@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6102485772576599646"},"published":{"$t":"2011-03-29T23:51:38.060Z"},"updated":{"$t":"2011-03-31T17:47:56.851Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-31T17:47:56.849Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":""},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/gpu-wrangling\"\u003eGPU Pixel Wrangling\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2433140667124192106"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/gpu-gardening"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6102485772576599646"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6102485772576599646"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6102485772576599646"}],"author":[{"name":{"$t":"Mihai Parparita"},"email":{"$t":"mihaip@chromium.org"}}],"sites$pageName":{"$t":"gpu-gardening"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4500574291936123827"},"published":{"$t":"2011-03-31T17:38:50.266Z"},"updated":{"$t":"2011-03-31T17:38:50.304Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-31T17:38:50.266Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"wrangler.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4500574291936123827"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8649171594513493687"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/gpu-wrangling/wrangler.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4500574291936123827"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4500574291936123827"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4500574291936123827"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4500574291936123827"}],"author":[{"name":{"$t":"Vincent Scheib"},"email":{"$t":"scheib@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7027868829390656936"},"published":{"$t":"2011-03-30T20:18:49.290Z"},"updated":{"$t":"2011-03-30T21:28:01.849Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-30T21:28:01.848Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Widget Refactor"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h3\u003e\u003cdiv\u003eA view hierarchy is hosted by a views::Widget subclass. This subclass (e.g. WidgetWin or WidgetGtk) receives native events from the operating system, cracks them into views-specific types and propagates them into the view hierarchy.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe current arrangement poses some challenges that make porting to a new native toolkit problematic:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe native Widget implementations are very thick. There is a lot of duplicated code that makes fixing bugs cumbersome.\u003c/li\u003e\u003cli\u003eSwapping native Widget implementations is problematic because they are stateful. The state is meaningful and may not have good analogs in other implementations.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h3\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003esdfsdf\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/widget-refactor"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7027868829390656936"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7027868829390656936"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7027868829390656936"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$pageName":{"$t":"widget-refactor"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/786519183783629143"},"published":{"$t":"2011-03-24T17:47:19.772Z"},"updated":{"$t":"2011-03-25T20:42:18.981Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-25T04:21:49.105Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"nameservice"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eNAME\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eNaClNameServiceGetRoot, NaClNameServiceChannel, NaClNameServiceResolve -- look up names in namespaces\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eSYNOPSIS\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e#include \u0026lt;stdint.h\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-family:courier new,monospace\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e#include \u0026lt;fcntl.h\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e#include \u0026lt;nacl/nameservice.h\u0026gt;\u003c/font\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t NaClNameServiceGetRoot(void);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid NaClNameServiceClose(int32_t service);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t NaClNameServiceChannel(int32_t service);\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid NaClNameServiceChannelClose(int32_t channel);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t NaClNameServiceResolve(int32_t channel, char const *name, int32_t flags, int32_t mode);\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esize_t NaClNameServiceEnumerate(int32_t channel, char *buffer, size_t nbytes);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003evoid NaClNameServiceChannelAsyncThread(int32_t channel);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t NaClNameServiceResolveAsync(int32_t channel, char const *name, int32_t flags, int32_t mode, void (*callback)(void *state, int32_t desc, int32_t errno), void *state);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t NaClNameServiceEnumerateAsync(int32_t channel, char *buffer, size_t nbytes, void (*callback)(void *state, size_t written), void *state);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eDESCRIPTION\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003eThe name service interface provides a general mechanism to resolve names, mapping a NUL-terminated character string to an I/O descriptor.  Resolution may result in descriptors that represent files, name resolvers for lower-level namespaces, and, in the future, device interfaces such as video cameras or joysticks.  Initial namespaces that can be reached from the \"root\" namespaces are manifest files, WebFS persistent files, WebFS temporary files, and files included with the standard Native Client runtime.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceGetRoot()\u003c/font\u003e returns a \"root\" name service which every Native Client module is created with. This name service identity is used to create name service channels using which name resolution can occur, using \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceChannel()\u003c/font\u003e.  Each Native Client module may create multiple name service channels, e.g., one per thread or to form a channel pool that grows as needed.  Each channel may be used for only one synchronous resolution operation at a time, and it is up to the Native Client module to ensure that this holds.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAs an alternative to using the synchronous API, \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e may be used instead.  Before \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e is used, the caller must spawn a thread and invoke \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceChannelAsyncThread\u003c/font\u003e, which will only return when the channel is closed.  Here, the name service will invoke \u003cfont face\u003d\"'courier new', monospace\"\u003ecallback\u003c/font\u003e with the result \u003cfont face\u003d\"'courier new', monospace\"\u003edesc\u003c/font\u003e -- which, on an error, will be -1, so the callback is guaranteed to be called exactly once -- once a result is available.  The \u003cfont face\u003d\"'courier new', monospace\"\u003ecallback\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e/\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estate\u003c/font\u003e functor will be invoked on a separate thread, and it is the responsibility of the NaCl module provided callback functor to process the result in a thread-safe manner.  Multiple \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e may be invoked on the same channel.  However, the maximum number of \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e operations actually allowed in flight is not specified, and the order of callbacks may occur in any order.  If the callback is invoked with the \u003cfont face\u003d\"'courier new', monospace\"\u003edesc\u003c/font\u003e argument equal to -1, the \u003cfont face\u003d\"'courier new', monospace\"\u003eerrno\u003c/font\u003e argument will have a meaningful value.  If the maximum number of in-flight asynchronous name resolutions is exceeded, \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e returns -1, and the caller may retry later, e.g., when a callback is invoked; otherwise \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e returns 0 to indicate that the callback will fire, or may have fired.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003ename\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eflags\u003c/font\u003e, and \u003cfont face\u003d\"'courier new', monospace\"\u003emode\u003c/font\u003e arguments for \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolve\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolveAsync\u003c/font\u003e are essentially that of the familiar POSIX \u003cfont face\u003d\"'courier new', monospace\"\u003eopen(2)\u003c/font\u003e call, with the following differences:  \u003cfont face\u003d\"'courier new', monospace\"\u003eflags\u003c/font\u003e may contain, instead of the usual \u003cfont face\u003d\"'courier new', monospace\"\u003eO_RDONLY\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eO_RDWR\u003c/font\u003e, etc, values defined in \u003cfont face\u003d\"'courier new', monospace\"\u003efcntl.h\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eO_NAMESERVICE\u003c/font\u003e.  When resolving a name with \u003cfont face\u003d\"'courier new', monospace\"\u003eO_NAMESERVICE\u003c/font\u003e, the mode argument is ignored.  If the resolution succeeds, the return value is a name service, which may in turn be used with \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceChannel\u003c/font\u003e.  If the resolution fails, \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceResolve\u003c/font\u003e returns -1 and the thread-local variable \u003cfont face\u003d\"'courier new', monospace\"\u003eerrno\u003c/font\u003e is set to indicate the reason for failure.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo enumerate all names at a name service, use \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceEnumerate\u003c/font\u003e or \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceEnumerateAsync\u003c/font\u003e.  The supplied \u003cfont face\u003d\"'courier new', monospace\"\u003ebuffer\u003c/font\u003e is overwritten with at most \u003cfont face\u003d\"'courier new', monospace\"\u003enbytes\u003c/font\u003e of NUL-terminate string names, and the actual number of bytes written is returned, in the case of \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceEnumerate\u003c/font\u003e; or is supplied as the \u003cfont face\u003d\"'courier new', monospace\"\u003ewritten\u003c/font\u003e input argument of the completion callback functor \u003cfont face\u003d\"'courier new', monospace\"\u003ecallback\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e/\u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estate\u003c/font\u003e, in the case of \u003cfont face\u003d\"'courier new', monospace\"\u003eNaClNameServiceEnumerateAsync\u003c/font\u003e.  NB: If \u003cfont face\u003d\"'courier new', monospace\"\u003ewritten \u0026lt; nbytes\u003c/font\u003e, then all names in the namespace were returned.  Some name services, e.g., those associated with file systems, may permit the opening of directories as name services.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAll I/O operations using I/O descriptors returned by name services will cause the caller to block until the operation succeeds, unless the NaCl thread synchronous I/O restriction is in force; in this case, the I/O restricted thread(s) will not be able to perform I/O operations unless explicitly enabled:  such operations will result in \u003cfont face\u003d\"'courier new', monospace\"\u003eEWOULDBLOCK\u003c/font\u003e. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDo not use both the asynchronous and synchronous resolution interfaces, even in a temporally disjoint manner.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cb\u003eEXAMPLES\u003c/b\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t root_nameservice \u003d NaClNameServiceGetRoot();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t root_ns_channel \u003d NaClNameServiceChannel(root_nameservice);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t web_fs_nameservice \u003d NaClNameServiceResolve(root_ns_channel, \"WebFsPersistentStore\", O_NAMESERVICE, 0);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t manifest_nameservice \u003d NaClNameServiceResolve(root_ns_channel, \"ManifestFiles\", O_NAMESERVICE, 0);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint32_t fd \u003d NaClNameServiceResolve(manifest_nameservice, \"libsdl.so\", O_RDONLY, 0);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid *ResolverThread(void *state) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  NaClNameServiceAsyncThread((int32_t) (intptr_t) state);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  return NULL;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid ResolverCallback(void *state, int32_t desc, int32_t errno) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e   /* grab a lock, save desc somewhere, and signal a condvar */\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  struct ResolverCallbackState *info \u003d (struct ResolverCallbackState *) state;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  pthread_mutex_lock(\u0026amp;info-\u0026gt;mu);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  info-\u0026gt;desc \u003d desc; info-\u0026gt;errno \u003d errno;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  pthread_cond_broadcast(\u0026amp;info-\u0026gt;cv);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  pthread_mutex_unlock(\u0026amp;info-\u0026gt;mu);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003epthread_t tid;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estruct ResolverCallbackState *info \u003d ...;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003epthread_create(\u0026amp;tid, (pthread_attr_t) NULL, ResolverThread, web_fs_nameservice);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eif (0 !\u003d NaClNameServiceResolveAsync(web_fs_nameservice, \"/Nexuiz/SavedGame\", O_RDWR, 0, ResolverCallback, info)) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  /* failed */\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eSEE ALSO\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003eopen, close, read, write, fstat, iorestrict\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cb\u003eBUGS\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003estat-like call is missing; TBD.\u003c/div\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5663733556794389665"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/nameservice"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/786519183783629143"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/786519183783629143"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/786519183783629143"}],"author":[{}],"sites$pageName":{"$t":"nameservice"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7176258180684904086"},"published":{"$t":"2011-03-25T18:50:14.784Z"},"updated":{"$t":"2011-03-25T20:41:53.912Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-25T20:41:53.910Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"naming: issues and use cases"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eNaming is important for many reasons, among which are being able to precisely and unambiguously refer to an object, being able to flexibly add new objects to name spaces without causing problems, etc.  This document enumerates a few scenarios from DSO support that should be supported for NaCl application authors.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFirst, let us specify what (sub-) namespaces exist.  \"Shared object names\" or sonames are used by ld.so to refer to shared objects to be loaded, and the manifest file provides a mapping from short sonames to longer, less ambiguous names.  But what might application authors want to be able to refer to?  One class of file-like objects are web-hosted data.  The long name might be an URL or URI that resolves -- via HTTP -- to a sequence of bytes that happen to be a NaCl shared object.  Another class of file-like objects are pre-supplied shared libraries that are shipped with the NaCl distribution, e.g. libc.so.  A third class are files in WebFS -- perhaps the application downloaded and installed into WebFS persistent storage shared libraries that represent code used for certain game levels, say.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSuppose an application needs to use libpng.so, which depends on libc.so.  Initially, the NaCl distribution may not provide a libpng.so and only libc.so, and libpng.so might be mapped to a web-hosted file that would be handled by the app cache.  The following scenarios may occur:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eThe NaCl distribution add commonly-used libraries to reduce startup time.  Since a bundled version of libpng.so showed up in a new Chrome NaCl runtime release, the application author may decide to switch to the bundled version.  There should be a way to fall back, in case the application is running on an as-yet not updated version of Chrome NaCl runtime where the new bundled version of libpng is not available.\u003c/li\u003e\u003cli\u003eThe application author finds a bug or performance issue in the bundled version of libc, and substitutes a different version, so both libc.so and libpng.so are provided by a web-based resource or by WebFS persistent store.\u003c/li\u003e\u003cli\u003eThe application author provides his/her own version of libc, but decides to use the bundled version of libpng.\u003c/li\u003e\u003cli\u003eThe application also depends on and supplies as a web-hosted resource libpng_basics, and relies on the bundled version of libpng.  Later the NaCl distribution splits the bundled version of libpng into libpng and libpng_basics, where libpng depends on libpng_basics.  The two identically named libpng_basics.so are completely different libraries and are not compatible.  (This may be insoluble since the same soname is used.)\u003c/li\u003e\u003cli\u003eThe application relies on the bundled version of libc.so, which (transparently) depends on libnacl.so.  The application author builds a new, web-hosted library also named libnacl.so, creating a name conflct with the bundled library.  This is likely to be discovered in testing, unlike the libpng_basics scenario above; this is here for completeness: there might not be a way to transparently load internal libraries, since the sonames form a global name space.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003eThese use cases should be supported.  They might be automatic, or might require a manifest file change.  For the scenario of bundling commonly-used libraries, it is probably safe to assume that new versions can be safely added, and old version might either never be removed or be retired only after a long grace period.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSome goals:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eAdding bundled libraries should not break existing code.\u003c/li\u003e\u003cli\u003eApplication authors should be able to precisely name the libraries to use, so that there is a precise testing target.\u003c/li\u003e\u003cli\u003eApplication authors should be able to optionally allow their applications to use newer, ABI-compatible releases of a (bundled) library.\u003c/li\u003e\u003c/ol\u003eSome non-goals:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eProvide a per-library soname resolution order.\u003c/li\u003e\u003c/ul\u003ePotential solutions / solution components:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eExtend URL syntax so that a private protospec can be used to refer to bundled files, webfs files, etc.  This does not solve the sonames-are-a-global-namespace issue (4, 5).\u003c/li\u003e\u003cli\u003eProvide a library search path, so that the versioning fallback issue from (1) is avoided.  This should be done with care, since as noted in \u003ca href\u003d\"http://code.google.com/p/nativeclient/wiki/NameResolutionForDynamicLibraries\" target\u003d\"_blank\"\u003ehttp://code.google.com/p/nativeclient/wiki/NameResolutionForDynamicLibraries\u003c/a\u003e improper use of this can result in excess network traffic / roundtrips.\u003c/li\u003e\u003cli\u003eEncode in sonames whether an object is bundled version of a library, a WebFS-persistent store copy, or a manifest-mapped version.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/786519183783629143"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/nameservice/naming-issues----rationale"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7176258180684904086"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7176258180684904086"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7176258180684904086"}],"author":[{}],"sites$pageName":{"$t":"naming-issues----rationale"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7611479332793776756"},"published":{"$t":"2010-08-19T01:06:04.935Z"},"updated":{"$t":"2011-03-23T22:34:44.465Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-03-23T22:34:44.465Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Native Client Code Review and Check-in Process"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"background-color:transparent;font-size:medium\"\u003e\u003ch1 style\u003d\"font-family:Times\"\u003e\u003ca name\u003d\"TOC-Subteams\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:25px;white-space:pre-wrap\"\u003eSubteams\u003c/span\u003e\u003c/h1\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e1) Designate owners for that subteam.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2) Set policies for who can give LGTM for the modules owned by that subteam.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3) Once OWNERS is implemented, there may be an approval step required in addition to (2).\u003c/span\u003e\u003cbr /\u003e\u003ch2 style\u003d\"font-family:Times\"\u003e\u003ca name\u003d\"TOC-Authors\" /\u003e\u003cspan style\u003d\"font-size:18pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eAuthors\u003c/span\u003e\u003c/h2\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e0) Read the \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/nativeclient/styleguide\" style\u003d\"font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ecoding style document\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e1) Run cpplint.py, pylint, tidy, etc., as appropriate.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2) The change list comment should describe the change and whether it is a cosmetic change, a bug fix, or a new feature.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3) Make sure the CL is passing trybots before sending out for review.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e4) Pick reviewers that are familiar with the code in question. \u003c/span\u003e\u003cbr /\u003e\u003cp style\u003d\"text-indent:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ea) Pick more than one reviewer if the CL spans more than one module.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"text-indent:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eb) One LGTM per module touched is required.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"text-indent:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ec) (Multiple reviewer details to be worked out.)\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e5) All review requests should be sent to native-client-reviews@googlegroups.com.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e6) All “significant” CLs have a BUG\u003d line and an entry in the issue tracker.\u003c/span\u003e\u003cbr /\u003e\u003cp style\u003d\"margin-left:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ee.g., CLs that fix misspellings in comments or improve coding convention conformance are not bug-worthy, while fixing a crasher or adding a new PPAPI interface is.\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e7) All new code CLs have a TEST\u003d line and one or more tests that exercise the new code.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003ee.g., Changing comments does not require a test,  while adding a new system call does.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003eThe test should be specific enough that the reviewer can reproduce it.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e8) Don’t re-upload the CL until addressing all of the reviewers’ comments from an iteration.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003eExplicitly reply to comments in Rietveld.\u003c/span\u003e\u003cbr /\u003e\u003cp style\u003d\"text-indent:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e(Rietveld makes it difficult to ensure all the comments were addressed.)\u003c/span\u003e\u003c/p\u003e\u003ch2 style\u003d\"font-family:Times\"\u003e\u003ca name\u003d\"TOC-Code-reviewers\" /\u003e\u003cspan style\u003d\"font-size:18pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eCode reviewers\u003c/span\u003e\u003c/h2\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eEnsure\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e1) The CL conforms to the \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/nativeclient/styleguide\" style\u003d\"font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003eNaCl coding conventions\u003c/span\u003e\u003c/a\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2) The CL passed the trybots.  \u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3) The CL follows the designated author tasks above.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e4) You understand what the CL is doing and believe it is doing it correctly.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e5) Review iterations are completed within one business day or referred to another reviewer. \u003c/span\u003e\u003cbr /\u003e\u003cp style\u003d\"margin-left:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ea) Repeated issues may be elided and another iteration required.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-left:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eb) Large CLs may be broken into sub-reviews.\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-left:36pt;margin-top:0pt;margin-bottom:0pt;font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ec) We encourage sending comments or feedback early so as to pipeline the fixes.\u003c/span\u003e\u003c/p\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThe reviewer may summarily reject the CL if it doesn’t follow (2-3).\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eIf you LGTM a CL that breaks the build, you share responsibility for the break.\u003c/span\u003e\u003cbr /\u003e\u003ch2 style\u003d\"font-family:Times\"\u003e\u003ca name\u003d\"TOC-Sheriffs\" /\u003e\u003cspan style\u003d\"font-size:18pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:bold;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eSheriffs\u003c/span\u003e\u003c/h2\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e1) The first responsibility at all times is to keep the tree open. Even if that means going back to the last known good revision.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e2) Can summarily revoke CLs, and ask author or a reviewer(s) to do revocation.\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e3) For more details, see \u003c/span\u003e\u003ca href\u003d\"http://www.chromium.org/developers/tree-sheriffs\" style\u003d\"font-family:Times\"\u003e\u003cspan style\u003d\"font-size:11pt;font-family:Arial;color:rgb(0,0,153);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap\"\u003ehttp://www.chromium.org/developers/tree-sheriffs\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4416334781031344090"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/day-to-day/codereview"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7611479332793776756"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7611479332793776756"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7611479332793776756"}],"author":[{}],"sites$pageName":{"$t":"codereview"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1210899465304293873"},"published":{"$t":"2011-02-28T12:09:17.900Z"},"updated":{"$t":"2011-02-28T17:37:22.572Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-28T17:37:22.565Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"HTTP Authentication Throttling"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Problem-statement\" /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"4\"\u003eProblem statement\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eSome users get locked out of proxies or servers after entering an invalid username/password combination because Chrome will immediately reissue all pending requests with the same invalid credentials.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eTo prevent this from happening, only one request should be reissued. If authentication succeeds, all other pending requests can be reissued. If it fails, the user will be presented with another login prompt. If the request is cancelled, another pending request will be reissued.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eThe downside is that this will introduce an RTT penalty for the other pending requests. However, that penalty will likely be dwarfed by the time to enter username/password, and the penalty is severe enough that the cost is likely worth it.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eImplementation Choices\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003eThere are two general approaches for implementing this.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003ea) Do the throttling in the network stack, with no changes to the URLRequest delegates. All pending requests are reissued from the perspective of ResourceDispatcherHost and LoginHandler, but are queued someplace such as HttpAuthController::MaybeGenerateAuthToken [which can complete asynchronously], with the state residing in the HttpAuthCache::Entry. If the authentication request succeeds, all pending requests continue down the network stack. If it fails, pretend that all of the other requests also were rejected by the server or proxy and send a 401 or 407 back up the network stack using the same auth challenge as before.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eb) Do the throttling in the LoginHandler, and only restart one URLRequest. To make this happen, we'll need to change LoginHandler so there is one per (domain, scheme, realm) tuple instead of one per URLRequest, and add a LoginHandlerTable to do the discovery/creation. If the outstanding request succeeds, reissue all other pending requests. If it fails, re-show all possible dialogs [one per tab]. If it is cancelled, reissue another pending request or kill the LoginHandler if none remain.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eInitially a) seemed like a more attractive option. All users of the networking stack would be able to take advantage of the behavior without having to implement their own throttling mechanism. It's also less of a change: we already do grouping of (domain, scheme, realm) tuples in the HttpAuthCache and have a natural queuing location at HttpAuthController::MaybeGenerateAuthToken.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent;font-family:Times\"\u003e\u003cspan style\u003d\"font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eHowever, it has a number of issues which make it seem like the wrong approach:\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eIf authentication fails, and the user cancels authentication, the pending requests will not contain the correct body of the 401 or 407 response.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eThe NetLog and developer tools may show a number of requests which were not actually issued.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eIt's possible that not all consumers of the network stack want this behavior.\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial;white-space:pre-wrap\"\u003e\u003cfont size\u003d\"2\"\u003eOnly does throttling for HTTP, not FTP [not sure if this is good or bad].\u003c/font\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eAs a result, doing the throttling at the LoginHandler level makes more sense. It's also a more natural match for what's actually going on.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eLoginHandler throttling\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eInstead of one LoginHandler per request, there will be one LoginHandler per (domain, scheme, realm). A LoginHandlerDirectory will maintain a map of LoginHandler's and manage their lifetime, and the LoginHandlerDirectory will be owned by the ResourceDispatcherHost.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eThe LoginHandler interface will look like\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eclass LoginHandler {\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e public:\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Adds a request to be handled\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void AddRequest(URLRequest* request);\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Removes a request from being handled, done on cancellation.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void RemoveRequest(URLRequest* request);\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Called when the user provides auth credentials.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void OnCredentialsSupplied();\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Called when the user cancels entering auth credentials.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void OnUserCancel();\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Called when authentication succeeds on a request.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void OnAuthSucceeded(URLRequest* request);\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Called when authentication fails on a request.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e void OnAuthFailed(URLRequest* request);\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e // Called by LoginHandlerDirectory to see if it should free.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e bool IsEmpty() const;\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e};\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eThe LoginHandler is a state machine, with four states.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eWAITING_FOR_USER_INPUT\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eWAITING_FOR_USER_INPUT_COMPLETE\r\nTRYING_REQUEST\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eTRYING_REQUEST_COMPLETE\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003ewith perhaps a Nil or initialization state.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eAddRequest() will always queue the request, but it should not already be in the set of requests.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eIf RemoveRequest() is called while in the WAITING_FOR_USER_INPUT or WAITING_FOR_USER_INPUT_COMPLETE state, it will remove from the set and remove a dialog if it is the only request for a particular tab. It will also remove the LoginHandler if it is the last request. If in the TRYING_REQUEST or TRYING_REQUEST_COMPLETE state, the request is simply removed from the set if it is not the currently attempted request. If it is the currently attempted request, then TRYING_REQUEST is re-entered with a different request.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eOnCredentialsSupplied() must be called during WAITING_FOR_USER_INPUT and will transition to WAITING_FOR_USER_INPUT_COMPLETE. This will also choose a request to try and enter TRYING_REQUEST.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eOnUserCancel() must be called during WAITING_FOR_USER_INPUT and will transition to WAITING_FOR_USER_INPUT_COMPLETE. This will cancel auth on all of the pending requests and display the contents of the 401/407 body.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eOnAuthSucceeded() must be called during the TRYING_REQUEST state, and will transition to TRYING_REQUEST_COMPLETE. This will reissue all other pending requests and close out the LoginHandler.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eOnAuthFailed() must be called during the TRYING_REQUEST state, will enter TRYING_REQUEST_COMPLETE, and will go back to WAITING_FOR_USER_INPUT. The pending request is moved back to the main set of pending requests.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"4\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cb\u003eDelaying credential entering into HttpAuthCache\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cspan style\u003d\"font-size:15px;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eAlthough the LoginHandler changes described above will throttle most unconfirmed authentication requests, there is still the chance that some will get through.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eWhile the LoginHandler is in the TRYING_REQUEST state, the username/password are entered into the HttpAuthCache::Entry before hearing back from the server or proxy about whether the results are successful. Any other URLRequest's issued during this period of time will use the unconfirmed username/password.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eIf the credentials are entered on a successful response, then this problem goes away. ResourceDispatcherHost issued URLRequest's will likely fail, get a 401, and get added to the queue of pending requests in the appropriate LoginHandler. Other dispatched ones such as URLFetcher will simply fail.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eThere is a race I just thought about which might annoy owners, and I don't have a good answer for. Assume that there is an outstanding request A which is waiting to hear back from the proxy if the authentication succeeded. A second request B comes in, notices no username/password in the HttpAuthCache and so does not add preemptive authentication and issues a raw GET. Request A completes successfully, fills in the HttpAuthCache with the credentials, goes back to the LoginHandler, reissues all requests and closes the LoginHandler. Then, Request B returns from the proxy with a 407 response code, since it provided no Authorization header. Since the LoginHandler has been destroyed, a new one is created and the user is presented with a login prompt again.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cfont face\u003d\"Arial\" size\u003d\"2\"\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eOne way to fix that case is to add a PENDING state to the HttpAuthCache::Entry when Request A is issued, and removed when it hears back from the proxy. Request B will be stalled at the MaybeGenerateAuthToken state when the entry is pending, and adds itself to a list in the entry. When it completes, all issues are continued either using preemptive authentication with the credentials in the cache entry [if Request A succeeded] or issued with no credentials if Request A failed. That still may result in a race in the failure case, however.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;background-color:transparent\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2187609824886192973"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/http-authentication-throttling"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1210899465304293873"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1210899465304293873"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1210899465304293873"}],"author":[{"name":{"$t":"Chris Bentzel"},"email":{"$t":"cbentzel@chromium.org"}}],"sites$pageName":{"$t":"http-authentication-throttling"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3715215490461550493"},"published":{"$t":"2011-02-28T16:43:01.683Z"},"updated":{"$t":"2011-02-28T16:43:01.703Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-28T16:43:01.683Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Wicked flowchart.gif"},"summary":{},"content":{"type":"image/gif","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3715215490461550493"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5488964710350134003"},{"rel":"alternate","type":"image/gif","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/prerender/Wickedflowchart.gif"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3715215490461550493"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3715215490461550493"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3715215490461550493"},{"rel":"edit-media","type":"image/gif","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3715215490461550493"}],"author":[{"name":{"$t":"Chris Bentzel"},"email":{"$t":"cbentzel@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4998612175705979639"},"published":{"$t":"2011-02-18T16:44:27.432Z"},"updated":{"$t":"2011-02-18T16:44:27.444Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-18T16:44:27.432Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"HQP Search.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4998612175705979639"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/815622450236891865"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/omnibox-history-provider/HQP%20Search.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4998612175705979639"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4998612175705979639"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4998612175705979639"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4998612175705979639"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1247030811686889430"},"published":{"$t":"2011-02-16T23:49:55.908Z"},"updated":{"$t":"2011-02-16T23:49:55.934Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-16T23:49:55.908Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"HQP.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1247030811686889430"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/815622450236891865"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/omnibox-history-provider/HQP.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1247030811686889430"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1247030811686889430"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1247030811686889430"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1247030811686889430"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4534418464712904206"},"published":{"$t":"2011-02-16T23:45:50.548Z"},"updated":{"$t":"2011-02-16T23:45:50.553Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-16T23:45:50.548Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"HQP.tiff"},"summary":{},"content":{"type":"image/tiff","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4534418464712904206"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/815622450236891865"},{"rel":"alternate","type":"image/tiff","href":"https://sites.google.com/a/chromium.org/dev/omnibox-history-provider/HQP.tiff"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4534418464712904206"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4534418464712904206"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4534418464712904206"},{"rel":"edit-media","type":"image/tiff","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4534418464712904206"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7230126688981758451"},"published":{"$t":"2011-02-16T22:20:29.241Z"},"updated":{"$t":"2011-02-16T22:20:29.255Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-16T22:20:29.241Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-02-16 at 3.16.49 PM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7230126688981758451"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/815622450236891865"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/omnibox-history-provider/Screen%20shot%202011-02-16%20at%203.16.49%20PM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7230126688981758451"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7230126688981758451"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7230126688981758451"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7230126688981758451"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4964409648166935187"},"published":{"$t":"2011-02-16T22:02:10.344Z"},"updated":{"$t":"2011-02-16T22:02:10.349Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-02-16T22:02:10.344Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2011-02-16 at 2.59.44 PM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4964409648166935187"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/815622450236891865"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/omnibox-history-provider/Screen%20shot%202011-02-16%20at%202.59.44%20PM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4964409648166935187"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4964409648166935187"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4964409648166935187"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4964409648166935187"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8911229100953543277"},"published":{"$t":"2010-11-22T19:07:32.722Z"},"updated":{"$t":"2011-01-19T16:50:26.141Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-19T16:50:26.136Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"System Dictionary Pop-Up Architecture"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eThe Mac OS X system function \"Lookup in Dictionary\" pops open a hover panel that shows the dictionary definition of the word at which  the mouse cursor points. This functionality is provided by the system but is difficult to make work with Chromium's multi-process architecture. The underlying implementation uses \u003cfont face\u003d\"'courier new', monospace\"\u003e-[NSTextInput characterIndexAtPoint:]\u003c/font\u003e to return the index of the character in the text stream where the mouse is pointing. Our current accessibility work provides the text content of the webpage over IPC to the browser process. Unfortunately, the mapping of points to characters is a prohibitively large data set and cannot be moved over IPC. Since the underlying implementation of the dictionary function relies on a synchronous accessibility API, the problem is further complicated.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOne possible implementation is to send a synchronous IPC message from the browser process to the renderer. This would have to have a very short timeout because this synchronous message will block the UI thread, which could lead to a janky experience. But, the browser process, as a general rule, does not send synchronous messages to the renderer; only the vice versa is allowed. In order to perform this, then, the browser's IPC channel would need to be made synchronous as well as asynchronous. However, doing so would make it easier for people to add other synchronous IPC View messages, which should be avoided at all costs.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnother option, rather than making the main IPC channel synchronous, would be to add another channel between the browser and renderer. This shares the same drawbacks as the first implementation, but at least would separate out the single synchronous View message into its own member, which could be documented with verboten warnings. But it also has an additional drawback of requiring another IPC channel, which would consume another file descriptor per renderer process. Considering file descriptor exhaustion could already be an issue due to Chrome's architecture, this is not desirable for the implementation of a single feature.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe third option is to communicate to the renderer with asynchronous messages and use thread synchronization techniques to make the communication behave synchronously. To do this, we use a condition variable and a Singleton member.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA fourth option is to completely bypass how the system implements this using Accessibility of NSText and instead call the 10.6+ API to show the popup manually. The API in question is: \u003cfont face\u003d\"'courier new', monospace\"\u003e-[NSView showDefinitionForAttributedString:range:options:baselineOriginProvider:]\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e with \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eNSDefinitionPresentationTypeKey\u003dNSDefinitionPresentationTypeOverlay\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e in \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eoptions\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e. This works well on 10.6, but it means that the browser process would need to simulate the cmd-ctrl-d-then-keep-cmd-ctrl-down-and-drag-mouse-around logic, which is unfortunate. On the plus side, this would be completely async.\u003c/font\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Dictionary-Pop-Up-Internals\" /\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eDictionary Pop-Up Internals\u003c/font\u003e\u003c/h2\u003e\u003cdiv /\u003e\u003cdiv\u003eThis section will detail how Mac OS X brings up the dictionary pop-up. This examination was done on Mac OS X 10.6.5.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAll typical Cocoa apps get the dictionary pop-up behavior for free because NSTextField and NSTextView conform to NSTextInput (or NSTextInputClient). These protocols define the three methods used to implement the dictionary functionality:\u003c/div\u003e\u003cdiv\u003e\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e- (\u003cspan\u003eNSAttributedString\u003c/span\u003e*)attributedSubstringFromRange:(\u003cspan\u003eNSRange\u003c/span\u003e)\u003c/font\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003etheRange\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e- (\u003cspan\u003eNSUInteger\u003c/span\u003e)characterIndexForPoint:(\u003cspan\u003eNSPoint\u003c/span\u003e)thePoint\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e- (\u003cspan\u003eNSRect\u003c/span\u003e)firstRectForCharacterRange:(\u003cspan\u003eNSRange\u003c/span\u003e)theRange\u003c/font\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003e\u003cspan\u003e\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003cdiv\u003eThe system calls these methods in that order, with this rough pattern:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e-attributedStringForRange:\u003c/font\u003e{0, 10}\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e-characterIndexForPoint:\u003c/font\u003e{mouseX, mouseY} → returns index \u003cb\u003eC\u003c/b\u003e \u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e-attributedStringForRange:\u003c/font\u003e{\u003cb\u003eC\u003c/b\u003e, 50} → returns string \u003cb\u003eS\u003c/b\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e-firstRectForCharacterRange:\u003c/font\u003e{\u003cb\u003eC\u003c/b\u003e ± 50, \u003cb\u003eS*\u003c/b\u003e.length}\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eIt's unclear why each dictionary popup request always starts with (1), but it's likely some sort of warmup test. The rest is fairly forward: it receives the index of the character in the text stream over which the mouse points. From there, it gets the attributed string at that point and the 50 characters after it. The string it returns is attributed because the highlighted word effect is done by drawing the attributed string with the gray background over the word that is being looked up. Finally, it gets the drawing rectangle for the word so it knows where to position the popup. The range it passes is determined by the Dictionary framework, which breaks up the 50 character string and finds the individual word or phrase that is being looked up.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn Chromium, our native view that lives in the browser process conforms to the NSTextInput protocol but the text stream and web contents live in a separate process. This means that the access to the necessary data has to be brought across the process boundary. Unfortunately, the API assumes that everything is within the same process (a safe assumption for almost all Cocoa applications), so it is synchronous. To work within that constraint, we use the third option outlined above: send asynchronous ViewMsg messages to the renderer and then wait on a condition variable. Each of the 3 NSTextInput methods listed above follow this pattern in render_widget_host_view_mac.mm, using the example pseudocode below.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003chr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Sample-Code:\" /\u003eSample Code:\u003c/h3\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-chrome-browser-cocoa-lookup_in_dictionary.h:\" /\u003e//chrome/browser/cocoa/lookup_in_dictionary.h:\u003c/h4\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e#include \"base/singleton.h\"\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eclass LookupInDictionary {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e public:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // Locks the internal condition for use before the asynchronous message is sent to the renderer\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // to lookup the character index at a given point.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  void BeforeRequest() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    lock_.Acquire();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    character_index_ \u003d NSNotFound;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // Blocks the calling thread with a short timeout after the async message has been sent to the\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // renderer to lookup the character index of a given mouse point. This will return NSNotFound\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // if the timeout expires or if no character at the given point was found, otherwise it will return\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // the character index.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  NSUInteger WaitForCharacterIndex() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    condition_.TimedWait(1.5 seconds);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    return character_index_;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // Called at the end of the critical section. This will release the lock and condition.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  void AfterRequest() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    lock_.Release();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // Sets the character index for the last point message. This is called from the IO thread upon\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // receipt of the reply message. This will signal the condition to wake the sleeping UI thread if it\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  // has not yet timed out.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  void SetCharacterIndexAndSignal(NSUInteger index) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    lock_.Acquire();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    character_index_ \u003d index;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    lock_.Release();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    condition_.Signal();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e private:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  friend struct DefaultSingletonTraits;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  LookupInDictionary() \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e      : character_index_(NSNotFound),\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e        lock_(),\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e        condition_(\u0026amp;lock_) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  }\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  NSUInteger character_index_;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  Lock lock_;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  ConditionVariable condition_;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e};\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003chr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003erender_widget_host_mac.mm\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e- (NSUInteger)characterIndexAtPoint:(NSPoint)thePoint {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  gfx::Point point(thePoint.x, thePoint.y);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  LookupInDictionary* service \u003d Singleton\u0026lt;LookupInDictionary\u0026gt;::get();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  service-\u0026gt;BeforeRequest();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  Send(new ViewMsg_CharacterIndexAtPoint(routing_id(), point));\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  NSUInteger index \u003d service-\u0026gt;WaitForCharacterIndex();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  service-\u0026gt;AfterRequest();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  return index;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003chr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eresource_message_filter.cc\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid ResourceMessageFilter::OnCharacterIndexAtPoint(uint index) {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  LookupInDictionary* service \u003d Singleton\u0026lt;LookupInDictionary\u0026gt;::get();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  service-\u0026gt;SetCharacterIndexAndSignal(index);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/system-dictionary-pop-up-architecture"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8911229100953543277"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8911229100953543277"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8911229100953543277"}],"author":[{"name":{"$t":"Robert Sesek"},"email":{"$t":"rsesek@chromium.org"}}],"sites$pageName":{"$t":"system-dictionary-pop-up-architecture"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1231187449179661068"},"published":{"$t":"2011-01-19T06:36:23.897Z"},"updated":{"$t":"2011-01-19T06:48:56.352Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-19T06:48:56.350Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SPDY Tools and Debugging"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eWith a new protocol, tools and debugging aids are always in short supply.  If you have time to help build additional tools, please do so and feel free to post them here!\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDebugging tools:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eChrome\u003c/li\u003e\u003cul\u003e\u003cli\u003eabout:net-internals\u003cbr /\u003eThis URL is a magic URL in Chrome which provides data about the chrome network stack.  It has been fully updated to enumerate SPDY frames and status.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cul\u003e\u003cli\u003eEvents Tab:  This tab shows network events.  Look for SPDY_SESSSION events and you can see every SPDY frame sent or received by Chrome.\u003c/li\u003e\u003cli\u003eSPDY Tab (Chrome 9+):  This tab shows the current state of existing, active SPDY sessions\u003c/li\u003e\u003c/ul\u003e\u003cli\u003ecommand line flags\u003cbr /\u003eChrome has lots of command line flags to assist with altering SPDY behavior:\u003c/li\u003e\u003cul\u003e\u003cli\u003e--use-spdy\u003dssl\u003cbr /\u003eForces Chrome to always use SPDY, even if not negotiated over SSL\u003c/li\u003e\u003cli\u003e--use-spdy\u003dno-ssl\u003cbr /\u003eForces Chrome to always use SPDY, but without SSL\u003c/li\u003e\u003cli\u003e--host-resolver-rules\u003d\"MAP * myspdyserver:8000\"\u003cbr /\u003eIf you've got a server running SPDY, and you want content to be fetched from it, even if it doesn't match the URL you are requesting (e.g. you've cached a site and want to play it back to the browser without hitting the real-world site), this rule with alter host resolution for a set of URLs to be your simulated server.\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eChrome Inspector\u003c/li\u003e\u003cul\u003e\u003cli\u003eThe existing chrome tools for testing HTTP also work with SPDY.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli\u003eSpeed Tracer\u003cbr /\u003eSpeed Tracer is an extension for profiling browser internal events, network events and CPU usage.\u003cbr /\u003e\u003ca href\u003d\"https://chrome.google.com/extensions/detail/ognampngfcbddbfemdapefohjiobgbdl\"\u003ehttps://chrome.google.com/extensions/detail/ognampngfcbddbfemdapefohjiobgbdl\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChromium page benchmarker\u003cbr /\u003eThe page benchmarker can test HTTP and SPDY urls through chrome.  \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension\"\u003ehttps://sites.google.com/a/chromium.org/dev/chrome-benchmarking-extension\u003c/a\u003e\u003c/li\u003e\u003cli\u003eFlip-in-mem-edsm-server\u003cbr /\u003eThe flip server is a fully implemented SPDY server or SPDY-to-HTTP gateway.  Full source is available in the chromium tree at net/tools/flip_server.  You can read more about it here:  \u003ca href\u003d\"http://dev.chromium.org/spdy/running_flipinmemserver\"\u003ehttp://dev.chromium.org/spdy/running_flipinmemserver\u003c/a\u003e\u003c/li\u003e\u003cli\u003eWireshark SPDY extension\u003cbr /\u003eThe wireshark extension needs some love.  You'll find it checked into the chromium source tree under net/tools.  \u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-tools-and-debugging"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1231187449179661068"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1231187449179661068"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1231187449179661068"}],"author":[{}],"sites$pageName":{"$t":"spdy-tools-and-debugging"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3662529450263424390"},"published":{"$t":"2011-01-14T17:41:03.359Z"},"updated":{"$t":"2011-01-14T18:02:10.350Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-14T17:41:03.359Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"kernel_config_diag.svg"},"summary":{},"content":{"type":"image/svg+xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3662529450263424390"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4983378072493616104"},{"rel":"alternate","type":"image/svg+xml","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.svg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3662529450263424390"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3662529450263424390"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3662529450263424390"},{"rel":"edit-media","type":"image/svg+xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3662529450263424390"}],"author":[{"name":{"$t":"Simon Glass"},"email":{"$t":"sjg@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4934195320815436868"},"published":{"$t":"2011-01-14T17:38:20.935Z"},"updated":{"$t":"2011-01-14T18:02:10.350Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-14T17:44:20.978Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"kernel_config_diag.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4934195320815436868"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4983378072493616104"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4934195320815436868"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4934195320815436868"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4934195320815436868"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4934195320815436868"}],"author":[{"name":{"$t":"Simon Glass"},"email":{"$t":"sjg@chromium.org"}}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8575217977809128246"},"published":{"$t":"2011-01-13T16:49:28.751Z"},"updated":{"$t":"2011-01-13T17:23:25.975Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-13T17:23:25.972Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Server Push and Server Hints"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eIn order to deliver resources to browsers more quickly, SPDY employs two mechanisms, Server Push and Server Hint.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Server-Push\" /\u003eServer Push\u003c/h3\u003e\u003cdiv\u003eServer Push is where the server pushes a resource directly to the client without the client asking for the resource.   The server is making an assumption here that pushing the resource is desirable.  Pushing a cacheable resource can be risky, as the browser might already have the resource and the push can be redundant.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSpecifications:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol\"\u003eSPDY Specification\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eServer Hint\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eServer Hint is a mechanism where the server can notify the client of a resource that will be needed before the client can discover it.  The server does not send the entire contents of the resource, but rather just the URL as an early part of a response. The client can then validate its cache (potentially even eliminating the need for a GET-if-modified-since), and will formally request the resource only if needed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eServer Hint is implemented using the LINK header with HTTP, and overlaps with existing link prefetching semantics.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSpecifications:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://developer.mozilla.org/en/Link_prefetching_FAQ\" rel\u003d\"nofollow\"\u003eLINK rel\u003dprefetch from Mozilla\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/link-headers-and-server-hint/link-rel-subresource\"\u003eLINK rel\u003dsubresource\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Comparison-of-Server-Push-and-Server-Hint\" /\u003eComparison of Server Push and Server Hint\u003c/h3\u003e\u003cdiv\u003e\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-top-color:rgb(136,136,136);border-right-color:rgb(136,136,136);border-bottom-color:rgb(136,136,136);border-left-color:rgb(136,136,136);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"width:76px;height:15px\"\u003e \u003c/td\u003e\u003ctd style\u003d\"width:341px;height:15px\"\u003e Pro\u003c/td\u003e\u003ctd style\u003d\"width:282px;height:15px\"\u003e Con\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:76px;height:103px\"\u003eServer Push\u003c/td\u003e\u003ctd style\u003d\"width:341px;height:103px\"\u003e\u003cul\u003e\u003cli\u003e Lowest Latency Delivery Mechanism\u003c/li\u003e\u003cul\u003e\u003cli\u003eSaves 1 round-trip\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/td\u003e\u003ctd style\u003d\"width:282px;height:103px\"\u003e\u003cul\u003e\u003cli\u003eIf the client already has the resource cache, the load is wasteful\u003c/li\u003e\u003cli\u003eThe Application must decide if it should push the resource, the protocol cannot know whether the client has a resource\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:76px;height:76px\"\u003e Server Hint\u003c/td\u003e\u003ctd style\u003d\"width:341px;height:76px\"\u003e\u003cul\u003e\u003cli\u003eProvides early discovery of critical resources\u003c/li\u003e\u003cli\u003eCan include etag or last-modified information to avoid over-the-network cache validation checks\u003c/li\u003e\u003cli\u003eAllows the client to participate in cache validation before sending the resource\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003ctd style\u003d\"width:282px;height:76px\"\u003e\u003cul\u003e\u003cli\u003eStill requires a round-trip between the client and server to fetch the resource.\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/link-headers-and-server-hint"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8575217977809128246"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8575217977809128246"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8575217977809128246"}],"author":[{}],"sites$pageName":{"$t":"link-headers-and-server-hint"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"},"published":{"$t":"2011-01-12T17:25:32.085Z"},"updated":{"$t":"2011-01-12T17:44:48.396Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-12T17:44:48.394Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"cookie-split-loading"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eCurrently, the CookieMonster cookie store is initialized by reading in the cookies from the backing store in a large lump on first access.  This is bad for several reasons:\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIt violates the principle that we shouldn't do blocking operations on the IO thread.\u003c/li\u003e\u003cli\u003eIt contributes to perceived user startup time in if a session is being restored (which requires URL accesses, which result in CookieMonster accesses).\u003c/li\u003e\u003cli\u003eIt contributes to variation in web page loading, as the first web page takes substantially longer than later ones.\u003c/li\u003e\u003c/ul\u003eThis problem is tracked in \u003ca href\u003d\"http://crbug.com/52909\"\u003eIssue 52909\u003c/a\u003e.  This document sketches out a proposed solution to this problem.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eRequirements\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli /\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003eMinimize startup time (including startup time which includes session restore, i.e. CM access).\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003eMinimize stalling of individual set/get cookies.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style\u003d\"font-size:small\"\u003eI believe that these requirements imply:\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cul\u003e\u003cli\u003eBasic startup cannot be gated on loading all cookies from persistent backing store.\u003c/li\u003e\u003cli\u003eIndividual page loads cannot be gated on loading the entire cookie store from persistent backing store.  Ideally, individual page loads would only load the cookies from persistent backing store that are needed for that page.\u003c/li\u003e\u003cli\u003eFull persistent store load should be initiated at startup, but in the background not blocking any processes (as having cookies loaded in memory will result in absolute minimum latency).\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eNotes on synchronous vs. asynchronous interfaces to the CookieMonster\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e(See \u003ca href\u003d\"http://crbug.com/68657\"\u003eIssue 68657\u003c/a\u003e)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:small\"\u003eGenerally, services on the IO thread provide asynchronous interfaces with callbacks, to avoid the IO thread becoming a bottleneck in providing services for other threads.  For all requests after the initial one, the CookieMonster follows this rule and does not block; all information required for all CookieMonster APIs is in memory. However, the first call to the CookieMonster triggers loading in of the entire persistent backing store, done on-thread, which means that the IO thread blocks on disk operations on the first request to a CookieMonster with a backing store.\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eGiving the CookieMonster an asynchronous interface is a large task, not because of the internal structure of the Cookie, but because of the large number of callers, all of whom would need to be adapted to the new interface.  Issue \u0026lt;xxx\u0026gt; tracks this task.\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eIn an ideal world, the current design would not be dependent on async CookieMonster interfaces.  However, a key part of this design is breaking up the loading of the backing store into indepedent pieces, using Task objects, which are spawned off asynchronously in the backing in the absence of incoming reuqests to laod the backing store database.  Combining this with a synchronous interface for those reuqests that need backing store loads would mean doing one of:\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cul\u003e\u003cli\u003eLoading data inline (in the IO thread) when it is needed for a particular reuqest.  This would probably mean that all load tasks would need to be on the IO thread.\u003c/li\u003e\u003cli\u003eCompletely blocking any IO thread activity while waiting for responses from the DB thread for data load-in.  This violates one of the basic principles of the IO thread (though in theory it's no worse than what we're doing now).\u003c/li\u003e\u003cli\u003e Running nested message loops, and carefully tracking which requests corresponded to which nesting level of the message loop.  If request B were run while request A had an outstanding load message to the DB thread, this means that request A would be blocked on the completion of request B (because the stack couldn't unwind until that point).\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003eNone of these options is particularly appealing.  Thus it's preferred that this work be done after the CookieMonster has been converted over to having an async interface.  The rest of this design assumes such an interface. \u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e[Note that it would be relatively easy to layer an asynchronous  interface (if not behavior) on top of the current synchronous  interface; the async trigger would wrap the sync call and a  PostTask(self) for the callback.  This could allow incremental changes  to the various callers.  When all callers had been converted, the sync  interface could be removed and the async interface made to behave in a  non-blocking manner. ]\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eHigh Level Design\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eThe cookie monster will get an additional data structure, indexed by domain key (currently eTLD+1) indicating whether or not a particular domain key's set of values has been loaded.  Incoming requests (either set of get) will trigger the loading of the domain key(s) required for those requests if they have not yet been loaded.  In these cases, the incoming request will block (as it currently does if the backing store hasn't been loaded).  All actual database accesses will occur on the DB thread.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eAt CookieMonster construction, a background operation will be invoked to load the entire cookie store.  This will run on the database thread, and will break down into a series of tasks (T) marks each separate task:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e(T) Get the list of domain keys contained in the persistent backing store.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003eFor each key:\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e(T) Load all data from that key into memory\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e(T -- IO thread) Incorporate that loaded data into the cookie monster and mark that key as loaded.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eThese are broken up into indiviudal tasks both to avoid freezing the DB thread, and to allow loads of specific keys triggered by particular web page access to \"jump the queue\" and get pulled in earlier.  \u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eRoutine Flow Outline\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"2\"\u003eThe primary routines and data structures involved in this design are sketched out below.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left;font-size:small\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left;font-size:small\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-split-loading/objects.svg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1294854067994/developers/design-documents/cookie-split-loading/objects.svg\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left;font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left;font-size:small\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThere are two basic \"ropes\" (since they're potentially cross-thread) of routine invocation: the initial spawn of loading of all of the cookies, and the load-on-demand triggerred by specific requests to the cookie monster.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe initial spawn occurs from the CookieMonster constructor -\u0026gt; SQLitePersistentCookieStore::SpawnFullLoad -\u0026gt; SQLitePersistentCookieStore::BackingStore::SpawnFullLoad.  Once the rope has reached the DB thread, a full list of all the keys in the SQLite DB is loaded and stored in BackingStore.  Then SpawnFullLoad does a self-dispatch (to the DB thread) of a ChainLoadKeyCookies task for the first key in the list.  ChainLoadKeyCookies will call LoadKeyCookies (which will load in the cookies associated with that key from the backing store and notify the CookieMonster of that load) and will then self-dispatch another instance of ChainLoadKeyCookies. When the last entry in the key list is loaded, ChainLoadKeyCookies will return without any action.  This will (incrementally, allowing other tasks to run on the DB thread) load all the cookies.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eIf a request comes into the CookieMonster while this chain is executing, it will check all_loaded_ and keys_loaded_ to detemrine that the relevant data for the request has not been loaded (if the relevant data has already been loaded, it will execute the in-memory lookup inline as current and call the callback with the information). It will then register the callback and operation information into the key-\u0026gt;callback mapping.  If that is the first registration of that key, it will call SQLitePersistentCookieStore::LoadKeyCookies, which will dispatch an invocation to the DB thread of SQLitePersistentCookieStore::BackingStore::LoadKeyCookies.  If LoadKeyCookies determines that the key requested has already been loaded (race with above chain), it will simply exit.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe tricky part of this design is making sure that there are no races that result in dangling requests.  The invariants that guarantee that this doesn't happen are:\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cul\u003e\u003cli\u003eThe first entry in the keys-\u0026gt;callback table is always correlated with a LoadKeyCookies dispatch to the DB thread.\u003c/li\u003e\u003cli\u003eThat entry/dispatch will only happen if no previous CompleteLoad for that key has already arrived.\u003c/li\u003e\u003cli\u003eThe only case in which a LoadKeyCookies dispatch will not result in a later CompleteLoad dispatch is if a previous CompleteLoad dispatch for that cookie has already been sent.  \u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eSo it's possible for a LoadKeyCookies() dispatch to not result in a CompleteLoad() being sent back, but only if there's already one in transit.  Thus, if a callback is registered in the keys-\u0026gt;callback table, it will be executed with maximum latency round trip to DB thread + queue wait time + load time.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eObject Lifetime Relationships\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left;font-size:small\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e[Will Chan take note :-}.]\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBoth CookieMonster and PersistentCookieStore are RefCountedThreadSafe objects.  The CookieMonster keeps a reference to the PersistentCookieStore in its store_ pointer; this guarantees that the store lives as long as the Monster does.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBoth SpawnFullLoad and LoadKeyCookies will take as arguments scoped_refptrs on the CookieMonster which the PersistentCookieStore (or its backing store) will use for callbacks.  These references will guarantee that the CookieMonster stays alive for the duration of the callback.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf the CookieMonster needs to be torn down, it will call an abort() routine on the PersistentCookieStore, which will break the chain load and release the scoped_refptr\u0026lt;\u0026gt; held on the CookieMonster by that chain load.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-split-loading"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3812923497561768577"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$pageName":{"$t":"cookie-split-loading"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4758671858428296269"},"published":{"$t":"2011-01-12T17:41:07.979Z"},"updated":{"$t":"2011-01-12T17:41:07.994Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-12T17:41:07.979Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"objects.svg"},"summary":{},"content":{"type":"image/svg+xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4758671858428296269"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"},{"rel":"alternate","type":"image/svg+xml","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-split-loading/objects.svg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4758671858428296269"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4758671858428296269"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4758671858428296269"},{"rel":"edit-media","type":"image/svg+xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4758671858428296269"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3634560528353900056"},"published":{"$t":"2011-01-12T17:40:33.365Z"},"updated":{"$t":"2011-01-12T17:40:33.377Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-12T17:40:33.365Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"objects.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3634560528353900056"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-split-loading/objects.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3634560528353900056"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3634560528353900056"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3634560528353900056"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3634560528353900056"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5275417399199521599"},"published":{"$t":"2011-01-12T17:39:56.187Z"},"updated":{"$t":"2011-01-12T17:39:56.209Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-12T17:39:56.187Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"objects.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5275417399199521599"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3812923497561768577"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-split-loading/objects.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5275417399199521599"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5275417399199521599"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5275417399199521599"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5275417399199521599"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7413985058507756645"},"published":{"$t":"2011-01-07T14:20:55.379Z"},"updated":{"$t":"2011-01-07T14:20:55.387Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2011-01-07T14:20:55.379Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"incompatibility_thumb.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7413985058507756645"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5961700839525542929"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/about-conflicts/incompatibility_thumb.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7413985058507756645"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7413985058507756645"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7413985058507756645"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7413985058507756645"}],"author":[{"name":{"$t":"Finnur Thorarinsson"},"email":{"$t":"finnur@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8370201969024535245"},"published":{"$t":"2010-12-28T15:09:12.306Z"},"updated":{"$t":"2010-12-28T15:09:12.312Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-28T15:09:12.306Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"DumpCFReg.zip"},"summary":{},"content":{"type":"application/x-zip-compressed","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8370201969024535245"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"application/x-zip-compressed","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/DumpCFReg.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8370201969024535245"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8370201969024535245"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8370201969024535245"},{"rel":"edit-media","type":"application/x-zip-compressed","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8370201969024535245"}],"author":[{"name":{"$t":"Greg Thompson"},"email":{"$t":"grt@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9029623653626676362"},"published":{"$t":"2010-12-27T21:04:00.430Z"},"updated":{"$t":"2010-12-27T21:04:00.456Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-27T21:04:00.430Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"cr48_recovery_button.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9029623653626676362"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9029623653626676362"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9029623653626676362"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9029623653626676362"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9029623653626676362"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1104598169495304220"},"published":{"$t":"2010-12-22T22:57:40.405Z"},"updated":{"$t":"2010-12-22T23:03:01.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-22T22:57:40.405Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"image4.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1104598169495304220"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/image4.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1104598169495304220"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1104598169495304220"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1104598169495304220"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1104598169495304220"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2348377457591628856"},"published":{"$t":"2010-12-22T22:58:06.795Z"},"updated":{"$t":"2010-12-22T23:03:01.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-22T22:58:06.795Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"image3.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2348377457591628856"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/image3.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2348377457591628856"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2348377457591628856"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2348377457591628856"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2348377457591628856"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4379105068279033737"},"published":{"$t":"2010-12-22T22:57:20.745Z"},"updated":{"$t":"2010-12-22T23:03:01.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-22T22:57:20.745Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"image2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4379105068279033737"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/image2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4379105068279033737"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4379105068279033737"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4379105068279033737"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4379105068279033737"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4896264945610602336"},"published":{"$t":"2010-12-22T22:58:11.686Z"},"updated":{"$t":"2010-12-22T23:03:01.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-22T22:58:11.686Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"image0.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4896264945610602336"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/image0.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4896264945610602336"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4896264945610602336"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4896264945610602336"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4896264945610602336"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7034193030816327190"},"published":{"$t":"2010-12-22T22:57:34.439Z"},"updated":{"$t":"2010-12-22T23:03:01.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-22T22:57:34.439Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"image1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7034193030816327190"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4780084653067904515"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics/gcf_troubleshooting/image1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7034193030816327190"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7034193030816327190"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7034193030816327190"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7034193030816327190"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8148472531619614157"},"published":{"$t":"2010-04-02T20:02:50.051Z"},"updated":{"$t":"2010-12-22T22:52:24.309Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-02T20:41:45.376Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Diagnostics"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eFor diagnostics that any user can run check \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/administrators/diagnostic-mode\"\u003eDiagnostic Mode\u003c/a\u003e.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/diagnostics"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8148472531619614157"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8148472531619614157"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8148472531619614157"}],"author":[{"name":{"$t":"Carlos Pizano"},"email":{"$t":"cpu@chromium.org"}}],"sites$pageName":{"$t":"diagnostics"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},"published":{"$t":"2008-08-30T00:02:43.692Z"},"updated":{"$t":"2010-12-20T22:21:28.273Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-20T22:21:28.270Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Plugin Architecture"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h2\u003e\r\n\u003cdiv\u003eBefore reading this document, you should be familiar with Chromium's \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture\"\u003emulti-process architecture\u003c/a\u003e.\r\n\u003c/div\u003e\r\n\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003e\u003cp\u003ePlugins are a major source of browser instability. Plugins also make sandboxing the process where the renderer runs impractical, as plugins are written by third-parties and we can't control their access to the operating system. The solution is to run plugins in their own separate process.\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"Detailed_Design\"\u003e\u003cfont color\u003d\"#000000\"\u003eDetailed design\u003c/font\u003e\u003c/a\u003e\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-In-process-plugins\" /\u003eIn-process plugins\u003c/h3\u003e\u003cdiv\u003eChromium has the ability to run plugins in process (this is handy for testing) as well as out of process. Both start at our non-multi-process-aware WebKit embedding layer, which expects the embedder to implement the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebKit::WebPlugin\u003c/font\u003e\u003c/font\u003e interface. This is implemented by \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginImpl\u003c/font\u003e\u003c/font\u003e. The \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginImpl\u003c/font\u003e\u003c/font\u003e talks \"up\" the chain to a \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegate\u003c/font\u003e\u003c/font\u003e interface, which for in-process plugins is implemented by \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateImpl\u003c/font\u003e\u003c/font\u003e. This in turn talks to our NPAPI wrapper layer.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/in_process_plugins.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1270784736346/developers/design-documents/plugin-architecture/in_process_plugins.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan\u003e\r\n\u003cp\u003e\u003cb\u003eHistorical note:\u003c/b\u003e Before we had the WebKit embedding layer, \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginImpl\u003c/font\u003e\u003c/font\u003e \u003ci\u003ewas\u003c/i\u003e the embedding layer. It would talk to the \"embedding application\" through the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegate\u003c/font\u003e\u003c/font\u003e abstract interface, which we would switch implementations of for in-process and out-of-process plugins. With the addition of the Chromium WebKit API, we added the new \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebKit::WebPlugin\u003c/font\u003e\u003c/font\u003e abstract interface, which has the same function as the old \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegate\u003c/font\u003e\u003c/font\u003e interface. A better design with this interface would be to merge \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginImpl\u003c/font\u003e\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateImpl\u003c/font\u003e\u003c/font\u003e and do the process split at the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebKit::WebPlugin\u003c/font\u003e\u003c/font\u003e level. This has not been changed due to its complexity.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Out-of-process-plugins\" /\u003eOut-of-process plugins\u003c/h3\u003e\u003cdiv\u003eChromium switches out implementations at the layer indicated by the dotted line in the diagram above to support out-of-process plugins. This just interposes an IPC layer between the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginImpl\u003c/font\u003e\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateImpl\u003c/font\u003e\u003c/font\u003e layers, and lets us share all of our NPAPI code between each mode. All of the old \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateImpl\u003c/font\u003e\u003c/font\u003e code, as well as all of the NPAPI layer it talks to, now executes in the separate plugin process.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe two sides of a Renderer/Plugin communication channel are represented by the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003ePluginChannel\u003c/font\u003e\u003c/font\u003e and the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003ePluginChannelHost\u003c/font\u003e\u003c/font\u003e. We have many renderer processes, and one plugin process for each unique plugin. This means there is one \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003ePluginChannelHost\u003c/font\u003e\u003c/font\u003e in the renderer for each type of plugin it uses (for example, Adobe Flash and Windows Media Player). In each plugin process, there will be one \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003ePluginChannel\u003c/font\u003e\u003c/font\u003e for each renderer process that has an instance of that type of plugin.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eEach end of the channel, in turn, maps to many different instances of a plugin. For example, if there are two Adobe Flash movies embedded in a web page, there will be two \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateProxies\u003c/font\u003e\u003c/font\u003e (and related stuff) in the renderer side, and two WebPluginDelegateStubs (and related stuff)\u003c/div\u003e\u003cdiv\u003ein the plugin side. The channel is in charge of multiplexing the communication between these many objects over one IPC connection.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn this diagram, you can see the classes from the above in-process diagram grayed out, with the new out-of-process layer (in color) in the middle.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/out_of_process_plugins.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1270784866860/developers/design-documents/plugin-architecture/out_of_process_plugins.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\r\n\u003c/span\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003eHistorical note:\u003c/b\u003e We used to consistently use a stub/proxy model for communication, with one stub and one proxy on each side of the IPC channel for receiving and sending messages to one plugin, respectively. This leads to many classes that can get confusing. As a result, the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginStub\u003c/font\u003e\u003c/font\u003e was merged into the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateProxy\u003c/font\u003e\u003c/font\u003e which now handles the renderer side of all IPC communication for one plugin instance. The plugin side has not been merged yet, leaving two classes, the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginDelegateStub\u003c/font\u003e\u003c/font\u003e and the \u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cfont color\u003d\"#38761D\"\u003eWebPluginProxy\u003c/font\u003e\u003c/font\u003e as conceptually the same object, just representing different directions of communication.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Windowless-Plugins\" /\u003eWindowless Plugins\u003c/h3\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003eWindowless plugins are designed to run directly within the rendering pipeline.  When WebKit wants to draw a region of the screen involving the plugin it calls into the plugin code, handing it a drawing context.  Windowless plugins are often used in situations where the plugin is expected to be transparent over the page -- it's up to the plugin drawing code to decide how it munges the bit of the page it's given.\u003cbr /\u003e\u003cbr /\u003eTo take windowless plugins out of process, you still need to incorporate their rendering in the (synchronous) rendering pass done by WebKit.  A naively slow option is to clip out the region that the plugin will draw on then synchronously ship that over to the plugin process and let it draw.  This can then be sped up with some shared memory.\u003cbr /\u003e\u003cbr /\u003eHowever, rendering speed is then at the mercy of the plugin process (imagine a page with 30 transparent plugins -- we'd need 30 round trips to the plugin process).  So instead we have windowless plugins asynchronously paint, much like how our existing page rendering is asynchronous with respect to the screen.  The renderer has effectively a backing store of what the plugin's rendered area looks like and uses this image when drawing, and the plugin is free to asynchronously send over new updates representing changes to the rendered area.\u003cbr /\u003e\u003cbr /\u003eAll of this is complicated a bit by \"transparent\" plugins.  The plugin process needs to know what pixels it wants to draw over.  So it also keeps a cache of what the renderer last sent it as the page background behind the plugin, then lets the plugin repeatedly draw over that. \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003e\u003cbr /\u003eSo, in all, here are the buffers involved for the region drawn by a windowless plugin:\u003cbr /\u003e\u003cbr /\u003eRenderer process\u003cbr /\u003e - backing store of what the plugin last rendered as\u003cbr /\u003e - shared memory with the plugin for receiving updates (\"transport DIB\")\u003cbr /\u003e - copy of the page background behind the plugin (described below)\u003cbr /\u003e\u003cbr /\u003ePlugin process\u003cbr /\u003e - copy of the page background behind the plugin, used as the source\u003cbr /\u003ematerial when drawing\u003cbr /\u003e - shared memory with the renderer for sending updates (\"transport DIB\")\u003cbr /\u003e\u003cbr /\u003eWhy does the renderer keep a copy of the page background?  Because if the page background changes, we need to synchronously get the plugin to redraw over the new background it will appear to lag.  We can tell that the background changed by comparing the newly-rendered background against our copy of what the plugin thinks the background.  Since the plugin and renderer processes are asynchronous with respect to one another, they need separate copies.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Overall-system\" /\u003eOverall system\u003c/h3\u003e\u003cdiv\u003eThis image shows the overall system with the browser and two renderer processes, each communicating with one shared out-of-process Flash process. There are three total plugin instances. Note that this diagram is out of date, and WebPluginStub has been merged with WebPluginDelegateProxy.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/pluginsoutofprocess.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197834023/developers/design-documents/plugin-architecture/pluginsoutofprocess.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-family:arial;font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/388644403660978501"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"plugin-architecture"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6642628267560740145"},"published":{"$t":"2009-11-19T17:03:12.674Z"},"updated":{"$t":"2010-12-16T18:39:48.668Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-16T18:39:48.665Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Login"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Abstract\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAbstract\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Objective\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eObjective\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Design-highlights\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eDesign highlights\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-1-underway-\"\u003e\u003cstrong\u003e3.1 \u003c/strong\u003ePhase 1 (complete)\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Current-minimal-implementation\"\u003e\u003cstrong\u003e3.1.1 \u003c/strong\u003eCurrent implementation\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Making-sure-we-re-talking-to-Google\"\u003e\u003cstrong\u003e3.1.2 \u003c/strong\u003eMaking sure we're talking to Google\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Auto-login\"\u003e\u003cstrong\u003e3.1.3 \u003c/strong\u003eAuto-login\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Phase-2\"\u003e\u003cstrong\u003e3.2 \u003c/strong\u003ePhase 2\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-More-efficient-more-flexible\"\u003e\u003cstrong\u003e3.2.1 \u003c/strong\u003eMore efficient, more flexible\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-SSO-beyond-Google\"\u003e\u003cstrong\u003e3.2.2 \u003c/strong\u003eSSO beyond Google\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\r\n\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h2\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe Chromium OS-based device login mechanism will provide a single sign on (SSO) capability that users can use to streamline access to cloud-based services\u003c/li\u003e\u003cli\u003eThis mechanism will be designed for security, privacy and ease-of-use\u003c/li\u003e\u003cli\u003eWe want to ensure that people can fully use Chromium OS without needing a Google login\u003c/li\u003e\u003cli\u003eWhile the initial work on the login mechanism has been focused on providing instant access to Google services for users with Google accounts, we are investigating support for OpenID to allow people to fully use the system without needing a Google login.\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Objective\" /\u003eObjective\u003c/h2\u003e\r\n\u003cp\u003eChromium OS devices are cloud devices. They sync users' data and preferences with cloud-based services. To do so, they need some way to bundle all the user's data together and to know which machines to sync it down to. To enable this functionality, users currently need to log in to Chromium OS devices with a Google account. Other authentication service providers may also support this functionality in the future.\u003c/p\u003e\r\n\r\n\u003cp\u003eChromium OS devices will be able to:\u003c/p\u003e\r\n\r\n\u003col\u003e\r\n \u003cli\u003e Authenticate the user against Google if possible, so that it always uses the user's latest password \u003c/li\u003e\r\n \u003cli\u003e Enable the user to log in when offline (assuming the user has logged in online at least once) \u003c/li\u003e\r\n \u003cli\u003e Enable an SSO experience for Google properties \u003c/li\u003e\r\n \u003cli\u003e Allow the user to opt-in to auto-login that still does SSO, but does not cache the user's password \u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003eWe also plan to support alternative authentication systems:\r\n\u003c/p\u003e\r\n\r\n\u003col\u003e\r\n \u003cli\u003e Give users an SSO experience at OpenID relying parties \u003c/li\u003e\r\n \u003cli\u003e Give users an SSO experience at sites for which they've already typed in credentials on a Chromium OS device\u003c/li\u003e\r\n\u003c/ol\u003eWe are also currently investigating the technical issues involved with allowing users to log in to a Chromium OS device using a non-Google OpenID provider. We are investigating how to enable 3rd parties to provide interoperable sync \r\nservices.\u003cbr /\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Design-highlights\" /\u003eDesign highlights\u003c/h2\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Phase-1-underway-\" /\u003ePhase 1 (complete)\u003c/h3\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Current-minimal-implementation\" /\u003eCurrent implementation\u003c/h4\u003e\r\n\r\n\u003cp\u003e\r\nThe initial design achieves the minimum requirements by using Chromium's HTTPS stack to talk to existing Google Accounts \u003ca href\u003d\"http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html\"\u003eHTTP(s) APIs\u003c/a\u003e to authenticate the user and get the appropriate cookies to log the user in to all Google services the instant the browser UI shows up. Since the login screen is actually presented by the browser process itself, it is a simple matter to ensure that all cookies acquired as a result of authentication wind up in the user's cookie jar. Once the user has successfully authenticated online once, we use a hash of her password and the Trusted Platform Module (TPM) to wrap a magic string.  Offline login is implemented by asking for the user's password again and attempting to successfully unwrap this magic value, an operation that cannot be performed without access to both the specific TPM chip in the user's device and the user's password. In the offline case, obviously, no cookies can be acquired.  Many users, though, will have unexpired cookies from a previous authentication already cached in their Chromium browser session, and these can be used once they get back online. The UI for logging in is provided by a the Chromium browser itself in a special mode. We allow the user to select a keyboard layout on this login screen, and locale will either be set by the device's owner, or be selectable on the fly.\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nFor our needs, the normal Google Accounts ClientLogin API is not enough, as it is designed to provide cookies that allow a client application to authenticate to a single Google service. We want the cookies your browser gets when you run through a normal web-based login, so that we can get them into Chromium after the user's session has begun. Therefore, we currently go through a three-step process:\r\n\u003c/p\u003e\r\n\r\n\u003col\u003e\r\n \u003cli\u003e https://www.google.com/accounts/ClientLogin, to get a Google cookie \u003c/li\u003e\r\n \u003cli\u003e https://www.google.com/accounts/IssueAuthToken, to get a one-time use token (good for a couple of minutes) that will authenticate the user to any service \u003c/li\u003e\r\n \u003cli\u003e https://www.google.com/accounts/TokenAuth, to exchange the token for the full set of browser cookies we need to do SSO \u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\r\nIn the future, we're looking to deploy another API that would minimize the number of round trips.\r\n\u003c/p\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Making-sure-we-re-talking-to-Google\" /\u003eMaking sure we're talking to Google\u003c/h4\u003e\r\n\r\n\u003cp\u003e\r\nIn order to remain somewhat resistant to network-level attacks, the only root certificate that the login process is willing to trust to identify web servers is the one that issues Google's SSL certs. Thus, if an attacker is going to trick a registrar into giving him an SSL cert for www.google.com, at least he has to trick Google's registrar.\r\n\u003c/p\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Auto-login\" /\u003e\r\nAuto-login\r\n\u003c/h4\u003e\r\n\r\n\u003cp\u003e\r\nWe don't want to implement auto-login by caching the user's password and running it through the normal login process on his behalf; doing so would expose the user's password to unnecessary risk. As auto-login is opt-in, the user action that sets it up will take place after login, during an active user session -- which means we have the Chromium browser up and running. Thus, turning on auto-login will be a web-based flow that results in the user getting an OAuth \u003cspan bgcolor\u003d\"yellow\" style\u003d\"background-color:rgb(255,255,255)\"\u003eübertoken \u003c/span\u003ethat we cache. These tokens are revokable, which allows the user to limit his risk if one gets compromised.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nWe would store this token in the same encrypted-while-shutdown storage as we're using for system settings. The login process would check for it, and then, upon successfully exchanging it for Google cookies, log the user in. If the login would need to proceed offline, then the presence of the token is deemed to be enough to allow login to succeed. The user opted in to auto-login; there is only so much we can do to protect him and his data.\r\n\u003c/p\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Phase-2\" /\u003ePhase 2\u003c/h3\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-More-efficient-more-flexible\" /\u003eMore efficient, more flexible\u003cbr /\u003e\u003c/h4\u003e\u003cp\u003eSupport for web-based authentication flows, like OpenID or those used internally by many enterprises, is the next area we hope to explore.  This will allow our users to authenticate against providers other than Google, though there are challenges around supporting arbitrary web-bases flows and still being able to manage per-user data encryption without asking users to set up a separate, local credential specifically for this purpose -- a user experience that we find less compelling than what we provide today.\u003c/p\u003e\r\n\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-SSO-beyond-Google\" /\u003eSSO beyond Google\u003c/h4\u003e\r\n\r\n\u003cp\u003e\r\nEfforts in this space have not proceeded much at this time. It's probable that, if users have chosen to \"Log in via Google\" at OpenID relying parties, the presence of Google authentication cookies in their browser will Just Work. This remains to be verified. As for logging in to third-party sites for which the user has entered their password already, such behavior will likely be tied to a password sync system.\u003c/p\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/login"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6642628267560740145"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6642628267560740145"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6642628267560740145"}],"author":[{}],"sites$pageName":{"$t":"login"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},"published":{"$t":"2009-08-02T08:29:54.154Z"},"updated":{"$t":"2010-12-15T23:16:49.726Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-15T23:16:49.726Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Proxy settings and fallback"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003eOn Windows, Chromium uses WinInet's proxy settings.\u003c/p\u003e\r\n \r\n \u003cp\u003eConsequently, it is important that Chromium interpret and apply these proxy settings in the\r\n same manner as WinInet. Otherwise the same proxy settings may give different results in\r\n Chromium than in other WinInet-based applications (like Internet Explorer).\u003c/p\u003e\r\n \r\n \u003cp\u003eIn Firefox, the proxy settings are divided into four different modes using radio buttons. This\r\n modal approach makes it pretty easy to understand which proxy settings will be used, since there is\r\n only one set of choices.\u003c/p\u003e\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009650/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png\" /\u003e\r\n\r\n \u003cp\u003eHowever in Internet Explorer, the settings are more complex.\u003c/p\u003e\r\n \u003cp\u003eAll of the various settings are presented in the UI as optional checkboxes. \u003c/p\u003e\r\n \u003cp\u003eThis makes it unclear what is supposed to\r\n happen when conflicting choices are given.\u003c/p\u003e\r\n\r\n \u003cp\u003eScreenshot of IE's settings dialog:\u003c/p\u003e\r\n \u003ctable\u003e\r\n \u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009652/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png\" /\u003e\r\n \u003c/td\u003e\r\n \u003ctd\u003e\r\n +\r\n \u003c/td\u003e\r\n \u003ctd\u003e\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009652/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png\" /\u003e\r\n \u003c/td\u003e\r\n \u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n \u003ch2\u003e\u003ca name\u003d\"TOC-How-WinInet-resolves-the-ambiguity\" /\u003eHow WinInet resolves the ambiguity\u003c/h2\u003e\r\n\r\n \u003cp\u003e[The following was determined experimentally using Internet Explorer 8 on Windows XP. (Couldn't find an official explanation of the steps to link to).]\u003c/p\u003e\r\n \u003cp\u003eThe way Internet Explorer applies these settings is using a fallback scheme during initialization:\u003c/p\u003e\r\n\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009651/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png\" /\u003e\r\n \r\n \u003cul\u003e\r\n \u003cli\u003eFallback between the automatic settings is represented with a \u003cfont color\u003d\"#0000FF\"\u003e\u003cb\u003eblue arrow\u003c/b\u003e\u003c/font\u003e, and occurs whenever:\u003c/li\u003e\r\n \u003cul\u003e\r\n \u003cli\u003eThe setting is not specified.\u003c/li\u003e\r\n \u003cli\u003eThe underlying PAC script failed to be downloaded.\u003c/li\u003e\r\n \u003cli\u003eThe underlying PAC script failed to be parsed.\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003eFallback between the manual settings is represented by a \u003cb\u003eblack arrow\u003c/b\u003e, and occurs whenever:\u003c/li\u003e\r\n \u003cul\u003e\r\n \u003cli\u003eThe setting is not specified.\u003c/li\u003e\r\n \u003c/ul\u003e\r\n \u003cli\u003eThe bypass list is applied ONLY within the manual settings.\u003c/li\u003e\r\n \u003c/ul\u003e\r\n\r\n \u003cp style\u003d\"color:red\"\u003eTODO(eroman): haven't verified fallback for SOCKS.\u003c/p\u003e\r\n\r\n \u003cp\u003eThere is a secondary fallback mechanism at runtime:\u003c/p\u003e\r\n\r\n \u003cdiv\u003e\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009651/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png\" /\u003e\r\n \u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1292455009651/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png\" /\u003e\r\n \u003c/div\u003e\r\n\r\n \u003cp\u003eSo for example if auto-detect was chosen during the initialization sequence, but\r\n the PAC script is failing during execution of FindProxyForURL(), it will fallback to direct (regardless\r\n of whether there are manual proxy settings).\u003c/p\u003e\u003cul\u003e\r\n \u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2187609824886192973"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6458532033419378932"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$pageName":{"$t":"proxy-settings-fallback"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6070366049377944225"},"published":{"$t":"2009-08-02T10:23:59.495Z"},"updated":{"$t":"2010-12-15T23:16:49.652Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:59.495Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-proxy-server-settings.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6070366049377944225"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6070366049377944225"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6070366049377944225"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6070366049377944225"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6070366049377944225"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6727668127751599572"},"published":{"$t":"2009-08-02T10:24:03.990Z"},"updated":{"$t":"2010-12-15T23:16:49.652Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:24:03.990Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-proxy-settings.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6727668127751599572"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6727668127751599572"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6727668127751599572"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6727668127751599572"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6727668127751599572"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2834009843906457175"},"published":{"$t":"2009-08-02T10:23:41.427Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:41.427Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-fallback.dot"},"summary":{},"content":{"type":"application/msword","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2834009843906457175"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"application/msword","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.dot"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2834009843906457175"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2834009843906457175"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2834009843906457175"},{"rel":"edit-media","type":"application/msword","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2834009843906457175"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3955635762214816650"},"published":{"$t":"2009-08-02T10:23:30.606Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:30.606Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-auto-fallback.dot"},"summary":{},"content":{"type":"application/msword","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3955635762214816650"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"application/msword","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.dot"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3955635762214816650"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3955635762214816650"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3955635762214816650"},{"rel":"edit-media","type":"application/msword","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3955635762214816650"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7728303868303634304"},"published":{"$t":"2009-08-02T10:23:45.771Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:45.771Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-fallback.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7728303868303634304"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7728303868303634304"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7728303868303634304"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7728303868303634304"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7728303868303634304"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8380750272752788768"},"published":{"$t":"2009-08-02T10:23:50.122Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:50.122Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-manual-fallback.dot"},"summary":{},"content":{"type":"application/msword","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8380750272752788768"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"application/msword","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.dot"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8380750272752788768"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8380750272752788768"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8380750272752788768"},{"rel":"edit-media","type":"application/msword","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8380750272752788768"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8698841392623199790"},"published":{"$t":"2009-08-02T10:23:35.219Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:35.219Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-auto-fallback.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8698841392623199790"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8698841392623199790"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8698841392623199790"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8698841392623199790"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8698841392623199790"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9132774211783879448"},"published":{"$t":"2009-08-02T10:23:54.771Z"},"updated":{"$t":"2010-12-15T23:16:49.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:54.771Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ie-manual-fallback.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9132774211783879448"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9132774211783879448"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9132774211783879448"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9132774211783879448"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9132774211783879448"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6431415898973488092"},"published":{"$t":"2009-08-02T10:23:23.570Z"},"updated":{"$t":"2010-12-15T23:16:49.650Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-02T10:23:23.570Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"fox-proxy-settings.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6431415898973488092"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6458532033419378932"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6431415898973488092"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6431415898973488092"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6431415898973488092"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6431415898973488092"}],"author":[{"name":{"$t":"Eric Roman"},"email":{"$t":"eroman@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1272778740582862015"},"published":{"$t":"2008-10-29T00:20:24.048Z"},"updated":{"$t":"2010-12-15T23:11:05.609Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-29T00:23:59.898Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"files2.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1272778740582862015"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/files2.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1272778740582862015"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1272778740582862015"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1272778740582862015"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1272778740582862015"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1538873942529028780"},"published":{"$t":"2008-10-29T20:51:01.688Z"},"updated":{"$t":"2010-12-15T23:11:05.609Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-29T20:51:01.688Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"files4.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1538873942529028780"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/files4.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1538873942529028780"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1538873942529028780"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1538873942529028780"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1538873942529028780"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3332737433332779757"},"published":{"$t":"2008-10-29T00:01:54.960Z"},"updated":{"$t":"2010-12-15T23:11:05.609Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-29T00:01:54.960Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"files.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3332737433332779757"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/files.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3332737433332779757"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3332737433332779757"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3332737433332779757"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3332737433332779757"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4263947413188394169"},"published":{"$t":"2008-10-29T00:24:51.409Z"},"updated":{"$t":"2010-12-15T23:11:05.609Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-29T00:24:51.409Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"files3.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4263947413188394169"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/files3.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4263947413188394169"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4263947413188394169"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4263947413188394169"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4263947413188394169"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6144846761191861886"},"published":{"$t":"2008-10-29T19:07:22.752Z"},"updated":{"$t":"2010-12-15T23:11:05.609Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-29T19:07:22.752Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"alloc2.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6144846761191861886"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/alloc2.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6144846761191861886"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6144846761191861886"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6144846761191861886"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6144846761191861886"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1530044000029430085"},"published":{"$t":"2008-10-28T21:59:03.269Z"},"updated":{"$t":"2010-12-15T23:11:05.608Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-10-28T21:59:03.269Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"alloc.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1530044000029430085"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3254066387191849349"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/disk-cache/alloc.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1530044000029430085"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530044000029430085"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530044000029430085"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1530044000029430085"}],"author":[{"name":{"$t":"Ricardo Vargas"},"email":{"$t":"rvargas@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2065966401207731298"},"published":{"$t":"2010-09-17T19:13:06.858Z"},"updated":{"$t":"2010-12-15T23:10:07.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:42:48.453Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-inheritance.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2065966401207731298"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-inheritance.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2065966401207731298"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2065966401207731298"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2065966401207731298"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2065966401207731298"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"8"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2550572997781006085"},"published":{"$t":"2010-09-17T19:48:31.415Z"},"updated":{"$t":"2010-12-15T23:10:07.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:57:39.001Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-method-calls-new.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2550572997781006085"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2550572997781006085"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2550572997781006085"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2550572997781006085"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2550572997781006085"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2607332481185675469"},"published":{"$t":"2010-09-17T19:49:22.706Z"},"updated":{"$t":"2010-12-15T23:10:07.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:49:22.706Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-method-calls-new.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2607332481185675469"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2607332481185675469"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2607332481185675469"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2607332481185675469"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2607332481185675469"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3418057656096166601"},"published":{"$t":"2010-09-17T19:49:42.242Z"},"updated":{"$t":"2010-12-15T23:10:07.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:58:39.588Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-method-calls-new.svg"},"summary":{},"content":{"type":"image/svg+xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3418057656096166601"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/svg+xml","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3418057656096166601"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3418057656096166601"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3418057656096166601"},{"rel":"edit-media","type":"image/svg+xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3418057656096166601"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8341416035805163300"},"published":{"$t":"2010-09-17T19:01:52.667Z"},"updated":{"$t":"2010-12-15T23:10:07.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-27T20:58:50.530Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-inheritance.svg"},"summary":{},"content":{"type":"image/svg+xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8341416035805163300"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/svg+xml","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8341416035805163300"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8341416035805163300"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8341416035805163300"},{"rel":"edit-media","type":"image/svg+xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8341416035805163300"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1955042188713167481"},"published":{"$t":"2010-09-17T19:15:37.209Z"},"updated":{"$t":"2010-12-15T23:10:07.023Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:15:37.209Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-inheritance.jpeg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1955042188713167481"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-inheritance.jpeg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1955042188713167481"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1955042188713167481"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1955042188713167481"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1955042188713167481"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5884520740117893454"},"published":{"$t":"2010-09-17T19:16:15.149Z"},"updated":{"$t":"2010-12-15T23:10:07.023Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:16:15.149Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-inheritance.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5884520740117893454"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-inheritance.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5884520740117893454"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5884520740117893454"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5884520740117893454"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5884520740117893454"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6007848679269941412"},"published":{"$t":"2010-09-17T19:26:39.306Z"},"updated":{"$t":"2010-12-15T23:10:07.023Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-17T19:30:51.641Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CM-inheritance-new.tiff"},"summary":{},"content":{"type":"image/tiff","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6007848679269941412"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6235726469196478581"},{"rel":"alternate","type":"image/tiff","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/cookiemonster/CM-inheritance-new.tiff"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6007848679269941412"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6007848679269941412"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6007848679269941412"},{"rel":"edit-media","type":"image/tiff","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6007848679269941412"}],"author":[{"name":{"$t":"Randy Smith"},"email":{"$t":"rdsmith@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"Wil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5925424391129764958"},"published":{"$t":"2010-10-19T08:08:41.758Z"},"updated":{"$t":"2010-12-11T19:05:13.489Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-11T19:05:13.486Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"breakpoints-tutorial"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThis page has moved to \u003ca href\u003d\"http://code.google.com/chrome/devtools\"\u003ehttp://code.google.com/chrome/devtools\u003c/a\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium\"\u003eYou will be automatically redirected there in 10 seconds.\u003c/span\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cimg src\u003d\"http://www.google.com/chart?chc\u003dsites\u0026amp;cht\u003dd\u0026amp;chdp\u003dsites\u0026amp;chl\u003d%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D299'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Url+Redirector+Modified%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D300'%3D97'dim'%5C%3D10'%3D10'%3D300'%3D97'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C\u0026amp;sig\u003dJNQvJfl50ag_X5BTxM2IMuBZovk\" data-igsrc\u003d\"http://224.gmodules.com/ig/ifr?mid\u003d224\u0026amp;synd\u003dtrogedit\u0026amp;url\u003dhttp%3A%2F%2Fhosting.gmodules.com%2Fig%2Fgadgets%2Ffile%2F101516774607192005424%2Fweb-redirector.xml\u0026amp;up_pageurl\u003dhttp%3A%2F%2Fcode.google.com%2Fchrome%2Fdevtools\u0026amp;up_timeout\u003d10\u0026amp;h\u003d100\u0026amp;w\u003d300\" data-type\u003d\"ggs-gadget\" data-props\u003d\"align:left;borderTitle:Url Redirector Modified;height:100;igsrc:http#58//224.gmodules.com/ig/ifr?mid\u003d224\u0026amp;synd\u003dtrogedit\u0026amp;url\u003dhttp%3A%2F%2Fhosting.gmodules.com%2Fig%2Fgadgets%2Ffile%2F101516774607192005424%2Fweb-redirector.xml\u0026amp;up_pageurl\u003dhttp%3A%2F%2Fcode.google.com%2Fchrome%2Fdevtools\u0026amp;up_timeout\u003d10\u0026amp;h\u003d100\u0026amp;w\u003d300;mid:224;scrolling:no;showBorder:false;showBorderTitle:null;spec:http#58//hosting.gmodules.com/ig/gadgets/file/101516774607192005424/web-redirector.xml;up_pageurl:http#58//code.google.com/chrome/devtools;up_timeout:10;width:300;\" width\u003d\"300\" height\u003d\"100\" style\u003d\"display:block;text-align:left;margin-right:auto;\" class\u003d\"igm\" /\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/devtools/breakpoints-tutorial"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5925424391129764958"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5925424391129764958"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5925424391129764958"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$pageName":{"$t":"breakpoints-tutorial"},"sites$revision":{"$t":"23"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/17933417571601983"},"published":{"$t":"2010-12-08T22:17:11.335Z"},"updated":{"$t":"2010-12-08T22:32:58.613Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T22:32:58.608Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Mario_DevSwitchTape.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/17933417571601983"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/17933417571601983"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/17933417571601983"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/17933417571601983"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/17933417571601983"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7135166099627031736"},"published":{"$t":"2010-12-08T22:31:00.899Z"},"updated":{"$t":"2010-12-08T22:31:00.911Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T22:31:00.899Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Mario_DevSwitchOff.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7135166099627031736"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOff.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7135166099627031736"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7135166099627031736"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7135166099627031736"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7135166099627031736"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7243688823685702836"},"published":{"$t":"2010-12-08T22:30:26.885Z"},"updated":{"$t":"2010-12-08T22:30:26.900Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T22:30:26.885Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Mario_DevSwitchOn.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7243688823685702836"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7243688823685702836"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7243688823685702836"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7243688823685702836"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7243688823685702836"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2384685966598393113"},"published":{"$t":"2010-12-08T22:22:11.739Z"},"updated":{"$t":"2010-12-08T22:22:11.759Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T22:22:11.739Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Mario_DevSwitchOn.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2384685966598393113"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2384685966598393113"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2384685966598393113"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2384685966598393113"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2384685966598393113"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5910671738395770965"},"published":{"$t":"2010-12-08T22:17:19.195Z"},"updated":{"$t":"2010-12-08T22:17:19.209Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T22:17:19.195Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Mario_DevSwitchTape.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5910671738395770965"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6898459593441562844"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5910671738395770965"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5910671738395770965"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5910671738395770965"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5910671738395770965"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7827355683122168122"},"published":{"$t":"2010-12-08T06:50:14.167Z"},"updated":{"$t":"2010-12-08T06:50:14.176Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T06:50:14.167Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ChromiumOS_TPM_Cryptohome.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7827355683122168122"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8754615608142383673"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7827355683122168122"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7827355683122168122"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7827355683122168122"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7827355683122168122"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9086380914281178997"},"published":{"$t":"2010-12-08T06:46:15.823Z"},"updated":{"$t":"2010-12-08T06:46:15.835Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-08T06:46:15.823Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ChromeOSCryptohomeTPMusage.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9086380914281178997"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8754615608142383673"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromeOSCryptohomeTPMusage.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9086380914281178997"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9086380914281178997"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9086380914281178997"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9086380914281178997"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1672179938207096589"},"published":{"$t":"2010-12-02T17:37:56.541Z"},"updated":{"$t":"2010-12-02T17:37:56.547Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-02T17:37:56.541Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"TrackerName.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1672179938207096589"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2820759774765985493"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide/TrackerName.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1672179938207096589"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1672179938207096589"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1672179938207096589"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1672179938207096589"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4534417983555016765"},"published":{"$t":"2010-12-02T17:33:38.103Z"},"updated":{"$t":"2010-12-02T17:37:29.849Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-12-02T17:37:29.842Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"BugTrackerName.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4534417983555016765"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2820759774765985493"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/developer-guide/BugTrackerName.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4534417983555016765"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4534417983555016765"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4534417983555016765"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4534417983555016765"}],"author":[{"name":{"$t":"Douglas Anderson"},"email":{"$t":"dianders@chromium.org"}}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3776343683577357654"},"published":{"$t":"2010-11-17T00:45:54.015Z"},"updated":{"$t":"2010-11-26T19:04:34.272Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-26T19:04:34.267Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"05_signed_in.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3776343683577357654"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3372033770379792144"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/multi-profiles/05_signed_in.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3776343683577357654"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3776343683577357654"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3776343683577357654"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3776343683577357654"}],"author":[{}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7451520202205508953"},"published":{"$t":"2010-11-26T17:09:29.515Z"},"updated":{"$t":"2010-11-26T17:09:29.526Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-26T17:09:29.515Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"effect_of_initial_cwnd_on_plt (1).png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7451520202205508953"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/effect_of_initial_cwnd_on_plt(1).png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7451520202205508953"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7451520202205508953"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7451520202205508953"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7451520202205508953"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},"published":{"$t":"2009-11-19T17:04:20.268Z"},"updated":{"$t":"2010-11-20T16:00:31.006Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-02T09:50:00.758Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Window UI Variants"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-family:trebuchet ms\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"color:rgb(230,145,56);font-weight:bold\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"color:rgb(230,145,56);font-weight:bold\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal\"\u003eWhile working on the UI for Chromium OS, we explored three basic structures for our main interface: Classic, Compact, and Sidetab.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"color:rgb(230,145,56);font-weight:bold\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eEach have their own strengths and weaknesses, and while we are still interested in the variations, our current builds are focused on classic and compact navigation styles.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont color\u003d\"#e69138\"\u003e\u003cb\u003e\u003cfont color\u003d\"#000000\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont color\u003d\"#e69138\"\u003e\u003cb\u003e\r\n\u003chr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont color\u003d\"#e69138\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Classic-navigation\" /\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650265289/chromium-os/user-experience/window-ui/navpng\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003e\u003c/span\u003eClassic navigation\u003c/b\u003e\u003c/h4\u003e\r\n\u003cdiv\u003eThe most basic navigation style is that of a single maximized Chromium window. This is the equivalent of the Chromium browser windowing UI in maximized mode.\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eStrengths\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eSimilarity to Chromium-based browsers\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWeaknesses\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eAddress bar is visually scoped to tab; using it to swap tabs and launch new tabs makes less sense\u003c/li\u003e\r\n\u003cli\u003eAddress bar is used to show the URL; it is less clear where to search from\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003chr style\u003d\"clear:both\" /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Compact-navigationIf-we-take-the-ad\" /\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"margin:5px 10px;display:inline;float:right\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Compact-navigation\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650263867/chromium-os/user-experience/window-ui/compact_navpng\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/span\u003eCompact navigation\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eIf we take the address bar out of the tab, it can be used as both a launcher and switcher; the user doesn't have to worry about replacing their active tab. The current url shows while a site is loading, and can be edited or changed by clicking on the tab.\u003c/span\u003e\u003c/div\u003e\u003c/h3\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eStrengths\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eSaves vertical real estate for the content area\u003c/li\u003e\r\n\u003cli\u003eSearch can be used as launcher and switcher\u003c/li\u003e\r\n\u003cli\u003eFlexible for larger screens. Users can quickly toggle between this and classic navigation\u003c/li\u003e\r\n\u003cli\u003eApps can provide a better experience with full control of their content area\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWeaknesses\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eCurrent URL is not always visible\u003c/li\u003e\r\n\u003cli\u003eNavigation controls and menus are not located within the tab and lose context sensitivity\u003c/li\u003e\r\n\u003cli\u003eCrowded tab-strip\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-1\" /\u003e\r\n\u003cdiv style\u003d\"margin:5px 10px;display:inline;float:right\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/h3\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-2\" /\u003e\r\n\u003chr style\u003d\"clear:both\" /\u003e\r\n\u003c/h3\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Sidetab-navigationBy-moving-the-tab\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\r\n\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650262525/chromium-os/user-experience/window-ui/side_navpng\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Sidetab-navigation\" /\u003eSidetab navigation\u003c/h4\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eBy moving the tab-strip to the side, we gain a huge amount of real estate for tabs. The vertical alignment also allows for date ordering and grouping of tabs. By moving the address bar out of the tab and above the strip, it can be used both for navigation as well as search.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal\"\u003eStrengths\u003c/span\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eSaves vertical real estate for the content area\u003c/li\u003e\r\n\u003cli\u003eAllows for a large number of tabs\u003c/li\u003e\r\n\u003cli\u003eAllows fire-and-forget tab creation\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWeaknesses\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eWasted space for users with few tabs\u003c/li\u003e\r\n\u003cli\u003eSuperb for full-screen on devices ~1366px wide, but wasteful on larger or smaller displays\u003c/li\u003e\r\n\u003cli\u003eNo clear relationship with Chromium browsers\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\r\n\r\n\u003chr style\u003d\"clear:both\" /\u003e\r\n\r\n\r\n\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Touchscreen-navigation-For-touch-screens-we-provide-much-larger-tab-and-toolbar-targets-than-on-standard-chrome.-This-UI-takes-up-more-screen-space-but-is-ideal-for-portrait-devices-and-can-be-autohidden-to-have-full-screen-content.-This-treatment-could-be\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\r\n\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194858622/chromium-os/user-experience/window-ui/TouchUI.png\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Touchscreen-navigation\" /\u003eTouchscreen navigation\u003c/h4\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal\"\u003e\r\n\r\nFor touch screens, we provide much larger tab and toolbar targets than on standard chrome. This UI takes up more screen space, but is ideal for portrait devices, and can be autohidden to have full-screen content. This treatment could be used on any edge of the screen, and it may be preferable to use the bottom edge depending on the device.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;font-weight:normal\"\u003eStrengths\u003c/span\u003e\u003c/div\u003e\r\n\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eLarge, square targets for navigation. \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/TouchNav.png?attredirects\u003d0\"\u003eexample\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eSupports quick navigation between a few common apps\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eWeaknesses\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eWasted vertical space\u003c/li\u003e\r\n\u003cli\u003eExtremely short app/site titles\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/597852870855786417"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"}],"author":[{}],"sites$pageName":{"$t":"window-ui"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8353014444721743507"},"published":{"$t":"2010-11-19T22:42:55.106Z"},"updated":{"$t":"2010-11-19T22:42:55.130Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-19T22:42:55.106Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WebKit_For_Web_Developers_2.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8353014444721743507"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2822826601424906018"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/rtl-in-webkit/WebKit_For_Web_Developers_2.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8353014444721743507"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8353014444721743507"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8353014444721743507"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8353014444721743507"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6329440885667507361"},"published":{"$t":"2010-11-19T22:42:46.474Z"},"updated":{"$t":"2010-11-19T22:42:46.491Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-19T22:42:46.474Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WebKit_For_Web_Developers_1.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6329440885667507361"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2822826601424906018"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/rtl-in-webkit/WebKit_For_Web_Developers_1.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6329440885667507361"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6329440885667507361"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6329440885667507361"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6329440885667507361"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6921881882837878074"},"published":{"$t":"2010-11-19T17:04:38.812Z"},"updated":{"$t":"2010-11-19T17:04:38.817Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-19T17:04:38.812Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2010-11-18 at 2.59.56 PM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6921881882837878074"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3372033770379792144"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/multi-profiles/Screen%20shot%202010-11-18%20at%202.59.56%20PM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6921881882837878074"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6921881882837878074"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6921881882837878074"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6921881882837878074"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7387660826981781841"},"published":{"$t":"2010-11-17T01:16:34.288Z"},"updated":{"$t":"2010-11-17T01:16:34.293Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-17T01:16:34.288Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"09_options_not_signed_in.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7387660826981781841"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3372033770379792144"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/multi-profiles/09_options_not_signed_in.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7387660826981781841"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7387660826981781841"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7387660826981781841"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7387660826981781841"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3776308262041082320"},"published":{"$t":"2010-11-10T19:18:23.706Z"},"updated":{"$t":"2010-11-10T19:41:15.504Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-10T19:41:15.502Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Firmware Updates"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eFirmware Update Processes and Utilities\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eFlashrom\u003c/b\u003e\u003c/div\u003eChromium OS currently uses Flashrom as the firmware update tool of choice for x86, and has cross-platform ports for ARM, MIPS, and others. Flashrom is an open-source, cross-platform EEPROM programming utility with an active community and a large combination of supported host chipsets, flash memory devices, and external programmers. The code is generally adaptable to a wide variety of chipsets and interfaces and is thus a good candidate for servicing the needs of Chromium OS platforms.\u003cbr /\u003e\u003cbr /\u003eFlashrom main URL: http://www.flashrom.org\u003cdiv\u003eFlashrom @ Chromium.org documentation: http://\u003cspan style\u003d\"font-family:arial,sans-serif;border-collapse:collapse;line-height:19px;white-space:nowrap\"\u003e\u003ca href\u003d\"http://goo.gl/rEAwz\" style\u003d\"color:black;text-decoration:none\" title\u003d\"goo.gl/rEAwz\"\u003egoo.gl/rEAwz\u003c/a\u003e [ \u003ca href\u003d\"https://docs.google.com/document/pub?id\u003d1H8zZ3aEMZmfO4ZEsWbHooUdGOgxy5LTPJ19YbaDsxdQ\"\u003eLong URL\u003c/a\u003e ]\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-updates"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3776308262041082320"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3776308262041082320"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3776308262041082320"}],"author":[{"name":{"$t":"David Hendricks"},"email":{"$t":"dhendrix@chromium.org"}}],"sites$pageName":{"$t":"firmware-updates"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5629412218255739676"},"published":{"$t":"2010-11-04T21:10:54.373Z"},"updated":{"$t":"2010-11-04T21:10:54.373Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-04T21:10:54.373Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5629412218255739676"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5629412218255739676"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5629412218255739676"}],"author":[{"name":{"$t":"Chris Sosa"},"email":{"$t":"sosa@chromium.org"}}],"sites$revision":{"$t":"1"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"HP S372OY"},{"index":"B","name":"Wifi","$t":"Built-in doesn't work"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Bought and used netgear usb network adapter wg111us which worked great"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://www.amazon.com/Netgear-WG111US-Wireless-Usb-Adapter/dp/B0009N544A"}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3057179040675029785"},"published":{"$t":"2010-11-03T11:24:58.576Z"},"updated":{"$t":"2010-11-03T11:24:58.602Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-03T11:24:58.576Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"wrench-icon.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3057179040675029785"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/wrench-icon.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3057179040675029785"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3057179040675029785"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3057179040675029785"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3057179040675029785"}],"author":[{"name":{"$t":"Peter Beverloo"},"email":{"$t":"peter@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4142942142409138426"},"published":{"$t":"2010-11-02T20:21:04.078Z"},"updated":{"$t":"2010-11-02T20:21:04.089Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-02T20:21:04.078Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"wrench-icon.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4142942142409138426"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/devtools/wrench-icon.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4142942142409138426"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4142942142409138426"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4142942142409138426"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4142942142409138426"}],"author":[{"name":{"$t":"Peter Beverloo"},"email":{"$t":"peter@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6730088586114077726"},"published":{"$t":"2010-11-01T20:54:11.250Z"},"updated":{"$t":"2010-11-01T20:54:11.295Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-11-01T20:54:11.250Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Content.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6730088586114077726"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5847157366636870022"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/confirm-to-quit-experiment/Content.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6730088586114077726"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6730088586114077726"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6730088586114077726"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6730088586114077726"}],"author":[{"name":{"$t":"Robert Sesek"},"email":{"$t":"rsesek@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/592935648203124298"},"published":{"$t":"2010-05-25T21:49:49.537Z"},"updated":{"$t":"2010-10-29T18:51:06.501Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-25T21:53:37.028Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Upstream First"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h2\u003e\u003cdiv\u003eThis document outlines a process for managing the flow of kernel source patches between Chromium OS and hardware partners. \u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Goals\" /\u003eGoals\u003c/h2\u003e\u003cdiv\u003eOur goal with the \"Upstream First\" policy is to eliminate kernel version fragmentation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe know that hardware partners support other devices as well as Chromium OS-based devices. So rather than having partners target multiple kernels for multiple devices, we'd like to encourage them to target one kernel: the upstream kernel. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBy having everyone target a single kernel, we hope to avoid duplication of effort and get everyone (our hardware partners, their partners, and the upstream community) working together on improving a single set of patches. By working together, we can build a better kernel and avoid later having to rework changes that are incompatible with the upstream kernel.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Accepting-patches\" /\u003eAccepting patches\u003c/h2\u003e\u003cdiv\u003eA device driver patch must be accepted upstream before it can be accepted into the Chromium OS kernel. Ideally, the patch will be in Linus Torvalds's kernel tree before it is accepted into the Chromium OS kernel. However, other options are also available.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe following list shows options for getting a patch accepted into the Chromium OS kernel. We encourage all partners to strive to attain option 1.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003ePatch options, ordered from high to low preference\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eThe patch is accepted into Linus Torvalds's upstream tree.\u003c/li\u003e\u003cli\u003eThe patch is accepted into the subsystem maintainer tree (such as Dave Miller's netdev tree).\u003c/li\u003e\u003cli\u003eThe patch is accepted into the the device maintainer tree (such as samsung or msm) and a pull request has been sent to Linus Torvalds.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003eAfter the patch is accepted into an upstream tree, Google will cherry-pick it into the Chromium OS kernel. If the patch requires backport work, Google will work with the vendor to do the backport.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eExemptions are granted on a case-by-case basis.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/upstream-first"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/592935648203124298"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/592935648203124298"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/592935648203124298"}],"author":[{}],"sites$pageName":{"$t":"upstream-first"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"Wil7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},"published":{"$t":"2010-03-12T01:27:41.485Z"},"updated":{"$t":"2010-10-29T15:27:50.858Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-29T15:00:05.958Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Accessibility Issue Tracker"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Accessibility-Issues\" /\u003eAccessibility Issues\u003c/h3\u003e\u003cdiv\u003eWe use Chromium's issue tracker to keep track of bugs and feature development. You can keep track of Accessibility issues using the following links:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e        \u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d2\u0026amp;q\u003dlabel:Feature-Accessibility\u0026amp;sort\u003dpri+-stars\" target\u003d\"_blank\"\u003eOpen issues\u003c/a\u003e | \u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d1\u0026amp;q\u003dlabel:feature-accessibility%20status:Fixed,Verified,Duplicate,WontFix,FixUnreleased,Invalid\u0026amp;sort\u003d-modified\" target\u003d\"_blank\"\u003eFixed issues\u003c/a\u003e | \u003ca href\u003d\"http://code.google.com/p/chromium/issues/list?can\u003d1\u0026amp;q\u003dlabel:Feature-Accessibility\u0026amp;sort\u003d-modified\" target\u003d\"_blank\"\u003eAll issues\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4241381013844394989"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"}],"author":[{}],"sites$pageName":{"$t":"tracker"},"sites$revision":{"$t":"53"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2720603773146008574"},"published":{"$t":"2010-10-19T14:31:27.216Z"},"updated":{"$t":"2010-10-19T14:31:27.227Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-19T14:31:27.216Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"index.html"},"summary":{},"content":{"type":"text/html","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2720603773146008574"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5925424391129764958"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/devtools/breakpoints-tutorial/index.html"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2720603773146008574"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2720603773146008574"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2720603773146008574"},{"rel":"edit-media","type":"text/html","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2720603773146008574"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2521744531480161103"},"published":{"$t":"2010-10-19T14:28:20.507Z"},"updated":{"$t":"2010-10-19T14:28:20.529Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-19T14:28:20.507Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"script.js"},"summary":{},"content":{"type":"application/javascript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2521744531480161103"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5925424391129764958"},{"rel":"alternate","type":"application/javascript","href":"https://sites.google.com/a/chromium.org/dev/devtools/breakpoints-tutorial/script.js"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2521744531480161103"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2521744531480161103"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2521744531480161103"},{"rel":"edit-media","type":"application/javascript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2521744531480161103"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6392139541872209510"},"published":{"$t":"2010-09-06T14:05:48.846Z"},"updated":{"$t":"2010-10-11T21:01:22.781Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T21:01:22.776Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"The life of sel_ldr"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003esel_ldr stands for Secure ELF Loader and is the heart of Native Client. The plugin (or other supervisor) starts sel_ldr, loads nacl module, opens SRPC channels, communicates and terminates sel_ldr at the end.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eStarting sel_ldr\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn order to start sel_ldr, we need to create a \u003cspan style\u003d\"font-family:monospace;font-size:medium;white-space:pre\"\u003esocketpair(AF_UNIX, SOCK_DGRAM, 0, fds)\u003c/span\u003e and pass the one side of it to sel_ldr.\u003c/div\u003e\u003cdiv\u003eThe minimal set of sel_ldr arguments is:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esel_ldr -i D:5 -X 5 -- nacl_module \u0026lt;nacl_module_args\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003ewhere D\u003dfds[0] is the file descriptor of the above socketpair half. This socketpair is the service socket which will be used to obtain some descriptors from sel_ldr.\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cb\u003eReceiving a bound socket\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe first action we need to do is to receive a bound socket that will be used to open SRPC channels. It's very simple, we need just to call recvmsg on the plugin's half of the above socketpair. The simplification of \u003cfont face\u003d\"'courier new', monospace\"\u003esrc/nonnacl_util/sel_ldr_launcher.cc::GetSockAddr\u003c/font\u003e method:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint* control \u003d (int*)calloc(100, sizeof(int));\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estruct iovec iov;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eiov.iov_base \u003d calloc(100, 1);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eiov.iov_len \u003d 100;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estruct msghdr msg;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_name \u003d NULL;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_namelen \u003d 0;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_iov \u003d \u0026amp;iov;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_iovlen \u003d 1;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_control \u003d control;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_controllen \u003d 100 * sizeof(int);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_flags \u003d 0;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003erecvmsg(fds[1], \u0026amp;msg, 0)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint bound_socket \u003d control[4]; // This is the socket we wanted to receive\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// NOTE: this is a hacky code, it does not check for errors, so it should not be used in production.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSee \u003cfont face\u003d\"'courier new', monospace\"\u003eman recvmsg\u003c/font\u003e for more details.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAlso, you can look into \u003ca href\u003d\"http://ptspts.blogspot.com/2009/11/fuse-protocol-tutorial-for-linux-26.html\" rel\u003d\"nofollow\"\u003efuse tutorial\u003c/a\u003e. They also start fusermount with a socketpair like above and receive the file descriptor to communicate with the kernel. That documentation could be a good explanation why does it work this way.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eOpening SRPC channels\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe plugin opens 2 SRPC channels: trusted_command, and untrusted. The first one is used to pass commands to the trusted part of sel_ldr. It is opened first and we need to do the following:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e1. Create a DGRAM socket pair like we did in the first paragraph\u003c/div\u003e\u003cdiv\u003e2. Send a half of the socket pair to bound_socket via sendmsg (see below for a code snippet)\u003c/div\u003e\u003cdiv\u003e3. Use the other half of the socket pair as the descriptor for SRPC channel\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSending a file descriptor is very similar to receiving:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;font-size:medium;white-space:pre\"\u003eint srpc_fds[2];\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;font-size:medium;white-space:pre\"\u003esocketpair(AF_UNIX, SOCK_DGRAM, 0, srpc_fds)\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eint* control \u003d (int*)calloc(100, sizeof(int));\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtrol[0] \u003d 20;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtrol[1] \u003d 0;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtrol[2] \u003d 1;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtrol[3] \u003d 1;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003econtrol[4] \u003d srpc_fds[0]; // Sending the half of the socket pair\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estruct iovec iov;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003echar* base \u003d (char*) calloc(100, 1);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebase[0] \u003d 'c';\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eiov.iov_base \u003d base\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eiov.iov_len \u003d 1;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estruct msghdr msg;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_name \u003d NULL;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_namelen \u003d 0;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_iov \u003d \u0026amp;iov;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_iovlen \u003d 1;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_control \u003d control;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_controllen \u003d 20;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg.msg_flags \u003d 0;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003esendmsg(bound_socket, \u0026amp;msg, 0)\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// srpc_fds[1] is the fd to use for SRPC communication\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eSo, the first SRPC channel is opened and we will call it trusted_command channel. The first what we should do with it is to call SRPC method service_discovery::C to get the list of available SRPC methods for this channel. service_discovery method always has index 0, so we can do it w/o the knowledge of the available methods.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eTo read about SRPC, go to \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/system/errors/NodeNotFound?suri\u003dwuid:gx:3e5ac6935bee42c7\" class\u003d\"disabled\"\u003eUsing Simple RPC to Implement Native Client Services\u003c/a\u003e, the \u003ca href\u003d\"http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/scons-out/doc/html/group___s_r_p_c.html\"\u003ereference\u003c/a\u003e or \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003enative_client/src/shared/srpc\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e in the Native Client sources. Take a look into native_client/src/shared/srpc/rpc_serialize.c to get understanding of SRPC marshalling.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eTo call SRPC method we need to sendmsg with the serialized SRPC call and after that recvmsg to get the answer. In the simplest case of service_discovery::C we need to send the following:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eiov \u003d [{\"\\1\\336\\300\\323\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 16}, {\"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0C\\240\\17\\0\\0\", 30}]\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe first string is an SRPC banner that is constant.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe second string has the following format (according to \u003c/font\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003enative_client/src/shared/srpc/rpc_serialize.c\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e):\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e/*\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * Message formats:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * SRPC communicates using two main message types, requests and responses.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * Both are communicated with an rpc (header) prepended.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * rpc:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   protocol               - (uint32_t) 4 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   message id             - (uint64_t) 8 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   request/response       - (uint8_t) 1 byte\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   rpc method index       - (uint32_t) 4 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   return code            - (uint32_t) 4 bytes (only sent for responses)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * request:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #args                  - (uint32_t) 4 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #args * (arg value)    - varying size defined by interface below\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #rets                  - (uint32_t) 4 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #rets * (arg template) - varying size defined by interface below\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e * response:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #rets                  - (uint32_t) 4 bytes\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *   #rets * (arg value)    - varying size defined by interface below\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e *\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e */\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen we sent service_discover::C message, sel_ldr will reply with something like:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emsg_iov(2)\u003d[\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e {\"\\1\\336\\300\\323\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 16},\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e {\"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\1\\0\\0\\0CM\\0\\0\\0service_discovery::C\\nhard_shutdown::\\nstart_module::i\\nlog:is:\\nload_module:h:\\n\\0\", 107}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e]\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAs we can see, the first 16 bytes are still the SRPC banner. The second string contains the list of methods:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eservice_discovery::C\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ehard_shutdown::\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003estart_module::i\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003elog:is:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eload_module:h:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBefore we can open the untrusted SRPC channel, we need to start a NaCl module. Currently, sel_ldr has been validated and initialized nacl_module but not started it.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAs we can see, start_module has the index 2, so the corresponding message (omitting the banner) is:\u003cbr /\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\1\\2\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0i\"\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003eSel_ldr will reply with:\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\0\\2\\0\\0\\0\\0\\1\\0\\0\\1\\0\\0\\0i\\0\\0\\0\\0\"\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003eNow we can open the untrusted SRPC channel. It's completely the same procedure as opening the trusted_command channel: make a socket pair, sent it to the bound socket, obtain the list of methods via service_discovery::C. When it's done, everything is initialized. NaCl module has been started to work and sel_ldr will be alive until the termination of untrusted program (represented by a NaCl module) or until the supervisor (e.g. the plugin) tells to sel_ldr that it needs to shutdown.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHopefully, this information will be needed to just a few developers which are working on implementing alternative plugins for Native Client or other sandboxing libraries (for example, for server-side NaCl).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote, that this is a low level information which were obtained with strace. All the process could be changed over time and there were the changes last three months. So, it's more likely an overview of what's happening, nothing more.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5663733556794389665"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/life-of-sel_ldr"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6392139541872209510"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6392139541872209510"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6392139541872209510"}],"author":[{"name":{"$t":"Ivan Krasin"},"email":{"$t":"krasin@chromium.org"}}],"sites$pageName":{"$t":"life-of-sel_ldr"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},"published":{"$t":"2010-10-11T18:07:24.021Z"},"updated":{"$t":"2010-10-11T18:25:37.067Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:25:37.065Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Download Manager Sequences"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe following are typical paths taken during a file download.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe start sequence shows what happens after the headers have been received in response to an HTTP request for a file.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_start.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1286820496980/developers/design-documents/downloadmanagersequences/Download_start.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003eStart\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis sequence shows what happens when the file has finished downloading:\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_complete.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1286820512440/developers/design-documents/downloadmanagersequences/Download_complete.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;display:block\"\u003eComplete\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis sequence shows what happens when the user resumes a download that has been paused:\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_unpaused.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1286820520151/developers/design-documents/downloadmanagersequences/Download_unpaused.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;display:block\"\u003eUnpause\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003eThis following sequences have not been checked in yet.\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003eThis sequence shows what should happen when an error occurs during a file download.\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003eNote that currently, the \"Complete\" sequence is executed in this case, so the file appears to have downloaded properly but is in fact incomplete.\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_interrupted.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1286820527125/developers/design-documents/downloadmanagersequences/Download_interrupted.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;display:block\"\u003eInterrupted\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis shows how a sequence would be restarted after an interruption (error) occurs.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eIt basically sends a new request for the remainder of the data, and appends it to the existing partial file.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_restart.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1286820535487/developers/design-documents/downloadmanagersequences/Download_restart.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003eRestart\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7977014058559694187"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"}],"author":[{}],"sites$pageName":{"$t":"downloadmanagersequences"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8654695105852004296"},"published":{"$t":"2010-10-11T18:08:55.469Z"},"updated":{"$t":"2010-10-11T18:08:55.487Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:08:55.469Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Download_restart.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8654695105852004296"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_restart.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8654695105852004296"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8654695105852004296"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8654695105852004296"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8654695105852004296"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2451970557136280640"},"published":{"$t":"2010-10-11T18:08:47.121Z"},"updated":{"$t":"2010-10-11T18:08:47.125Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:08:47.121Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Download_interrupted.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2451970557136280640"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_interrupted.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2451970557136280640"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2451970557136280640"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2451970557136280640"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2451970557136280640"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/296649144707564146"},"published":{"$t":"2010-10-11T18:08:40.146Z"},"updated":{"$t":"2010-10-11T18:08:40.151Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:08:40.146Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Download_unpaused.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/296649144707564146"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_unpaused.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/296649144707564146"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/296649144707564146"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/296649144707564146"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/296649144707564146"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1289451740879532015"},"published":{"$t":"2010-10-11T18:08:32.424Z"},"updated":{"$t":"2010-10-11T18:08:32.440Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:08:32.424Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Download_complete.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1289451740879532015"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_complete.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1289451740879532015"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1289451740879532015"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1289451740879532015"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1289451740879532015"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1530603418395061068"},"published":{"$t":"2010-10-11T18:08:16.966Z"},"updated":{"$t":"2010-10-11T18:08:16.980Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-11T18:08:16.966Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Download_start.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1530603418395061068"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7977014058559694187"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/downloadmanagersequences/Download_start.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1530603418395061068"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530603418395061068"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530603418395061068"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1530603418395061068"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5025391808999050782"},"published":{"$t":"2010-10-10T20:32:09.274Z"},"updated":{"$t":"2010-10-10T20:32:09.286Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-10T20:32:09.274Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"arrow.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5025391808999050782"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/arrow.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5025391808999050782"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5025391808999050782"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5025391808999050782"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5025391808999050782"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6311096522829351569"},"published":{"$t":"2010-10-10T20:20:08.825Z"},"updated":{"$t":"2010-10-10T20:26:09.966Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-10-10T20:26:09.957Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"wrench.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6311096522829351569"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/wrench.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6311096522829351569"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6311096522829351569"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6311096522829351569"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6311096522829351569"}],"author":[{}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5263383439803917462"},"published":{"$t":"2010-09-28T18:25:57.161Z"},"updated":{"$t":"2010-09-29T05:04:16.030Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-28T20:17:27.618Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SPDY Server and Proxy Authentication"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eSupport for Server and Proxy Authentication in SPDY is very similar to Server and Proxy Authentication in HTTP.\u003ch2\u003e\u003ca name\u003d\"TOC-Server-Authentication\" /\u003eServer Authentication\u003c/h2\u003e\u003cdiv\u003eWhen a client sends a request to an origin server that requires authentication, the server can reply with a \u003ccode\u003e401 Unauthorized\u003c/code\u003e\" response, and a \u003ccode\u003eWWW-Authenticate\u003c/code\u003e header that defines the authentication scheme to be used.  The client then retries the request with an \u003ccode\u003eAuthorization\u003c/code\u003e header appropriate to the specified authentication scheme.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThere are four options for sever authentication, Basic, Digest, NTLM and Negotiate (SPNEGO).  The first two options were defined in \u003ca href\u003d\"http://www.ietf.org/rfc/rfc2617.txt\" rel\u003d\"nofollow\"\u003eRFC 2617\u003c/a\u003e, and are stateless.  The second two options were developed by Microsoft and specified in \u003ca href\u003d\"http://www.ietf.org/rfc/rfc4559.txt\" rel\u003d\"nofollow\"\u003eRFC 4559\u003c/a\u003e, and are stateful; otherwise known as multi-round authentication, or connection authentication.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Stateless-Authentication\" /\u003eStateless Authentication\u003c/h3\u003e\u003cdiv\u003eBoth Basic and Digest Server Authentication are stateless.  These schemes define ways for the browser to encode a username and password in the HTTP request which the server can verify.  In the case of Basic Auth, the client simply base64 encodes the password.  In the case of Digest, the client hashes the username, password, and a variety of other attributes together.  Once a server requests Basic or Digest Authentication, the client is able to generate a correct \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eAuthorization\u003c/code\u003e header for any subsequent request to the same server.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBasic and Digest authentication is handled in SPDY in much the same way as with HTTP.  Here is a sample SPDY session using Basic authentication:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-size:16px;line-height:20px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"background-color:rgb(239,239,239);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(211,211,211);border-right-color:rgb(211,211,211);border-bottom-color:rgb(211,211,211);border-left-color:rgb(211,211,211);display:block;padding-top:0.5em;padding-right:0px;padding-bottom:0.5em;padding-left:1em;line-height:13px;font-size:13px\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e Client                        Server\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e ------                        ------\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client makes initial, unauthenticated request to the server.\u003c/code\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 1) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 1\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/a |\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 2) SYN_REPLY                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 1\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e   |    status \u003d 401               |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    www-authenticate \u003d Basic   |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/span\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client retries request with authorization header.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 3) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/a |\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    authorization \u003d Basic XXX  \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 4) SYN_REPLY                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e   |    status \u003d 200               |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |                               |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client request next resource with authorization header.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 5) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 5\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/b |\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    authorization \u003d Basic XXX  \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 4) SYN_REPLY                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 5\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e              |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e   |    status \u003d 200               |\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                 |\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the1\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the2\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the3\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv /\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/span\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Stateful-Authentication\" /\u003eStateful Authentication\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-The-NTLM-and-Negotiate-Authentication-scheme-are-more-complicated.-Instead-of-enabling-the-browser-to-generate-an-Authorization-header-which-can-be-used-for-subsequent-requests-to-the-server-these-schemes-attempt-to-authenticate-the-connection.-After-the-a\" /\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eThe NTLM and Negotiate Authentication scheme are more complicated.  Instead of enabling the browser to generate an \u003ccode\u003eAuthorization\u003c/code\u003e header which can be used for subsequent requests to the server, these schemes attempt to authenticate the \u003c/span\u003e\u003cspan style\u003d\"font-size:13px\"\u003econnection\u003cspan style\u003d\"font-weight:normal\"\u003e.  After the authentication is complete, the server marks the connection as authorized, and the client sends subsequent requests without any \u003ccode\u003eAuthorization\u003c/code\u003e header.\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003cdiv\u003eMulti-round authentication is handled in SPDY in much the same way as with HTTP.  A new stream is created for each round in the process, corresponding to a request/response pair in the HTTP process.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"font-size:13px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-size:16px;line-height:20px\"\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\" style\u003d\"background-color:rgb(239,239,239);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(211,211,211);border-right-color:rgb(211,211,211);border-bottom-color:rgb(211,211,211);border-left-color:rgb(211,211,211);display:block;padding-top:0.5em;padding-right:0px;padding-bottom:0.5em;padding-left:1em;line-height:13px;font-size:13px\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e Client                        Server\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e ------                        ------\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68)\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client makes initial, unauthenticated request to the server.\u003c/code\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |----------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 1) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 1\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/a     |\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;----------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 2) SYN_REPLY                      |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 1\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e   |    status \u003d 401                   |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    www-authenticate \u003d Negotiate   |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/span\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client retries request with authorization header.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |----------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 3) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/a     |\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    authorization \u003d Negotiate AA   \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;----------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 4) SYN_REPLY                      |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    status \u003d 401                   |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    www-authenticate \u003d Negotiate BB|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\" /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |                                   |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client retries request with authorization header.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |----------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 3) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/a     |\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    authorization \u003d Negotiate CC   \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;----------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 4) SYN_REPLY                      |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 3\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    status \u003d 200                   |\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |    www-authenticate \u003d Negotiate DD|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\" /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   |                                   |\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e *** Client request next resource without authorization header.\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |----------------------------------\u0026gt;\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   | 5) SYN_STREAM\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 5\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    url \u003d http://example.com/b     |\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |                                   \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e   |\u0026lt;----------------------------------\u003c/code\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e|\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e   | 4) SYN_REPLY                      |\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,96,0);font-family:monospace\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |    stream_id \u003d 5\u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                  |\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e   |    status \u003d 200                   |\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv style\u003d\"color:rgb(68,68,68);font-family:Arial,Verdana,sans-serif\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e   |              \u003c/font\u003e\u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e                     |\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the1\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the2\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ch4 style\u003d\"font-weight:normal;color:rgb(68,68,68);font-size:1.2em\"\u003e\u003ca name\u003d\"TOC-After-request-has-been-received-the3\" style\u003d\"color:rgb(0,51,204);outline-style:none;outline-width:initial;outline-color:initial;text-decoration:underline\" /\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv /\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/span\u003eHowever, one difference in how stateful authentication is handled between HTTP and SPDY results from the multiplexed nature of SPDY sessions.  With a single SPDY session, a client can sent multiple requests in parallel before receiving the first response.  This complicates the stateful authentication schemes which are attempting to perform a single authentication of the \u003c/span\u003e\u003cb\u003econnection\u003c/b\u003e.  If the server receives two requests (streams 1 and 3) on an unauthenticated session, it will reply \u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e401 Unauthorized\u003c/span\u003e to  each stream.  However, it is not entirely clear how the authentication should continue.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOne option would be for the client to complete the authentication on the first unauthorized stream and then assume that the connection will then be authenticated and continue issuing requests without authorization headers.  However, it is possible for different resources on the same server to require different authentication.  These resources would need to specify different \"realms\" when requesting authentication.  When the client receives a 401, it would need to be aware of any outstanding authentication transaction for that same realm, and wait for it to complete.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003eAn alternative option would be for the client to complete the authentication for both unauthorized streams.  However, as currently specified, there is no obvious way to distinguish the 2nd attempt to request the first resource from the 2nd attempt to request the second resource.  It is possible the the URL in the headers might be identical.  It would seem to require that the client pass a \u003ccode\u003eX-Associated-Stream\u003cfont color\u003d\"#000000\" face\u003d\"Arial, Verdana, sans-serif\"\u003e, or \u003c/font\u003eX-Authorization-Context\u003c/code\u003e header in each subsequent authentication request so the server is able to correctly understand the context of the request.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Proxy-Authentication\" /\u003eProxy Authentication\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003eWhen a client sends a request to a proxy server that requires authentication, the same basic protocol is used.  Instead of a \u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003e401 Unauthorized\u003c/span\u003e response, the proxy can reply with a \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003e407 Proxy Authentication Required\u003c/code\u003e response, and a \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eProxy-Authenticate\u003c/code\u003e header instead of an \u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003eAuthenticate\u003c/span\u003e.  The client then retries the request with a \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eProxy-Authorization\u003c/code\u003e header in place of an \u003cspan style\u003d\"font-family:monospace;color:rgb(0,96,0)\"\u003eAuthorization\u003c/span\u003e header.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-authentication"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5263383439803917462"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5263383439803917462"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5263383439803917462"}],"author":[{"name":{"$t":"Ryan Hamilton"},"email":{"$t":"rch@chromium.org"}}],"sites$pageName":{"$t":"spdy-authentication"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3999097428235550707"},"published":{"$t":"2010-09-26T20:48:09.606Z"},"updated":{"$t":"2010-09-27T18:05:34.905Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-27T18:05:34.903Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Running Unit Tests On The Target"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eIn an ideal world, you'd mock out all of your dependencies so you can run your unit tests on your development machine.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen this isn't feasible, don't let it stand in your way:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAdd a USE flag \"install-tests\" to your ebuild:\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eIUSE\u003d\"install_tests\"\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eand conditionalize your unit test libraries on this flag:\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003eRDEPEND\u003d\"blah\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cspan\u003e    blah\u003c/span\u003e\u003cbr /\u003e\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003ccode\u003einstall_tests? ( dev-cpp/gtest )\"\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThen build the use flag into a make flag:\u003c/div\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003euse install_tests \u0026amp;\u0026amp; MAKE_FLAGS\u003d\"INSTALL_TESTS\u003d1\"\u003c/code\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cbr /\u003e\u003cdiv\u003eand pass that to your package:\u003c/div\u003e\u003cdiv\u003e\u003cdiv /\u003e\u003cdiv /\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003cdiv\u003e\u003ccode\u003esrc_compile() {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003ccode\u003etc-export CXX PKG_CONFIG\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003ccode\u003ecros-debug-add-NDEBUG\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003ccode\u003eemake ${MAKE_FLAGS} PLUGINDIR\u003d\"${PLUGINDIR}\" || die \"Failed to compile\"\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Arial,Verdana,sans-serif;line-height:normal\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003ccode\u003esrc_install() {\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"white-space:pre\"\u003e\t\u003c/span\u003e\u003ccode\u003eemake ${MAKE_FLAGS} DESTDIR\u003d${D} install || die \"Install failed\"\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e}\u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv /\u003e\u003c/div\u003e\u003cdiv\u003esee cromo's ebuild for an example\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo develop with gmerge, set this flag on the commandline when you start your devserver:\u003c/div\u003e\u003cdiv\u003e\u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eUSE\u003dinstall_tests ./start_devserver \u003c/code\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eNote that you must do this within the chroot.  If you run the devserver from outside of the chroot, it will drop its environment in the process of entering the chroot, and your USE flag will get dropped.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/running-unit-tests-on-the-target"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3999097428235550707"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3999097428235550707"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3999097428235550707"}],"author":[{}],"sites$pageName":{"$t":"running-unit-tests-on-the-target"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1858216761845116576"},"published":{"$t":"2010-09-24T13:03:53.954Z"},"updated":{"$t":"2010-09-24T13:03:53.978Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-24T13:03:53.965Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#announcementspage","label":"announcementspage"}],"title":{"$t":"Announcements"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/devtools/announcements"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1858216761845116576"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1858216761845116576"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1858216761845116576"}],"author":[{}],"gd$feedLink":{"href":"https://sites.google.com/feeds/content/chromium.org/dev?parent\u003d1858216761845116576"},"sites$pageName":{"$t":"announcements"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3250685908410298168"},"published":{"$t":"2010-05-26T00:29:21.512Z"},"updated":{"$t":"2010-09-22T21:19:10.661Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-22T21:19:10.647Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"perf.patch.txt"},"summary":{},"content":{"type":"text/plain","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3250685908410298168"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/678998186334309712"},{"rel":"alternate","type":"text/plain","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/perf.patch.txt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3250685908410298168"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250685908410298168"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3250685908410298168"},{"rel":"edit-media","type":"text/plain","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3250685908410298168"}],"author":[{"name":{"$t":"Richard Barnette"},"email":{"$t":"jrbarnette@chromium.org"}}],"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2020700638255233750"},"published":{"$t":"2010-09-22T18:18:01.060Z"},"updated":{"$t":"2010-09-22T18:18:01.071Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-22T18:18:01.060Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#comment","label":"comment"}],"title":{"$t":""},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003eRegarding the last paragraph:\u003cbr /\u003e\u003cbr /\u003e\"\"\"\u003cbr /\u003eEach data resource would become a .c file which we compile into a single .so. This is very similar to the current approach on Windows and would allow us to embed data resources into the main chrome.so. This might also be a bit faster to load because it doesn't have to parse the data file index. The only drawback to this approach is that it loads data as code. On Windows, you can load a dll with LoadLibraryEx(LOAD_AS_DATAFILE) which prevents code execution in the case of a corrupt file. I don't know of a way to do something similar on Linux.\u003cbr /\u003e\"\"\"\u003cbr /\u003e\u003cbr /\u003eI'm not sure what you mean exactly. On Linux, you can dlopen(..., RTLD_LOCAL) the .so and dlsym() either the resource symbol name directly, or lookup the resource directory table symbol. No code involved.\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8560979433351832904"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2020700638255233750"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2020700638255233750"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2020700638255233750"}],"author":[{"email":{"$t":"behdad@chromium.org"}}],"thr$in-reply-to":{"href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/linuxresourcesandlocalizedstrings","ref":"https://sites.google.com/feeds/content/chromium.org/dev/8560979433351832904","source":"https://sites.google.com/feeds/content/chromium.org/dev","type":"text/html"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"},"published":{"$t":"2010-09-15T23:44:50.303Z"},"updated":{"$t":"2010-09-16T18:58:32.855Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-16T18:58:32.851Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Internationalization of Autofill"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-style:normal\"\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eObjective\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003cbr /\u003eTo extend the Autofill feature in Chrome to better handle non-English and non-US pages and user address and credit card information.\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Background\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\" /\u003e\u003cfont size\u003d\"4\"\u003eBackground\u003c/font\u003e\u003c/h2\u003eThe Autofill feature shipped with Chrome 6.  Localization of the Autofill UI was achieved, but opportunities to provide deeper internationalization of the feature exist.\u003cbr /\u003e\u003cspan style\u003d\"font-size:large;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:large;font-weight:bold\"\u003eUser Experience\u003c/span\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eAddresses\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eThe addresses stored in Autofill settings/preferences will better adapt to non-US addresses.  For example, a Canadian address will present \"Postal Code\" instead of \"Zip Code\". Additional fields such as \"Prefecture\" may be appropriate in Japan.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe \"Country\" field will use a popup selection of countries.  This allows for more dynamic structure for locale-specific address information.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1284663250962/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor different regions, such as Japan, additional local-specific fields may be introduced.  For example, notice \"Prefecture\" below.  Notice also the renaming of \"Zip code\" to \"Postal code\" and reordering of fields:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1284663258371/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eForm Field Matching\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eAutofill analyses web pages to find appropriate form fields for filling.  This analysis will be enhanced to cover a greater variety of non-English pages.\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cb\u003eHTML / JavaScript based UI\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003ePlatform-specific UI for Autofill will be deprecated in favor of HTML / JavaScript based UI (aka \"DOMUI\").  Internationalization of Autofill will apply to this new DOMUI only.  Dynamic layout of the Autofill user preferences will be data-driven based on declarative descriptions of locale-specific address formats.\u003c/div\u003e\u003cdiv style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cfont size\u003d\"4\"\u003eImplementation\u003c/font\u003e\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eData Structures\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eLocale information is sourced from three places:\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eApplication Locale.  The locale of the running Chrome application.\u003c/li\u003e\u003cli\u003eForm Locale.  The locale information, if any, associated with the HTML page containing the form.\u003c/li\u003e\u003cli\u003eAddress Locale.  The locale dictated by the address \"Country\" field set by the user in Autofill preferences.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eProgram Flow\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eDuring page-load Autofill analyses the forms within the page for fillable fields.  Program flow (A) is the current flow of control through the system.\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv\u003eForms may or may not contain locale information directly, in which case we attempt to derive the locale by other means.  The strategy employed is as follows:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e  1. \u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eThe FormManager will be enhanced to pull locale information from the WebKit DOM (see (B) in the diagram below).  \u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eGive preference to local information set in the HTML markup.  \u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003eFor example:\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    \u003cspan\u003e    \u0026lt;form lang\u003d\"fr-CA\"\u0026gt;...\u0026lt;/form\u0026gt;\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    \u003cspan\u003e    \u0026lt;div lang\u003d\"fr-CA\"\u0026gt;\u0026lt;form\u0026gt;...\u0026lt;/form\u0026gt;\u0026lt;/div\u0026gt;\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cspan\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    \u003cspan\u003e    \u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u0026lt;html\u0026gt;\u0026lt;head\u0026gt;\u0026lt;meta http-equiv\u003d\"Content-Language\" content\u003d\"fr-CA\"/\u0026gt;\u0026lt;/head\u0026gt;...\u0026lt;/html\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e    Would all yield a Form Locale of \"fr-CA\".\u003c/span\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e  2. If no locale information is set by the page author, then the textual contents of the page are analysed.  \u003c/span\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003eThe Compact Language Detection ( \u003cfont face\u003d\"'courier new', monospace\"\u003esrc/third_party/cld/...\u003c/font\u003e ) module is utilized for this \u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e(see (C) in diagram below)\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003e.\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan\u003e  3. \u003c/span\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eURL top-level domain suffix may also be used if other sources of information about locale are not present (not pictured).\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cspan\u003e\u003cspan\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1284595555669/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg\" /\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5754810029430160012"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/73647222267414691"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"}],"author":[{}],"sites$pageName":{"$t":"internationalization-of-autofill"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4752613073582018137"},"published":{"$t":"2010-09-16T18:54:18.359Z"},"updated":{"$t":"2010-09-16T18:54:18.371Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-16T18:54:18.359Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"autofill_i18l_address_jp_ui.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4752613073582018137"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4752613073582018137"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4752613073582018137"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4752613073582018137"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4752613073582018137"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5836728826912749033"},"published":{"$t":"2010-09-16T18:54:10.929Z"},"updated":{"$t":"2010-09-16T18:54:10.962Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-16T18:54:10.929Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"autofill_i18l_address_ui.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5836728826912749033"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5836728826912749033"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5836728826912749033"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5836728826912749033"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5836728826912749033"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5289055195121872636"},"published":{"$t":"2010-09-16T18:33:38.608Z"},"updated":{"$t":"2010-09-16T18:33:38.624Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-16T18:33:38.608Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tree_status.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5289055195121872636"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4013094278607135655"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/tree-sheriffs/sheriff-details-chromium/tree_status.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5289055195121872636"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5289055195121872636"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5289055195121872636"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5289055195121872636"}],"author":[{"name":{"$t":"Lei Zhang"},"email":{"$t":"thestig@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3914557640818893951"},"published":{"$t":"2010-09-16T00:05:55.656Z"},"updated":{"$t":"2010-09-16T00:05:55.669Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-16T00:05:55.656Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"autofill_i18n_design.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3914557640818893951"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/73647222267414691"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3914557640818893951"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3914557640818893951"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3914557640818893951"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3914557640818893951"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7546351688867768248"},"published":{"$t":"2010-09-10T21:55:42.204Z"},"updated":{"$t":"2010-09-10T21:55:42.228Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:55:42.204Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"recovery.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7546351688867768248"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7546351688867768248"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7546351688867768248"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7546351688867768248"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7546351688867768248"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8615945047058162926"},"published":{"$t":"2010-09-10T21:55:27.273Z"},"updated":{"$t":"2010-09-10T21:55:27.301Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:55:27.273Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"normal.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8615945047058162926"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/normal.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8615945047058162926"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8615945047058162926"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8615945047058162926"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8615945047058162926"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7881825090899339993"},"published":{"$t":"2010-09-10T21:54:57.355Z"},"updated":{"$t":"2010-09-10T21:54:57.374Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:54:57.355Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"readonly.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7881825090899339993"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7881825090899339993"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7881825090899339993"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7881825090899339993"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7881825090899339993"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3998823607462514099"},"published":{"$t":"2010-09-10T21:54:27.573Z"},"updated":{"$t":"2010-09-10T21:54:27.604Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:54:27.573Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"kernel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3998823607462514099"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3998823607462514099"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3998823607462514099"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3998823607462514099"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3998823607462514099"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4715868006283413835"},"published":{"$t":"2010-09-10T21:54:09.400Z"},"updated":{"$t":"2010-09-10T21:54:09.415Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:54:09.400Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"firmware.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4715868006283413835"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4715868006283413835"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4715868006283413835"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4715868006283413835"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4715868006283413835"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3032585949295193650"},"published":{"$t":"2010-09-10T21:53:48.255Z"},"updated":{"$t":"2010-09-10T21:53:48.310Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:53:48.255Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"keyblock.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3032585949295193650"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3032585949295193650"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3032585949295193650"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3032585949295193650"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3032585949295193650"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2485584850384884844"},"published":{"$t":"2010-09-10T21:53:26.090Z"},"updated":{"$t":"2010-09-10T21:53:26.105Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:53:26.090Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"vbsignature.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2485584850384884844"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2485584850384884844"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2485584850384884844"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2485584850384884844"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2485584850384884844"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/174930806106840979"},"published":{"$t":"2010-09-10T21:53:08.691Z"},"updated":{"$t":"2010-09-10T21:53:08.711Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T21:53:08.691Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"vbpublickey.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/174930806106840979"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9075125316842337239"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/174930806106840979"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/174930806106840979"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/174930806106840979"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/174930806106840979"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2047456182213767027"},"published":{"$t":"2010-09-10T19:56:05.219Z"},"updated":{"$t":"2010-09-10T19:57:28.651Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T19:57:28.643Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"kernel2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2047456182213767027"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5815894304228514837"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/disk-format/kernel2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2047456182213767027"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2047456182213767027"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2047456182213767027"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2047456182213767027"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7120342570202075405"},"published":{"$t":"2010-09-10T19:52:32.969Z"},"updated":{"$t":"2010-09-10T19:52:32.980Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T19:52:32.969Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flow.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7120342570202075405"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5815894304228514837"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/disk-format/flow.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7120342570202075405"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7120342570202075405"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7120342570202075405"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7120342570202075405"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/718840672052222525"},"published":{"$t":"2010-09-10T19:51:44.232Z"},"updated":{"$t":"2010-09-10T19:51:44.249Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-10T19:51:44.232Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"layout.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/718840672052222525"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5815894304228514837"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/disk-format/layout.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/718840672052222525"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/718840672052222525"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/718840672052222525"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/718840672052222525"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9171924427566259872"},"published":{"$t":"2010-09-08T15:59:25.889Z"},"updated":{"$t":"2010-09-08T16:04:09.454Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-08T16:04:09.452Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SPDYProtocol.xml"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/385872135698932510"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdyprotocol-xml"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9171924427566259872"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9171924427566259872"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9171924427566259872"}],"author":[{}],"sites$pageName":{"$t":"spdyprotocol-xml"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2462986117533175631"},"published":{"$t":"2010-09-02T15:21:46.467Z"},"updated":{"$t":"2010-09-02T15:21:48.029Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-02T15:21:46.467Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome-a11y-2010-09-02.zip"},"summary":{},"content":{"type":"application/x-zip-compressed","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2462986117533175631"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"application/x-zip-compressed","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/chrome-a11y-2010-09-02.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2462986117533175631"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2462986117533175631"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2462986117533175631"},{"rel":"edit-media","type":"application/x-zip-compressed","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2462986117533175631"}],"author":[{"name":{"$t":"Dominic Mazzoni"},"email":{"$t":"dmazzoni@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Xil7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5790027220183470225"},"published":{"$t":"2010-02-28T22:08:40.863Z"},"updated":{"$t":"2010-09-01T16:15:02.382Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-09-01T16:15:02.379Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"IndexedDB Design Doc"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#CC0000\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThis is quite outdated.  The fundamental design is still pretty similar to what's described here, but this document is now of limited usefulness.\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003cspan style\u003d\"font-size:medium\"\u003ePlease send any feedback you might have to \u003c/span\u003e\u003ci\u003e\u003cspan style\u003d\"font-size:medium\"\u003eJeremy Orlow \u0026lt;jorlow@chromium.org\u0026gt;\u003c/span\u003e\u003c/i\u003e\u003cspan style\u003d\"font-size:medium\"\u003e or \u003c/span\u003e\u003ci\u003e\u003cspan style\u003d\"font-size:medium\"\u003echromium-dev@chromium.org\u003c/span\u003e\u003c/i\u003e\u003cspan style\u003d\"font-size:medium\"\u003e.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eIntroduction:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe IndexedDB API implements a persistent (across browser/machine restarts) database that is quite stripped down.  It is built upon \"Object Stores\" (btrees of key-\u0026gt;value pairs) and Indexes (btrees of key-\u0026gt;object store record).  It includes an async API for use in pages and both an async and a sync API for workers.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe latest editors draft of the spec can be found here: \u003ca href\u003d\"http://dev.w3.org/2006/webapi/WebSimpleDB/\" rel\u003d\"nofollow\"\u003ehttp://dev.w3.org/2006/webapi/WebSimpleDB/\u003c/a\u003e  And there's a lot of discussion currently happening on public-webapps@w3.org.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAt the time of this writing the following are major changes that will probably happen to the spec in the near term:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eThe async API will probably be changed to a callback based one.\u003c/li\u003e\u003cli\u003eThe async API should be available from workers.\u003c/li\u003e\u003cli\u003eComposite indexes will probably be added.\u003c/li\u003e\u003cli\u003eExternal indexes will probably be removed (indexes not attached to a object store).\u003c/li\u003e\u003cli\u003eInverted indexes will hopefully be added so it's possible to efficiently implement full text search.\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003ci\u003e\u003cbr /\u003e\u003cbr /\u003eNote: Most of this design doc is talking about work inside WebKit/WebCore since most of the implementation will exist there.  At the bottom, there is discussion of Chromium specific plumbing.\u003c/i\u003e\u003c/div\u003e\u003cdiv /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThreading model:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAll database processing will happen on a background thread.  The reasons are as follows:  Both workers and pages will be able to access IndexedDB and thus it's possible that two different WebKit threads may have the same database open at the same time.  Database access will result in file IO and we need to ensure that we never block the main thread.  There's no way to re-use worker threads (even if we wanted to) because their lifetimes may be shorter than that of the opened database.  In addition, sharing things across threads is particularly difficult and dangerous in WebKit.  So, the easiest way to mitigate this is to do all database work on its own thread.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUp for debate is whether we should have one IndexedDB thread, one per origin, or one per database.  Originally I was leaning towards one per database since threads are cheap and we should let the OS do its thing in terms of IO scheduling, but this may be excessive. Either way, I'd like to design so that we \u003ci\u003ecan\u003c/i\u003e split things up thread wise if we choose to in the future.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA side effect of having all work take place on a background thread is that we can share almost all of the code between the sync and async versions of the API.  To make this simpler, I'm planning on creating a class like what follows to link code running on a background thread to either the sync or async messages happening on the main/worker threads.\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// This is a class that abstracts away the idea of having another thread offer a\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// \"promise\" to give a particular return value, go off and do the processes, and then\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// send a message which either triggers asynchronous callbacks or unblocks the thread\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// and returns a result.  This class is not threadsafe, so be sure to only call it from\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// the thread it's created on.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etemplate \u0026lt;typename ResultType\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eclass AsyncReturn\u0026lt;ResultType\u0026gt; : RefCounted\u0026lt;ResultType\u0026gt; {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003epublic:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Provide async callbacks to be used in the event of a success or error.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // You should only call this or syncWaitForResult, and you should only call\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // either one once.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setAsyncCallbacks(PassOwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; successCallback, \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e                           PassOwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; errorCallback);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Block execution until a result or an exception is returned.  This will run\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // a WorkerRunLoop (sync is only available on workers) with the mode set to only\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // process tasks from our background thread.  You should only call this or\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // setAsyncCallbacks, and you should only call either one once.  If an exception\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // is set, the returned pointer will be 0.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    PassOwnPtr\u0026lt;ResultType\u0026gt; syncWaitForResult(OwnPtr\u0026lt;IDBDatabaseException\u0026gt;*);\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Called on success.  If there's anything in the queue, starts a one shot timer\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // on m_timer.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setResult(PassOwnPtr\u0026lt;Type\u0026gt;);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Called on error.  If there's anything in the queue, starts a one shot timer on\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // m_timer.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setError(PassOwnPtr\u0026lt;IDBError\u0026gt;);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eprivate:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Function called by our timer.  Calls the proper callback.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void onTimer(Timer*);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // Only one of the following should ever be set.  These are necessary even in\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // sync mode because it's possible for syncWaitForResult to be called after\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // the response has reached us.  These are zeroed out again when passed to the\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // callback or returned via syncWaitForResult.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;Foo\u0026gt; m_result;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    OwnPtr\u0026lt;IDBDatabaseError\u0026gt; m_error;\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // When this fires, we'll call the proper callback.  Only for async usage.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    Timer m_timer;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Only one of these is ever used and only during async usage.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; m_successCallback; \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; m_errorCallback;\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // Used so we can assert this class is only used in one way or another.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    bool m_asyncUsage;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    bool m_syncUsage;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e};\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eClass structure:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn the spec, each interface has an async and a sync counterpart.  In most cases, they share a common base class.  The sync version has a \"Sync\" suffix and the async version has a \"Request\" suffix.  Thus the following is fairly common:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eInterface FooRequest : Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooSync : Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn most cases, FooRequest and FooSync are almost identical except in terms of the return types.  For sync, the methods usually return values.  For the other, they call callbacks which pass the values in as a parameter.  (The current event based API has you set event handlers that are shared by all requests and make a call.  So it is like the callback interface except only one call can be inflight at a time.  Plus the syntax is ugly.)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn WebKit, my plan is to call the base class FooBase, but otherwise implement the IDLs exactly as specced.  So, I'll implement things as if the structure was as follows:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooRequest : FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooSync : FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFooRequest and FooSync are very similar.  The only difference is in their return values and whether they block.  Since we're doing all real work on the background thread anyway, it makes sense for our sync and async APIs to run the same code and simply use the above AsyncReturn class to signal completion in both cases.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBoth FooRequest and FooSync will have a pointer to a Foo class.  This Foo class will have all the same methods as FooRequest and FooSync except it'll return an AsyncReturn\u0026lt;Type\u0026gt; instance.  FooSync will then call syncWaitForResult() which will run the WorkerRunLoop with the mode set to only accept messages from a background thread (much like WebSockets and sync XHR) while waiting for the response.  FooRequest will call setAsyncCallbacks and use those to call the proper javascript callback when the result is ready.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor browsers that use multiple processes (like Chromium) there needs to be some way to detach the central backend from various frontends (in Chromium terms, the browser process and the various renderer processes).  We'll do this by making all the Foo classes abstract interfaces and having the actual implementations be FooImpl classes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eEach Foo class will have a .cpp file with a single static method in it: a constructor.  For normal WebKit, that will call FooImpl::create.  For multi-process implementations, they can omit this file from their build and instead have Foo::create return a proxy object which implements the Foo interface but which actually sends messages across processes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSo, to recap, for each type of interface in the IDLs (for example, IDBObjectStore____) we'll have the following classes:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIDBObjectStoreBase  -\u0026gt;  \"IDBObjectStore\" in the IDL; just a base class with stuff shared between the next two.\u003c/li\u003e\u003cli\u003eIDBObjectStoreRequest -\u0026gt;  The same in the IDL; the async version of the class.  This and the next one do little more than have a reference to IDBObjectStore and call methods on it.\u003c/li\u003e\u003cli\u003eIDBObjectStoreSync  -\u0026gt;  The same in the IDL; the sync version of the class.\u003c/li\u003e\u003cli\u003eIDBObjectStore  -\u0026gt;  Interface for IDBObjectStoreImpl; methods will pretty much match what's exposed in IDL.\u003c/li\u003e\u003cli\u003eIDBObjectStoreImpl  -\u0026gt;  Implements IDBObjectStore; lives almost entirely on the background thread; will send a message to the AsyncReturn instance on completion.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003eBecause all objects either are tied 100% to the thread they're created on (FooSync/FooRequest/FooBase) or exist completely on the background thread (Foo), object lifetimes and how they're destroyed should be fairly easy.  This is even true in the face of the page cache.  When a page is suspended, we should pause all of it's callbacks.  Ideally, we'd cancel all currently running operations and restart if/when the page comes back, but it's not necessary for correctness.  All in all, the threading model should make page cache integration fairly straightforward.  During early development, however, we'll probably just have canSuspend return false to keep things simple.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen we open an indexed database, we'll need to call the chrome client to see if it's allowed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIt may make sense to take some parts of workers (like GenericWorkerTask and WorkerRunLoop) and make them a tad more generic and then move them into Platform.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eBindings:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThere are currently no examples of methods that take callbacks that aren't implemented as custom functions.  I fear this means I have a lot of custom binding writing in my future.  Hopefully there's some way to modify the code generators to avoid this, though.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo keep things simple, during the bootstrapping process I'll only be working on V8 bindings.  Once things start to stabilize API/Spec/code wise, I'll take a shot at JSC bindings.  If they're not fairly straightforward, I might see if someone from the JSC side of the world is interested in helping.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eBtree implementation\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003e/persistance\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eI often say \"btree\" but there are many possible ways to implement data persistence.  Either way, it's out of scope for this document at the moment.  The most important thing is to get an implementation working with or without persistance.  Once we're getting close to that goal, then we can start thinking about this.  In the mean time, it's most important to get good feedback to the working group since WebKit already has a good data persistence layer (WebSQLDatabase) and there is no indication anyone else will be shipping an implementation soon.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:medium\"\u003eChromium side of the implementation:\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe communication from WebCore in the renderer to WebCore in the browser is all fairly straightforward (and will look much like how we implemented LocalStorage/SessionStorage), but the reverse needs to happen completely via async callbacks/tasks.  To handle this cleanly/efficiently, we'll need to add some notion of \"tasks\" to the Chromium WebKit API (like WebCore::GenericWorkerTask and Chromium's Task/RunnableMethod classes).  We'll also have FooProxy classes in WebCore that implement the Foo interface and which proxy all calls through to the WebKit layer, much like in LocalStorage/SessionStorage.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHere are the various layers of calls (from renderer to browser):\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebCore::FooProxy  (implements WebCore::Foo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebKit::RendererWebFooImpl  (implements WebKit::WebFoo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u0026lt;-- IPC --\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eFoo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebKit::WebFooImpl  (implements WebKit::WebFoo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebCore::FooImpl  (implements WebCore::Foo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote the symmetry and how we're essentially just trying to connect WebCore (in the renderer) to WebCore (in the browser process).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn addition to the standard set of classes, we'll need a couple special ones.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eWebKit::WebAsyncReturn\u0026lt;\u0026gt;\u003c/b\u003e   Much like WebCore::AsyncReturn\u0026lt;\u0026gt; except without any of the synchronous waiting functionality.  Returned from all methods.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eWebKit::WebTask\u003c/b\u003e   Much like WebCore::GenericWorkerTask or Chromium's Task.  Passed into WebKit::WebAsyncReturn\u0026lt;\u0026gt;::setAsyncCallbacks().\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003eIndexedDBDispatcher\u003c/b\u003e   Lives in the renderer and handles all the reply messages from the browser process.  Each outgoing request is assigned an ID so that we know which WebAsyncReturn object to match it up with.  There's one per renderer process.\u003c/li\u003e\u003cli\u003e\u003cb\u003eIndexedDBDispatcherHost\u003c/b\u003e    Lives in the browser and handles all the messages from the renderer process.  It has a reference to the IndexedDB context and can send reply messages back to the renderer process.  There's one per ResourceMessageFilter.\u003c/li\u003e\u003cli\u003e\u003cb\u003eIndexedDBContext\u003c/b\u003e   Keeps track of all the IDs for the various WebKit wrappers and contains a hirarchy of Chromium objects which wrap the WebKit objects which wrap the WebCore implementations.  The context is connected to the profile (and threadsafe ref counted).\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNow that you're acquainted with the objects, lets run through an example.  In this case, what happens when IDBDatabaseRequest::openObjectStore() is called:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIn WebCore inside the renderer process, openObjectStore will be called on an IDBDatabaseProxy object which implements the WebCore::IDBDatabase interface.\u003c/li\u003e\u003cli\u003eThe proxy will call RendererWebIDBDatabaseImpl::openObjectStore().  (An implementation of the WebIDBDatabase interface.)\u003c/li\u003e\u003cli\u003eRendererWebIDBDatabaseImpl::openObjectStore() sends an async IPC to the browser process with the RendererWebIDBDatabaseImpl's ID.\u003c/li\u003e\u003cli\u003eIt then creates a RendererWebAsyncReturnImpl\u0026lt;WebIDBObjectStore\u0026gt; object and registers it with the IndexedDBDisptcher.\u003c/li\u003e\u003cli\u003eRendererWebIDBDatabaseImpl::openObjectStore() then returns that WebAsyncReturn\u0026lt;WebIDBObjectStore\u0026gt; object to its caller (IDBDatabaseProxy).\u003c/li\u003e\u003cli\u003eIDBDatabaseProxy::openObjectStore() would then instantiate an AsyncReturn\u0026lt;IDBObjectStore\u0026gt; object and two WebTasks.\u003c/li\u003e\u003cli\u003eBoth WebTasks would have pointers to the AsyncReturn\u0026lt;\u0026gt; object.  One would set the result.  The other would set the error.\u003c/li\u003e\u003cli\u003eWebAsyncReturn\u0026lt;\u0026gt;::setAsyncCallbacks() would be called with the two tasks.\u003c/li\u003e\u003cli\u003eIDBDatabaseProxy::openObjectStore() would then return the AsyncReturn\u0026lt;\u0026gt; object to its caller.\u003c/li\u003e\u003cli\u003eThat caller would similarly create tasks and pass them into the AsyncReturn\u0026lt;\u0026gt; (but that's just what happens normally; it's not Chromium speciifc).\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eSo now there's an async message in flight to the browser process and a chain of callbacks/tasks set up to fire a callback or allow execution to continue inside the browser process.\u003c/div\u003e\u003cul\u003e\u003cli\u003eOn the IO thread in the browser, the message comes in.  An IndexedDBDispatcherHost receives the message.  Each method detects whether it's on the IO thread and, if so, redirects it to the WebKit thread.\u003c/li\u003e\u003cli\u003eThe message would then call IndexedDBContext::getIndexedDatabase() with the WebIDBDatabase's ID.\u003c/li\u003e\u003cli\u003eIf the ID doesn't exist, we kill off the renderer since at best there's a major bug or memory corruption, and at worst the renderer is compromised.\u003c/li\u003e\u003cli\u003eWe then call Chromium's IDBDatabase::openObjectStore() method.  (Note that the name is the same as another object in WebCore.  That's fine.  They're in separate namespaces and since the WebKit layer is in between, it isn't confusing in practice.)\u003c/li\u003e\u003cli\u003eChromium's IDBDatabase::openObjectStore then calls WebIDBDatabaseImpl::openObjectStore().  (The WebIDBDatabaseImpl is an implementation of WebIDBDatabase that lives in WebKit/chromium/src and provides entry back into WebCore's implementation of the IndexedDB implementation)\u003c/li\u003e\u003cli\u003eWebIDBDatabaseImpl::openObjectStore() then calls WebCore::IDBDatabase::openObjectStore().  (Which, via the virtual method call, actually calls WebCore::IDBDatabaseImpl::openObjectStore().)\u003c/li\u003e\u003cli\u003eWebCore's IndexedDB implementation does its thing and returns an AsyncReturn\u0026lt;IDBObjectStore\u0026gt; object.\u003c/li\u003e\u003cli\u003eWebIDBDatabaseImpl then creates a WebAsyncReturnImpl\u0026lt;WebIDBObjectStore\u0026gt; object that has a pointer to the AsyncReturn\u0026lt;\u0026gt; object and returns it.\u003c/li\u003e\u003cli\u003eChromium's IDBDatabase::openObjectStore() then creates two WebTasks.  One for a success/result and one for an error.  These WebTasks wrap Chromium Tasks/RunnableMethods.\u003c/li\u003e\u003cli\u003eWhen the WebTasks get a response, they'll wrap it in a WebIDBDatabaseError or a WebIDBObjectStore as appropriate.  They'll then pass the result on to the appropriate WebTask.\u003c/li\u003e\u003cli\u003eThe appropriate Chromium Task will then be called which will fetch the result.  If it's a WebIDBObjectStore, it'll be added to the IndexedDBContext and an ID will be assigned.\u003c/li\u003e\u003cli\u003eEither the serialized WebIDBDatabaseError or the WebIDBObjectStore's ID will be sent back via the IndexedDBDispatcherHost via an async message.  Either way, it'll include an ID that was sent with the original async request.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eSo now a reply message is en route to the renderer.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe IndexedDBDispatcher receives the message.  Based on the ID, it figures out which WebAsyncReturn\u0026lt;\u0026gt; object is associated with it.\u003c/li\u003e\u003cli\u003eIt'll create a RendererWebIDBDatabaseErrorImpl or a RendererWebIDBObejctStoreImpl to wrap the result in.  If it's the latter, it'll be given the ID the browser process created.\u003c/li\u003e\u003cli\u003eThe object is passed into either WebAsyncReturn\u0026lt;\u0026gt;::setResult() or ::setError.\u003c/li\u003e\u003cli\u003eThat then either converts the WebIDBDatabaseError object into a WebCore::IDBDatabaseError or wraps the WebIDBObjectStore in an WebCore::IDBObjectStoreProxy and passes the result into WebCore::AsyncReturn\u0026lt;\u0026gt;::setResult() or ::setError().\u003c/li\u003e\u003cli\u003eAnd the rest proceeds as it normally would in WebCore.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eThis same process happens for each object type--except for IndexedDatabase since it's a singleton and the entrypoint to the whole API.  It'd be created as follows:\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eWebCore::IndexedDatabase::create() is normally part of WebCore/storage/IndexedDatabase.cpp, but Chromium won't compile that file.  Instead, the file with our WebCore::IndexedDatabaseProxy will contain the WebCore::IndexedDatabase::create() implementation.  (Normally WebCore::IndexedDatabase::create() would just call WebCore::IndexedDatabaseImpl::create().)\u003c/li\u003e\u003cli\u003eWebCore::IndexedDatabase::create() would call WebCore::IndexedDatabaseProxy::create() through the ChromiumBridge.\u003c/li\u003e\u003cli\u003eIndexedDatabaseProxy::create() would call WebKitClient::CreateIndexedDatabase() which would create a RendererWebIndexedDatabaseImpl and return is synchronously.  IndexedDatabaseProxy would then wrap that class.\u003c/li\u003e\u003cli\u003eThe browser process would create its own IndexedDatabase/WebIndexedDatabase/WebCore::IndexedDatabase lazily on first use.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eWhenever a Proxy object is deleted, it should delete the wrapper it owns.  When the RendererFooImpl is deleted, it should send a message to the browser and the chain of deleting should continue.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/indexeddb"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5790027220183470225"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5790027220183470225"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5790027220183470225"}],"author":[{}],"sites$pageName":{"$t":"indexeddb"},"sites$revision":{"$t":"27"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/404877694256461214"},"published":{"$t":"2010-08-27T23:51:37.054Z"},"updated":{"$t":"2010-08-27T23:51:37.070Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T23:51:37.054Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"seeResults2.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/404877694256461214"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/seeResults2.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/404877694256461214"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/404877694256461214"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/404877694256461214"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/404877694256461214"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5052216118891649057"},"published":{"$t":"2010-08-27T23:08:54.485Z"},"updated":{"$t":"2010-08-27T23:08:54.493Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T23:08:54.485Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"missingorextra.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5052216118891649057"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/missingorextra.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5052216118891649057"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5052216118891649057"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5052216118891649057"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5052216118891649057"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/96776313771782245"},"published":{"$t":"2010-08-27T23:05:05.759Z"},"updated":{"$t":"2010-08-27T23:05:05.770Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T23:05:05.759Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"seeResults.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/96776313771782245"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/seeResults.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/96776313771782245"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/96776313771782245"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/96776313771782245"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/96776313771782245"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6137129164646984329"},"published":{"$t":"2010-08-27T22:57:18.035Z"},"updated":{"$t":"2010-08-27T22:57:18.046Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T22:57:18.035Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flaky3.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6137129164646984329"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/flaky3.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6137129164646984329"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6137129164646984329"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6137129164646984329"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6137129164646984329"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5480683978533646776"},"published":{"$t":"2010-08-27T22:56:01.858Z"},"updated":{"$t":"2010-08-27T22:56:55.929Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T22:56:55.924Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flaky2.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5480683978533646776"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/flaky2.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5480683978533646776"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5480683978533646776"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5480683978533646776"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5480683978533646776"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3486585599556376259"},"published":{"$t":"2010-08-27T22:50:32.752Z"},"updated":{"$t":"2010-08-27T22:50:32.764Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T22:50:32.752Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"newFailingTest.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3486585599556376259"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/newFailingTest.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3486585599556376259"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3486585599556376259"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3486585599556376259"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3486585599556376259"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3145194124683668877"},"published":{"$t":"2010-08-27T22:49:35.732Z"},"updated":{"$t":"2010-08-27T22:49:35.740Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T22:49:35.732Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flaky.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3145194124683668877"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4869512639036591960"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/flakiness-dashboard/flaky.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3145194124683668877"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3145194124683668877"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3145194124683668877"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3145194124683668877"}],"author":[{"name":{"$t":"Julie Parent"},"email":{"$t":"jparent@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6286970277406706053"},"published":{"$t":"2010-08-27T16:18:12.132Z"},"updated":{"$t":"2010-08-27T16:18:12.145Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T16:18:12.132Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"HandlingMultipleContexts.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6286970277406706053"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6286970277406706053"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6286970277406706053"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6286970277406706053"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6286970277406706053"}],"author":[{"email":{"$t":"mlchan@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2956122810755281581"},"published":{"$t":"2010-08-27T16:17:35.178Z"},"updated":{"$t":"2010-08-27T16:17:35.232Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T16:17:35.178Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CompositingwiththeGPUProcess.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2956122810755281581"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/CompositingwiththeGPUProcess.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2956122810755281581"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2956122810755281581"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2956122810755281581"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2956122810755281581"}],"author":[{"email":{"$t":"mlchan@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6464618891481161324"},"published":{"$t":"2010-08-27T16:17:08.205Z"},"updated":{"$t":"2010-08-27T16:17:08.216Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T16:17:08.205Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"TheGPUProcess.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6464618891481161324"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/TheGPUProcess.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6464618891481161324"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6464618891481161324"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6464618891481161324"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6464618891481161324"}],"author":[{"email":{"$t":"mlchan@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7764413867557580557"},"published":{"$t":"2010-08-27T16:16:15.358Z"},"updated":{"$t":"2010-08-27T16:16:15.370Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-27T16:16:15.358Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"SoftwareRenderingArchitecture.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7764413867557580557"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8729900295561143262"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/gpu-accelerated-compositing-in-chrome/SoftwareRenderingArchitecture.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7764413867557580557"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7764413867557580557"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7764413867557580557"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7764413867557580557"}],"author":[{"email":{"$t":"mlchan@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3459890869165259913"},"published":{"$t":"2009-02-11T01:42:13.136Z"},"updated":{"$t":"2010-08-25T14:03:38.162Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-25T14:03:38.162Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Meeting Notes"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003ca href\u003d\"#02092009\"\u003eMeeting Notes from February 9, 2009\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003chr /\u003e\r\n\u003cbr /\u003e\r\n\u003ca name\u003d\"02092009\"\u003e\r\n\u003c/a\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"text-decoration:underline\"\u003eFebruary 9, 2009\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Browser\" /\u003eBrowser\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003eMostly stability work this week, with several crashers and layout tests fixed. For a status report, see:\u003c/font\u003e \u003c/span\u003e\u003cfont size\u003d\"2\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/wiki/StabilizeTrunk?ts\u003d1229629370\u0026amp;updated\u003dStabilizeTrunk\"\u003ehttp://code.google.com/p/chromium/wiki/StabilizeTrunk?ts\u003d1229629370\u0026amp;updated\u003dStabilizeTrunk\u003c/a\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Multiplatform\" /\u003eMultiplatform\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eMac Update \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eCreating and destroying tabs (renderer process is getting created/destroyed) \u003c/li\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003eshutting down is working properly \u003c/li\u003e\r\n\u003cli\u003eplugins are loading things (callbacks are working correctly) but not displaying \u003c/li\u003e\r\n\u003cli\u003eclose to having visible bits on the screen, jrg is working on telling the renderer to draw \u003c/li\u003e\r\n\u003cli\u003ebits are traveling across the wire but it hasn't been tested so we'll know once the renderer is drawing \u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eLinux Update \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eDisplays a window and a toolbar \u003c/li\u003e\r\n\u003cli\u003ePieces are in place for bits on the wire \u003c/li\u003e\r\n\u003cli\u003eDisplays flash without glitches (woo dean!) in window'ed mode\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Infrastructure\" /\u003eInfrastructure\u003cbr /\u003e\r\n\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003eNot much work on the new network stack, one crasher fixed and one security bug under investigation. Wan-teh is also starting work on supporting NTLM auth. On the stability front, the build is more stable this week in terms of renderer crashes (200 different stack traces at the beginning of last week, but only 45 stack traces on Friday). In the build area, maruel disabled incremental linking for 32-bit OSes (Vista 64 users not affected) because things grew too large. WebCore is moving into its own DLL, should help. Rahul and Pam are Sheriff and Deputy this week, be nice to them by keeping the tree green.\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Webkit\" /\u003eWebkit\u003cbr /\u003e\r\n\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eDarin, Pam and Brett are doing the merge this week.\u003c/li\u003e\r\n\u003c/div\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eDaily merge calendar: \u003ca href\u003d\"http://www.google.com/calendar/hosted/google.com/embed?src\u003dgoogle.com_h1kjbmjo6p29ta0rluu8eh5qjo%40group.calendar.google.com\u0026amp;ctz\u003dAmerica/Los_Angeles\" style\u003d\"color:rgb(28,81,168)\" target\u003d\"_blank\"\u003ehttp://www.google.com/calendar/hosted/google.com/embed?src\u003dgoogle.com_h1kjbmjo6p29ta0rluu8eh5qjo%40group.calendar.google.com\u0026amp;ctz\u003dAmerica/Los_Angeles\u003c/a\u003e \u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eContinuing to unfork.  About 64 files forked, and starting to upstream V8 bindings, which account for a large number.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eStability push: doing very well on layout tests, but accumulation of crashers is bringing stability of dev channel down.  If you can fix a crasher, please help!\u003c/li\u003e\r\n\u003c/div\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Extensions\" /\u003eExtensions\u003cbr /\u003e\r\n\u003c/h3\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eAaron finished URLPattern integration for user scripts, now working on giving them a separate JS context.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eErik is making progress on loading extensions once they've been installed.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:15px\"\u003eMatt is working on the new extension process model: \u003ca href\u003d\"http://dev.chromium.org/developers/design-documents/extensions/process-model\" style\u003d\"color:rgb(28,81,168)\" target\u003d\"_blank\" title\u003d\"http://dev.chromium.org/developers/design-documents/extensions/process-model\"\u003ehttp://dev.chromium.org/developers/design-documents/extensions/process-model\u003c/a\u003e\u003c/li\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2653775645649952237"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/quarantined-pages/meeting-notes"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3459890869165259913"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3459890869165259913"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3459890869165259913"}],"author":[{}],"sites$pageName":{"$t":"meeting-notes"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2653775645649952237"},"published":{"$t":"2010-08-25T14:02:35.665Z"},"updated":{"$t":"2010-08-25T14:03:21.568Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-25T14:03:21.566Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Quarantined pages"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eSubpages are pages that should be deleted.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/quarantined-pages"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2653775645649952237"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2653775645649952237"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2653775645649952237"}],"author":[{"name":{"$t":"Marc-Antoine Ruel"},"email":{"$t":"maruel@chromium.org"}}],"sites$pageName":{"$t":"quarantined-pages"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDUpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6833269936883282654"},"published":{"$t":"2008-09-03T23:56:12.742Z"},"updated":{"$t":"2010-08-24T13:00:12.469Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-24T13:00:12.467Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"gclient"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/how-tos/depottools\"\u003edepot_tools\u003c/a\u003e.\u003cbr /\u003e\u003c/font\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7246961357120983879"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/how-tos/depottools/gclient"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6833269936883282654"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6833269936883282654"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6833269936883282654"}],"author":[{}],"sites$pageName":{"$t":"gclient"},"sites$revision":{"$t":"9"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4416334781031344090"},"published":{"$t":"2010-08-21T05:36:54.022Z"},"updated":{"$t":"2010-08-21T05:37:13.050Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-21T05:37:13.047Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"6: Day-to-Day Engineering"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cimg src\u003d\"http://www.google.com/chart?chc\u003dsites\u0026amp;cht\u003dd\u0026amp;chdp\u003dsites\u0026amp;chl\u003d%5B%5BPage+listing'%3D20'f%5Cv'a%5C%3D0'10'%3D249'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Subpage+Listing%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D250'%3D297'dim'%5C%3D10'%3D10'%3D250'%3D297'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C\u0026amp;sig\u003d4Bm9qaJUdSqYajg2_Fmi3qRL9R0\" data-type\u003d\"subpages\" data-props\u003d\"align:left;borderTitle:Subpage Listing;displayAs:TOC;maxDepth:6;rootPage:THIS_PAGE;width:250;\" width\u003d\"250\" height\u003d\"300\" style\u003d\"display:block;text-align:left;margin-right:auto;\" /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5663733556794389665"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/day-to-day"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4416334781031344090"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4416334781031344090"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4416334781031344090"}],"author":[{}],"sites$pageName":{"$t":"day-to-day"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6465324060518621414"},"published":{"$t":"2010-08-20T20:42:56.576Z"},"updated":{"$t":"2010-08-20T20:57:21.848Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-20T20:57:21.847Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Wrench Menu (Mac)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003eChrome 6 introduces a new Wrench menu that unifies it with the old Page menu.  To save space and eliminate clutter, the UI leads decided to merge common elements into button items.  Cocoa allows putting custom items in menus using \u003cfont face\u003d\"'courier new', monospace\"\u003e-[NSMenuItem setView:]\u003c/font\u003e, but none of the typical menu interactions that users expect are provided.  Missing are hover states, menu closing on selection, and non-sticky mode.  Menus on Mac OS X have two modes of interaction; the first is typical of other platforms: click to open and click to select an item.  The other is non-sticky mode, where the user can click the menu open and, without releasing, drag to the desired item, and release to select it.  Custom buttons were written to implement all these behaviors, as well as to change their appearance.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnother feature of the menu is to be able to use the zoom buttons and have the page update while the menu stays open.  The issue in implementing this was that after the zoom button messages the renderer to zoom, the acknowledgment (containing the actual zoom level) comes back asynchronously to the I/O thread, which then forwards the Task to the UI thread's main event loop.  When a menu is running, though, a nested event loop is run that blocks that UI event loop.  To fix this, the callback on the IPC thread is special-cased to post the Task in a way that both the modal menu loop and, if a menu is not running, the main loop can process it.\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1282337383898/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/wrench-menu-mac"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6465324060518621414"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6465324060518621414"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6465324060518621414"}],"author":[{"name":{"$t":"Robert Sesek"},"email":{"$t":"rsesek@chromium.org"}}],"sites$pageName":{"$t":"wrench-menu-mac"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2518149925658753162"},"published":{"$t":"2010-08-20T20:56:12.614Z"},"updated":{"$t":"2010-08-20T20:56:12.623Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-20T20:56:12.614Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WrenchMenuTaskDispatch.graffle.zip"},"summary":{},"content":{"type":"application/zip","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2518149925658753162"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6465324060518621414"},{"rel":"alternate","type":"application/zip","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.graffle.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2518149925658753162"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2518149925658753162"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2518149925658753162"},{"rel":"edit-media","type":"application/zip","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2518149925658753162"}],"author":[{"name":{"$t":"Robert Sesek"},"email":{"$t":"rsesek@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3116693072916762035"},"published":{"$t":"2010-08-20T20:49:43.875Z"},"updated":{"$t":"2010-08-20T20:49:43.898Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-20T20:49:43.875Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WrenchMenuTaskDispatch.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3116693072916762035"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6465324060518621414"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3116693072916762035"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3116693072916762035"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3116693072916762035"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3116693072916762035"}],"author":[{"name":{"$t":"Robert Sesek"},"email":{"$t":"rsesek@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2043475440884410004"},"published":{"$t":"2010-08-11T15:46:09.697Z"},"updated":{"$t":"2010-08-11T16:44:11.971Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-08-11T16:44:11.969Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"AppleScript Support"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cp style\u003d\"max-width:65em\"\u003eAppleScript is a widely used scripting language on Mac OS X, used for inter-process communication (IPC). It enables end-users who have no programming skills to easily create workflows and perform repetitive tasks. Supporting AppleScript also provides a consistent interface for communication with other applications.\u003c/p\u003e\u003cp style\u003d\"max-width:65em\"\u003eIf you are unfamiliar with AppleScript, you can read more about it at \u003ca href\u003d\"http://developer.apple.com/mac/library/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html#//apple_ref/doc/uid/TP40000983\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,0,204)\"\u003eAppleScript Language Guide\u003c/a\u003e.\u003c/p\u003e\u003cp style\u003d\"max-width:65em\"\u003eFor implementation of AppleScript in your application, you might want to look at \u003ca href\u003d\"http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ScriptableCocoaApplications/SApps_intro/SAppsIntro.html\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,0,204)\"\u003eCocoa Scripting Guide\u003c/a\u003e.\u003c/p\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Terminology\" /\u003e\u003cfont color\u003d\"#000000\"\u003eTerminology\u003c/font\u003e\u003c/h2\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eSDEF - scripting definition file, contains all the classes, properties, commands that scripters can use.\u003c/li\u003e\u003cli\u003eAutomator - an application bundled with Mac OS X allowing the user to graphically build workflows on top of AppleScript.\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Details\" /\u003eDetails\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eAppleScript support involves five classes, each representing the classes defined in the sdef file:\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eApplicationApplescript\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eNot a separate class but a set of methods added in a category of \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserCrApplication\u003c/font\u003e\u003c/li\u003e\u003cli\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003ename\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003efrontmost\u003c/font\u003e, and \u003cfont face\u003d\"'courier new', monospace\"\u003eversion\u003c/font\u003e properties are all obtained by work done in \u003cfont face\u003d\"'courier new', monospace\"\u003eNSApplication\u003c/font\u003e\u003c/li\u003e\u003cli\u003eAn application has windows as its elements\u003c/li\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eThe windows are obtained by traversing through \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserList\u003c/font\u003e, wrapping each \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eBrowser\u003c/font\u003e\u003c/tt\u003e in a \u003cfont face\u003d\"'courier new', monospace\"\u003eWindowApplescript\u003c/font\u003e class and returning it as an \u003cfont face\u003d\"'courier new', monospace\"\u003eNSArray\u003c/font\u003e\u003c/li\u003e\u003cli\u003eA new window is created by creating a new \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowser\u003c/font\u003e with a single blank tab\u003c/li\u003e\u003cli\u003eA window is closed by calling \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebrowser-\u0026gt;window()-\u0026gt;Close()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003c/ul\u003e\u003cli\u003eBookmarks are represented as two folders elements, corresponding to the bookmarks bar and the \"Other Bookmarks\" folder\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-WindowApplescript\" /\u003e\u003cfont color\u003d\"#000000\"\u003eWindowApplescript\u003c/font\u003e\u003c/h3\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eEncapsulates a \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eBrowser\u003c/font\u003e\u003c/tt\u003e object\u003c/li\u003e\u003cli\u003eID of a browser is obtained via \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebrowser-\u0026gt;session_id().id()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003emode\u003c/font\u003e indicates whether a browser window is a normal or an incognito window. The mode is set only during creation and cannot be changed at a later time. The default is a normal window.\u003c/li\u003e\u003cli\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eNSWindow\u003c/font\u003e associated with a browser can be used to get and set certain properties such as \u003cfont face\u003d\"'courier new', monospace\"\u003ebounds\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003ecloseable\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eminiaturizable\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eminiaturized\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eresizable\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003evisible\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003ezoomable\u003c/font\u003e, and \u003cfont face\u003d\"'courier new', monospace\"\u003ezoomed\u003c/font\u003e.\u003c/li\u003e\u003cli\u003eA browser window has tabs as its elements\u003c/li\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eThe tabs comprising a browser window are obtained by getting each tab using \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebrowser-\u0026gt;GetTabContentsAt()\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e, \u003c/font\u003e\u003c/tt\u003ewrapping it inside a \u003cfont face\u003d\"'courier new', monospace\"\u003eTabApplescript\u003c/font\u003e class, and returning them as an \u003cfont face\u003d\"'courier new', monospace\"\u003eNSArray\u003c/font\u003e\u003c/li\u003e\u003cli\u003eNew tabs are made by using \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebrowser-\u0026gt;AddTabWithURL()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003eTabs are deleted using \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebrowser-\u0026gt;tabstrip_model()-\u0026gt;DetachTabContentsAt()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-TabApplescript\" /\u003e\u003cfont color\u003d\"#000000\"\u003eTabApplescript\u003c/font\u003e\u003c/h3\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eEncapsulates a \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e\u003c/tt\u003e object\u003c/li\u003e\u003cli\u003eID of a tab is obtained via \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etab_contents-\u0026gt;controller().session_id().id()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eurl\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003etitle\u003c/font\u003e associated with a tab can be mutated and accessed through the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e' controller.\u003c/li\u003e\u003cli\u003eStandard text-manipulation commands such as cut, copy, and paste are achieved by calling methods on the \u003cfont face\u003d\"'courier new', monospace\"\u003eRenderViewHost\u003c/font\u003e associated with a particular tab\u003c/li\u003e\u003cli\u003eStandard navigation commands such as go back, go forward, and reload are achieved by calling methods on the controller associated with a particular tab\u003c/li\u003e\u003cli\u003ePrinting a tab is done by calling \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etabContents-\u0026gt;PrintNow()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003eSaving a tab is done by calling \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etabContents-\u0026gt;SavePage()\u003c/font\u003e\u003c/tt\u003e. The caller has to provide parameters such as file name and directory path, otherwise the user is prompted for these values\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-BookmarkFolderApplescript\" /\u003e\u003cfont color\u003d\"#000000\"\u003eBookmarkFolderApplescript\u003c/font\u003e\u003c/h3\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eEncapsulates a \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkNode\u003c/font\u003e\u003c/tt\u003e object which represents a folder\u003c/li\u003e\u003cli\u003eID is obtained via \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebookmarkNode-\u0026gt;id()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003etitle\u003c/font\u003e can be mutated and accessed by calling methods on the \u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkModel\u003c/font\u003e, which takes care of obtaining the correct locks and other housekeeping details.\u003c/li\u003e\u003cli\u003eA bookmark folder has other bookmark folders and bookmark items as its elements\u003c/li\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eAny child bookmark folders are obtained by getting all the child nodes of type folder, wrapping each up inside a \u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkFolderApplescript\u003c/font\u003e class, and returning them as an \u003cfont face\u003d\"'courier new', monospace\"\u003eNSArray\u003c/font\u003e\u003c/li\u003e\u003cli\u003eAdding and deleting bookmark folders and items is done by calling appropriate methods on the \u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkModel\u003c/font\u003e which takes care of all internal details like obtaining locks etc\u003c/li\u003e\u003cli\u003eThe bookmark items are obtained by getting all child nodes with type as url, wrapping each up in a \u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkItemApplescript\u003c/font\u003e class, and returning them as an \u003cfont face\u003d\"'courier new', monospace\"\u003eNSArray\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-BookmarkItemApplescript\" /\u003e\u003cfont color\u003d\"#000000\"\u003eBookmarkItemApplescript\u003c/font\u003e\u003c/h3\u003e\u003cul style\u003d\"max-width:65em;padding-left:40px\"\u003e\u003cli\u003eEncapsulates a \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkNode\u003c/font\u003e\u003c/tt\u003e object which represents a single url\u003c/li\u003e\u003cli\u003eID is obtained via \u003ctt style\u003d\"font-size:13px\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003ebookmarkNode-\u0026gt;id()\u003c/font\u003e\u003c/tt\u003e\u003c/li\u003e\u003cli\u003eEach bookmark item consists of a \u003cfont face\u003d\"'courier new', monospace\"\u003etitle\u003c/font\u003e and \u003cfont face\u003d\"'courier new', monospace\"\u003eurl\u003c/font\u003e and can be manipulated by calling methods on \u003cfont face\u003d\"'courier new', monospace\"\u003eBookmarkModel\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/applescript"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2043475440884410004"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2043475440884410004"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2043475440884410004"}],"author":[{"name":{"$t":"Mike Pinkerton"},"email":{"$t":"pinkerton@chromium.org"}}],"sites$pageName":{"$t":"applescript"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},"published":{"$t":"2009-11-19T17:04:13.041Z"},"updated":{"$t":"2010-07-27T20:22:35.965Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-27T20:22:35.963Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Panels"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"http://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/Panels.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:trebuchet ms,Verdana,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/Chrome-OS-Panels.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"189\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1266513042820/chromium-os/user-experience/panels/Chrome-OS-Panels.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\nPanels in Chromium OS are used as containers that allow a user to multitask without leaving the view of their current application. For example, with a music player and chat in panels, a user can control the playback of their music and chat with a friend while watching a video or reading a long document in their main view.\u003cbr /\u003e\u003cbr /\u003e\u003c/span\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;font-size:small\"\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eWindow manager interactions\u003c/span\u003e\u003c/p\u003e\u003cp\u003ePanels are always-on-top, and are not attached to a specific window. New panels open to the left of existing panels.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eOpen behavior\u003c/span\u003e\u003c/p\u003e\u003cp\u003ePanels are minimized and maximized by clicking on their titlebar. When minimized, a panel is shifted so that only a few pixels of its titlebar are visible on-screen (this is the 'minimized' state).\u003c/p\u003e\u003cp\u003eWhen the user's mouse hits the bottom edge of the screen, any minimized panels slide up to reveal the text in their titlebars (this is the 'peeking' state). Clicking on these titlebars will restore the panel to its original size.\u003c/p\u003e\u003cp\u003eIf a panel is restored with the mouse cursor at the bottom edge of the screen, a widget will appear under the user's mouse cursor that will minimize the panel when clicked. The widget disappears as soon as the user's mouse moves away from the edge. This allows users to quickly open and close panels.\u003c/p\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650254152/chromium-os/user-experience/panels/windowstylespng\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eNotifications\u003c/span\u003e\u003c/p\u003e\u003cp\u003eIf a panel is minimized when its title changes, it bounces up to its 'peeking' state and potentially flashes its background. This allows for a lightweight alert system without having fullsize panels onscreen.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eAuto-arrange\u003c/span\u003e\u003c/p\u003e\u003cp\u003ePanels are right-aligned, and automatically arrange themselves in order to not overlap. If a user drags a panel to the left away from the main group of panels, it is pushed to the left of all auto-arranged panels until the user explicitly reorders it into the auto arranged set. It will attempt to hold the defined position until it is pushed out of the way.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eLarge panels\u003c/span\u003e\u003c/p\u003e\u003cp\u003eIn the case where a panel's width exceeds some predetermined max-width value ('X'), the panel is auto-arranged as if it is has width of 'X'. The contents of the panel are displayed above or below other panels in MRU order, relying on the user to open and minimize the panels as they see fit.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eOverflow\u003c/span\u003e\u003c/p\u003e\u003cp\u003eMultiple options exist for overflow (which is to say that we haven't decided yet):\u003c/p\u003e\u003cul\u003e\u003cli\u003eOnly show as many panels that fit - others fall off the screen and are inaccessible until the onscreen panels are closed.\u003c/li\u003e\u003cli\u003eHorizontal scrolling\u003c/li\u003e\u003cli\u003eAdd a widget to the left side that contains the overflowed items.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eSidebar\u003c/span\u003e\u003c/p\u003e\u003cp\u003ePanels can be dragged to sidebars on the left or right of the screen.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eExperiments / Controversial features\u003c/span\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbility to detach panels to regular floating 'always on top' windows on ChromeOS.\u003c/li\u003e\u003cli\u003ePro: more flexible\u003c/li\u003e\u003cli\u003eCon: lets users be in a bad state\u003c/li\u003e\u003cli\u003eBottom-edge click to dismiss.\u003c/li\u003e\u003cli\u003ePro: easier to minimize panels\u003c/li\u003e\u003cli\u003eCon: harder to focus bottom-edge panel content (e.g. chatbox)\u003cspan\u003e \u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eVisual Spec\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/panel-spec.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"274\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1280257757963/chromium-os/user-experience/panels/panel-spec.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThemes\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eThemes will not apply to panels.\u003c/span\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7914512944038662870"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"}],"author":[{}],"sites$pageName":{"$t":"panels"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1178385209527285720"},"published":{"$t":"2010-07-27T19:09:17.953Z"},"updated":{"$t":"2010-07-27T19:09:17.963Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-27T19:09:17.953Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"panel-spec.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1178385209527285720"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/panel-spec.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1178385209527285720"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1178385209527285720"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1178385209527285720"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1178385209527285720"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5088428142586670153"},"published":{"$t":"2010-07-23T00:23:34.737Z"},"updated":{"$t":"2010-07-23T00:23:34.749Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-23T00:23:34.737Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screenshot-QEMU-KVM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5088428142586670153"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015230155387046393"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/Screenshot-QEMU-KVM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5088428142586670153"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5088428142586670153"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5088428142586670153"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5088428142586670153"}],"author":[{"name":{"$t":"Zelidrag Hornung"},"email":{"$t":"zelidrag@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6566195967208808905"},"published":{"$t":"2010-07-12T21:51:26.958Z"},"updated":{"$t":"2010-07-12T22:03:20.922Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-12T22:03:20.920Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"4: Reference"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cimg src\u003d\"http://www.google.com/chart?chc\u003dsites\u0026amp;cht\u003dd\u0026amp;chdp\u003dsites\u0026amp;chl\u003d%5B%5BPage+listing'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Subpage+Listing%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D297'dim'%5C%3D10'%3D10'%3D500'%3D297'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C\u0026amp;sig\u003dlxEPbO98PQKCTIgDHMqrwU0hJD8\" data-type\u003d\"subpages\" data-props\u003d\"align:left;borderTitle:Subpage Listing;displayAs:gadget;maxDepth:6;rootPage:THIS_PAGE;\" width\u003d\"500\" height\u003d\"300\" style\u003d\"display:block;text-align:left;margin-right:auto;\" /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5663733556794389665"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/reference"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6566195967208808905"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6566195967208808905"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6566195967208808905"}],"author":[{}],"sites$pageName":{"$t":"reference"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8185222290969013452"},"published":{"$t":"2010-06-18T14:20:44.182Z"},"updated":{"$t":"2010-07-12T21:52:54.226Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-12T21:52:54.226Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Anatomy of a Syscall"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eNaCl syscalls are the interface between untrusted code and the trusted codebase. They are the means by which a NaCl process can execute code outside the inner sandbox. This is kind of a big deal, because the entire point of NaCl is to prevent untrusted code from getting out of the inner sandbox. Accordingly, the design and implementation of the syscall interface is a crucial part of the NaCl system.\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe purpose of a syscall is to transfer control from an untrusted execution context to a trusted one, so that the thread can execute trusted code. The details of this implementation vary from platform to platform, but the general flow is the same. This figure shows the flow of control:\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"291\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1278971574216/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png\" width\u003d\"320\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left;display:block;margin-right:auto;margin-left:auto\"\u003eThe syscall starts as a call from untrusted code to a trampoline, which is a tiny bit of code (less than one NaCl bundle) that resides at the bottom of the untrusted address space. Each syscall has its own trampoline, but all trampolines are identical--in fact, they're all generated by the loader from a simple template. The trampoline does at most two things:\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;display:block;margin-right:auto;margin-left:auto\"\u003e\u003col\u003e\u003cli\u003eExits the hardware sandbox (on non-SFI implementations) by restoring the original system value of %ds.\u003c/li\u003e\u003cli\u003eCalls the untrusted-to-trusted context switch function (NaClSyscallSeg) \u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eThe call to the context switch function does not return. Instead, when the syscall is finished, the flow of control is transferred directly back to the code that called the trampoline. The return address is still pushed on the stack as part of the call instruction, though. This value is used by the dispatcher to identify which trampoline initiated the syscall.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Context-Switch\" /\u003eContext Switch\u003c/h3\u003e\u003cdiv\u003eThe next step is to switch the execution context. Each thread in the NaCl process owns a trusted context as well as an untrusted context. Untrusted code cannot read the trusted stack, and trusted code can't use the untrusted stack, so nothing that uses the stack can run until the context switch takes place. For this reason, the context switch must be the first thing to run when execution enters trusted code, and the last thing to run before execution leaves trusted code.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe context switch function performs the following functions:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eRead TLS to find the index in the saved context array that belongs to the current thread\u003c/li\u003e\u003cli\u003eSave the current context into the untrusted context array (nacl_user)\u003c/li\u003e\u003cli\u003eLoad the trusted context from the trusted context array (nacl_sys)\u003c/li\u003e\u003cli\u003eMove arguments from the untrusted stack into registers (x86-64 only)\u003c/li\u003e\u003cli\u003eCall the syscall dispatcher function\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSwitching between the two contexts is similar to a thread or fiber switch: the current register set is saved, and a new set of registers is loaded. The set of registers is slightly different from a traditional thread switch. The program counter doesn't need to be saved, but the segment registers (on non-SFI systems) do. The contexts themselves are saved in a location pointed to by thread local storage. This requires some platform-dependent work, because TLS implementations differ--the Windows implementation in particular is unusually complex. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe x86-64 ABI expects some parameters to be loaded into registers; these parameters need to be moved from the untrusted context into the trusted context. The current implementation loads these values from the untrusted stack.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe last thing the context switch function does is transfer the flow of control to the syscall dispatcher. This function call does not return. Instead, the switch back to the untrusted function is handled by a different function (NaClSwitch(), currently).\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Dispatcher\" /\u003eDispatcher\u003c/h3\u003e\u003cdiv\u003eOnce the context switch succeeds, the code becomes a lot more straightforward. The dispatcher does the following:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eDetermine which syscall was called based on the address of the trampoline\u003c/li\u003e\u003cli\u003eFix ABI mismatches on the stack\u003c/li\u003e\u003cli\u003eLook up the syscall implementation in the dispatch table\u003c/li\u003e\u003cli\u003eCall the syscall\u003c/li\u003e\u003cli\u003eSandbox the return address\u003c/li\u003e\u003cli\u003eInitiate the switch back to untrusted code\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003cdiv\u003eThe dispatcher determines which syscall was called by reading the trampoline return address from the untrusted stack. Since the trampolines are evenly spaced in memory, the return address can be used to determine the ordinal position of the trampoline that initiated the syscall. The ordinal position is then used as a lookup into a dispatch table.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe context switch function also needs to ensure that the stack is laid out in the way that the trusted codebase expects. This can be tricky, because while the untrusted code is compiled with a standard unix-style toolchain, the trusted code is compiled with the native platform compilers and follows the native ABI. For example, the Windows x86-64 calling convention is very different from the Linux x86-64 convention. The dispatch function is responsible for fixing the stack to comply with the target platform's alignment and padding rules.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOnce the stack has been fixed, the dispatcher calls the syscall function pointer that it retrieved from the dispatch table. This call returns normally. The last thing the dispatcher does is mask the user return pointer and call the trusted-to-untrusted context switch function. That call does not return.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eValidation and Implementation\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eNow the syscall is almost ready to execute. The last thing that needs to be done is to unpack the parameters and validate them. The syscall parameters are stored, along with other useful data, in a NaClAppThread structure which is passed to the syscall function. Most of the NaCl syscall implementations are wrapped within functions that decode and validate the parameters before calling the internal implementation.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe wrappers also call NaClSysCommonThreadSyscallEnter() before calling the internal implementation, and NaClSysCommonThreadSyscallLeave() after the internal implementation completes. The primary responsibility of this pair of functions is to acquire and release a mutex that prevents concurrent access to the trusted codebase. This helps eliminate possible race condition exploits.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eLeaving the Syscall\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eWhen the syscall returns, the dispatcher function sandboxes the return address and calls a function to switch back to untrusted code. That function (NaClSwitchToApp) does the following:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eWrites the user return address into the untrusted context; this will become the new untrusted program counter\u003c/li\u003e\u003cli\u003eCalls the trusted-to-untrusted context switch function\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eThe trusted-to-untrusted context switch function does the following:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eRestores the untrusted context\u003c/li\u003e\u003cli\u003eJumps to the return address (SFI) or the springboard (non-SFI)\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Springboard\" /\u003eSpringboard\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003eOn SFI systems, the trusted-to-untrusted context switch returns directly to untrusted code. On non-SFI systems, however, one more function is needed. This function is the mirror image of the trampoline function that was called when the syscall was initiated. It also lives at the bottom of the trusted address space and is automatically written by the loader. To differentiate this incoming function from the outgoing trampoline, the incoming function is called the springboard. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe springboard does the following:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eLoads the syscall return value into a register\u003c/li\u003e\u003cli\u003eRestores the untrusted stack pointer and data segment register\u003c/li\u003e\u003cli\u003eJumps to the syscall return address\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eOnce the springboard function is finished, untrusted code continues normal execution.\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6566195967208808905"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/reference/anatomy-of-a-sys"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8185222290969013452"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8185222290969013452"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8185222290969013452"}],"author":[{}],"sites$pageName":{"$t":"anatomy-of-a-sys"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3043944026684858882"},"published":{"$t":"2010-06-18T21:45:57.525Z"},"updated":{"$t":"2010-07-12T21:52:54.216Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-18T21:46:50.657Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NaClSyscallFlowchart.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3043944026684858882"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8185222290969013452"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3043944026684858882"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3043944026684858882"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3043944026684858882"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3043944026684858882"}],"author":[{}],"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8040766624947084370"},"published":{"$t":"2010-06-18T21:47:54.811Z"},"updated":{"$t":"2010-07-12T21:52:54.216Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-18T21:47:54.811Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NaClSyscallFlowchart2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8040766624947084370"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8185222290969013452"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8040766624947084370"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8040766624947084370"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8040766624947084370"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8040766624947084370"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1399481185515726167"},"published":{"$t":"2010-07-08T19:09:33.648Z"},"updated":{"$t":"2010-07-12T21:48:07.192Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-07-08T19:09:33.648Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"nacl_diagram.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1399481185515726167"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2951986558878479788"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1399481185515726167"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1399481185515726167"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1399481185515726167"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1399481185515726167"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"},"published":{"$t":"2008-08-29T22:00:41.220Z"},"updated":{"$t":"2010-07-08T20:41:45.593Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-15T23:36:54.339Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Visual Design"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Design-decisions:-existing-design\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eDesign decisions: existing design\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Native-style\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eNative style\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Mathemagics\"\u003e\u003cstrong\u003e1.1.1 \u003c/strong\u003eMathemagics\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Type\"\u003e\u003cstrong\u003e1.1.2 \u003c/strong\u003eType\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Inspiration\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eInspiration\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Visual-tests\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eVisual tests\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Resources\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eResources\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Design-decisions:-existing-design\" /\u003eDesign decisions: existing design\u003c/h2\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Native-style\" /\u003eNative style\u003c/h3\u003eWhile we're not a natively-themed application, we do wish to fit within the operating system so that our app doesn't look out of place. This affects our choices of:\u003cbr /\u003e\u003cblockquote style\u003d\"border-style:none;margin:0px 0px 0px 40px;padding:0px\"\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cdiv style\u003d\"font-family:Arial;margin-top:0px;margin-bottom:0px\"\u003e\u003cul style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:10px\"\u003e\u003cli style\u003d\"padding:1px 0px\"\u003einterface icons (Vista makes frequent use of a certain back/forward icon style)\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003ecolor\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eperceived depth, thickness\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eborder shape, width and styling\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003efont choice\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eblurriness - Windows tends to be more bitmappy than OS X, preferring to align everything along pixel boundaries - see the Cleartype vs. Quartz wars.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eWe use a non-native window frame with XP because the existing toolbar did not support our tabs-on-top design - its color and gradients did not support the overlay of interactive graphics, and it did not have the height we required. We use the native frame on Vista, and intend to use the native frame on OS X.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cspan style\u003d\"border-collapse:collapse\"\u003e\u003cdiv\u003eThe Windows XP UI consists of three layers - the first two consist of a blue rubbery window frame, and a lighter tab frame. The buttons then stick out of this frame, forming a third layer of depth. Each of these layers should each feel no more than three or four pixels deep. We avoided going totally flat, as this clashed with the host operating system and felt wrong - Chromium should feel like a tactile object, not an abstract flat piece of software.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe Photoshop file used in the creation of the Chrome design can be found attached at the bottom of this page.\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003ch4 style\u003d\"margin-top:10px;margin-right:0px;margin-bottom:10px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Mathemagics\" /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eMathemagics\u003c/span\u003e\u003c/h4\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design/mathemagics%20%281%29.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197830079/user-experience/visual-design/mathemagics%20%281%29.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eWhile the following is very rough because of gradual changes over time, rounding errors, and because highlights and shadows make it hard to judge perceptual distances, our design started based on the golden ratio. In the diagram above:\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eC \u003d GR * B \u003c/span\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eB \u003d GR * A\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eAs the titlebar fills up with tabs, 'A' becomes the only grabbable area for the window. This may prove to be too small for most users (user study results are encouraging, however), so this may change.\u003c/span\u003e\u003cbr /\u003e\u003ch4 style\u003d\"margin-top:10px;margin-right:0px;margin-bottom:10px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Type\" /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eType\u003c/span\u003e\u003c/h4\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eFor all Chromium dialogs and toolbars, we use the system default font, which is most frequently Tahoma 11px on Windows XP, or Segoe on Vista.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eWe make the URL larger (13px) to make it stand out more, and because the omnibox is a large part of the product. This means that the baseline of the text in the omnibox doesn't line up with the baselines of the text for the menus. Cry.\u003c/span\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Inspiration\" /\u003eInspiration\u003c/h2\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eWhile it doesn't show through today, we drew early inspiration from The Designers Republic's work on the then-Psygnosis games WipEout and WipEout 2097; the focus on blinding speed, and iconography that could be recognized instantly even in the depths of your peripheral vision were both key attributes we admired.\u003c/span\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003ch2 style\u003d\"margin-top:10px;margin-right:0px;margin-bottom:10px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Visual-tests\" /\u003eVisual tests\u003c/h2\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003eAll designs should be tested against default desktop backgrounds on XP and Vista (with and without the default images), with multiple applications open (typically multiple Windows Explorer windows and Office), at different screen resolutions.\u003c/span\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Resources\" /\u003eResources\u003c/h2\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design/chrome_colorscheme.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197829743/user-experience/visual-design/chrome_colorscheme.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cblockquote style\u003d\"border-style:none;margin:0px 0px 0px 40px;padding:0px\"\u003e\u003cspan style\u003d\"color:rgb(0,102,204);text-decoration:underline\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5524773426348651632"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"visual-design"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},"published":{"$t":"2010-03-09T22:28:57.045Z"},"updated":{"$t":"2010-06-30T20:25:24.135Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:25:24.133Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Geolocation"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/1.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929411846/user-experience/infobars/geolocation/1.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/02_embedded_infobar.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929424610/user-experience/infobars/geolocation/02_embedded_infobar.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/03_contentsettings.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929436846/user-experience/infobars/geolocation/03_contentsettings.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/04_exceptions.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929466735/user-experience/infobars/geolocation/04_exceptions.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/05_exceptionsproperties.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929479434/user-experience/infobars/geolocation/05_exceptionsproperties.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/06_tracking.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929491787/user-experience/infobars/geolocation/06_tracking.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/07_trackingbubble.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1277929513301/user-experience/infobars/geolocation/07_trackingbubble.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1960927698603601539"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$pageName":{"$t":"geolocation"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5806412890372822367"},"published":{"$t":"2010-06-30T20:25:13.291Z"},"updated":{"$t":"2010-06-30T20:25:13.301Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:25:13.291Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"07_trackingbubble.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5806412890372822367"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/07_trackingbubble.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5806412890372822367"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5806412890372822367"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5806412890372822367"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5806412890372822367"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8076814005119455531"},"published":{"$t":"2010-06-30T20:24:51.778Z"},"updated":{"$t":"2010-06-30T20:24:51.787Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:24:51.778Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"06_tracking.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8076814005119455531"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/06_tracking.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8076814005119455531"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8076814005119455531"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8076814005119455531"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8076814005119455531"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5863733863196252187"},"published":{"$t":"2010-06-30T20:24:39.425Z"},"updated":{"$t":"2010-06-30T20:24:39.434Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:24:39.425Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"05_exceptionsproperties.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5863733863196252187"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/05_exceptionsproperties.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5863733863196252187"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5863733863196252187"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5863733863196252187"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5863733863196252187"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/592767511533000447"},"published":{"$t":"2010-06-30T20:24:26.727Z"},"updated":{"$t":"2010-06-30T20:24:26.735Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:24:26.727Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"04_exceptions.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/592767511533000447"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/04_exceptions.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/592767511533000447"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/592767511533000447"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/592767511533000447"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/592767511533000447"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8688505102557818954"},"published":{"$t":"2010-06-30T20:23:56.835Z"},"updated":{"$t":"2010-06-30T20:23:56.846Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:23:56.835Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"03_contentsettings.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8688505102557818954"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/03_contentsettings.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8688505102557818954"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8688505102557818954"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8688505102557818954"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8688505102557818954"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5082387479686835579"},"published":{"$t":"2010-06-30T20:23:44.602Z"},"updated":{"$t":"2010-06-30T20:23:44.610Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:23:44.602Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"02_embedded_infobar.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5082387479686835579"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/02_embedded_infobar.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5082387479686835579"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5082387479686835579"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5082387479686835579"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5082387479686835579"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7182359330489798249"},"published":{"$t":"2010-06-30T20:23:31.838Z"},"updated":{"$t":"2010-06-30T20:23:31.846Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-30T20:23:31.838Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7182359330489798249"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7182359330489798249"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7182359330489798249"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7182359330489798249"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7182359330489798249"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4572725268808254972"},"published":{"$t":"2010-06-22T21:16:13.642Z"},"updated":{"$t":"2010-06-22T21:16:13.652Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-22T21:16:13.642Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ChromeOSFirmwareBootandRecoveryPUBLISHED.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4572725268808254972"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4723945718499501890"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4572725268808254972"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4572725268808254972"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4572725268808254972"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4572725268808254972"}],"author":[{"name":{"$t":"Bill Richardson"},"email":{"$t":"wfrichar@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4563731249518600506"},"published":{"$t":"2010-06-17T19:15:47.715Z"},"updated":{"$t":"2010-06-17T19:15:47.723Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-06-17T19:15:47.715Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_font_and_languages.png"},"summary":{},"content":{"type":"image/x-png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4563731249518600506"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/x-png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/chrome_font_and_languages.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4563731249518600506"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4563731249518600506"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4563731249518600506"},{"rel":"edit-media","type":"image/x-png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4563731249518600506"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3018367715076237852"},"published":{"$t":"2010-05-28T21:40:20.084Z"},"updated":{"$t":"2010-05-28T21:40:20.095Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-28T21:40:20.084Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"HWQual.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3018367715076237852"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1319665651073294761"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/hardware_qualification/HWQual.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3018367715076237852"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3018367715076237852"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3018367715076237852"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3018367715076237852"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5751980000612348586"},"published":{"$t":"2010-05-26T16:50:38.646Z"},"updated":{"$t":"2010-05-26T16:50:38.657Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-26T16:50:38.646Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"google-ssl.xml"},"summary":{},"content":{"type":"text/xml","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5751980000612348586"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4852676552341181359"},{"rel":"alternate","type":"text/xml","href":"https://sites.google.com/a/chromium.org/dev/Home/google-ssl.xml"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5751980000612348586"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5751980000612348586"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5751980000612348586"},{"rel":"edit-media","type":"text/xml","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5751980000612348586"}],"author":[{"name":{"$t":"Ian Fette"},"email":{"$t":"ian@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3967470726697591957"},"published":{"$t":"2010-04-30T16:55:02.676Z"},"updated":{"$t":"2010-05-19T23:51:06.259Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-19T23:51:06.257Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Helper Scripts"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-cleanup_loopback_devices\"\u003e\u003cstrong\u003e1 \u003c/strong\u003ecleanup_loopback_devices\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-gmergefs\"\u003e\u003cstrong\u003e2 \u003c/strong\u003egmergefs\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Troubleshooting\"\u003e\u003cstrong\u003e2.1 \u003c/strong\u003eTroubleshooting\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-mount_gpt_image.sh\"\u003e\u003cstrong\u003e3 \u003c/strong\u003emount_gpt_image.sh\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-wtf\"\u003e\u003cstrong\u003e4 \u003c/strong\u003ewtf\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\r\nThis page offers some documentation to extra scripts provided in the src/scripts directory\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-cleanup_loopback_devices\" /\u003ecleanup_loopback_devices\u003c/h2\u003e\r\n\u003cdiv\u003eWe create a lot of loopback devices in various scripts and there are conditions where we may leave around some loopback devices.  This script provides a convenient way of unmounting any image directories in your chroot (for your board) and cleaning up errant loopback devices.  Note, this script will not affect loopback devices / mounts in other chroots or outside the chroot.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-gmergefs\" /\u003egmergefs\u003c/h2\u003e\r\n\u003cdiv\u003egmergefs is an emerge wrapper that combines sshfs with emerge.  It allows a developer to add a package to a live Chromium OS system using the developer's development system.  The easiest way to use it is to pass a --remote flag that specifies the IP address of the remote device and pass the name of a package to install.  You will also have to specify the board if you don't have a default one set up.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003egmergefs requires that the host machine have ssh access to the root account of the remote machine and will prompt for this password when run (will need to edit sshd_config in /etc/ssh and sudo passwd to change root password).  Test images by default have this enabled (see test section for password).  Users of non-test builds will need to enable ssh access for the root account and set a root password.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003egmergefs also requires you have fuse installed on your host machine (if you have fuse warnings when entering chroot, it will not work).\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003ci\u003eNote: By default gmergefs tries to install packages onto /usr/local of the remote system.  If you are updating packages on the root fs you will need to pass --noonstatefuldev.\u003c/i\u003e\u003c/div\u003e\u003cdiv\u003e\u003ci\u003e\u003cbr /\u003e\u003c/i\u003e\u003c/div\u003e\r\nThe following are some sample use cases:\r\n\u003cul\u003e\r\n\u003cli\u003e\u003cb\u003eUpdate base packages\u003c/b\u003e\u003c/li\u003e\r\n\u003cdiv\u003e./gmergefs  --noonstatefuldev --remote 192.0.0.100 chromeos-base/chromeos\u003c/div\u003e\r\n\u003cli\u003e\u003cb\u003eUpdate developer packages\u003c/b\u003e\u003c/li\u003e\r\n\u003cdiv\u003e./gmergefs  --remote 192.0.0.100 chromeos-base/chromeos-dev\u003c/div\u003e\r\n\u003cli\u003e\u003cb\u003eAdd a developer package\u003c/b\u003e\u003c/li\u003e\r\n\u003cdiv\u003egmergefs --remote 192.0.0.100 pacakge_name\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/ul\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Troubleshooting\" /\u003eTroubleshooting\u003c/h3\u003e\r\n\u003cdiv\u003e\u003ci\u003egmergefs hangs\u003c/i\u003e:  This is caused by sshfs hanging when mounting.  Check that you can ssh as root from within your chroot i.e. ssh -o StrictHostKeyChecking\u003dno root@your_ip.  Also double check that you typed in the ip address correctly in the remote flag.\u003c/div\u003e\u003cdiv\u003e\u003ci\u003egmergefs has trouble writing to either ld.so.cache or other file using --noonstatefuldev\u003c/i\u003e:  gmergefs doesn't automatically remount your root dir to rw.  Go onto your machine and run sudo mount -o remount,rw /\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-mount_gpt_image.sh\" /\u003emount_gpt_image.sh\u003c/h2\u003e\r\n\u003cdiv\u003eThe output of the Chromium OS build process is a bootable binary gpt bin file that you can dd straight onto a usb key and install onto a device.  However, often developers will want to make some modifications after the build process or make changes once an image is already on a usb key from the developer's development machine.  This script makes it easy to do just that.  This script will mount a bin or device specified in the --from parameter (e.g. /dev/sdc or ../build/images/.../.../chromiumos_image.bin) and mount the whole image under /tmp/m.  Passing the same arguments in addition to -u (--unmount) will reverse the process.  This can be used to emerge new packages onto an already created image as well as make small mod's or to just see what is in the image.  See mount_gpt_image.sh --help for more information.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-wtf\" /\u003ewtf\u003c/h2\u003e\r\nDisplays summary status for every git repository that is in a modified state. Helpful to easily see what changes you have across the entire source tree. This tool is found in depot_tools.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8281191106998714061"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/helper-scripts"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3967470726697591957"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3967470726697591957"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3967470726697591957"}],"author":[{"name":{"$t":"Chris Sosa"},"email":{"$t":"sosa@chromium.org"}}],"sites$pageName":{"$t":"helper-scripts"},"sites$revision":{"$t":"15"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1319665651073294761"},"published":{"$t":"2010-05-18T00:03:11.514Z"},"updated":{"$t":"2010-05-18T21:49:03.064Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-18T00:03:11.526Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#filecabinet","label":"filecabinet"}],"title":{"$t":"Hardware_Qualification"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1 sites-layout-empty-tile\" /\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3327849403326279945"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/testing/hardware_qualification"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1319665651073294761"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1319665651073294761"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1319665651073294761"}],"author":[{}],"gd$feedLink":{"href":"https://sites.google.com/feeds/content/chromium.org/dev?parent\u003d1319665651073294761"},"sites$pageName":{"$t":"hardware_qualification"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3767809931292955313"},"published":{"$t":"2010-05-05T23:30:12.529Z"},"updated":{"$t":"2010-05-05T23:31:54.340Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-05-05T23:31:18.408Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Documented Certificate of Ownership"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThe DCO is the standard release for Linux kernel code, and is required\r\nto submit all Linux kernel code upstream, and hence to Google.\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003e \u003cdiv class\u003d\"sites-codeblock sites-codesnippet-block\"\u003e\u003ccode\u003eBy making a contribution to this project, I certify that: \u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e\r\n(a) The contribution was created in whole or in part by me and I have\r\nthe right to submit it under the open source license indicated in the\r\nfile; or\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e (b) The contribution is based upon previous work that,\r\nto the best of my knowledge, is covered under an appropriate open\r\nsource license and I have the right under that license to submit that\r\nwork with modifications, whether created in whole or in part by me,\r\nunder the same open source license (unless I am permitted to submit\r\nunder a different license), as indicated in the file; or\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e (c)\r\nThe contribution was provided directly to me by some other person who\r\ncertified (a), (b) or (c) and I have not modified it; and\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e (d)\r\nIn the case of each of (a), (b), or (c), I understand and agree that\r\nthis project and the contribution are public and that a record of the\r\ncontribution (including all personal information I submit with it,\r\nincluding my sign-off) is maintained indefinitely and may be\r\nredistributed consistent with this project or the open source license\r\nindicated in the file.\u003c/code\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7097299014995540955"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3767809931292955313"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3767809931292955313"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3767809931292955313"}],"author":[{}],"sites$pageName":{"$t":"dco"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8226376771381540259"},"published":{"$t":"2010-04-21T15:27:26.831Z"},"updated":{"$t":"2010-04-22T13:17:43.434Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-22T13:17:43.432Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Design document: Cookie prompt replacement"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eDRAFT: April 22, 2010\r\n\u003cdiv\u003eJochen Eisinger \u0026lt;jochen@chromium.org\u0026gt;\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Objective\" /\u003e\u003cfont color\u003d\"#000000\"\u003eObjective \u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cp style\u003d\"color:rgb(0,0,0)\"\u003eProvide the functionality of the application modal cookie prompt with something non-modal. \u003ca href\u003d\"http://crbug.com/38199\"\u003ehttp://crbug.com/38199\u003c/a\u003e\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003ch2 style\u003d\"color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground \u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cp\u003eSince Google Chrome 4.1, the user has the option to be \r\nprompted for every cookie (\"Cookie\" refers to HTTP cookies, Web databases,  \r\nlocal storage, and AppCache. In the future, this might also include \r\nthings like indexed database) being set. This prompt has to be application modal for the following \r\nreason: If a HTML page contains the following JavaScript code:\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cp style\u003d\"margin-left:40px\"\u003e\u003cfont face\u003d\"Courier New\"\u003edocument.cookie \u003d \"A\u003dB\";\u003cbr /\u003e\r\nconsole.log(document.cookie);\u003c/font\u003e\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cp\u003eJavaScript execution \r\nhas to be blocked until the user decided whether to allow the cookie to \r\nbe set or not. Since WebKit assumes that it always can execute \r\nJavaScript, blocking JavaScript amounts to blocking the renderer. If the\r\n renderer is shared between multiple tabs and/or windows, the prompt \r\nneeds to be application modal. To create a consistent user experience, \r\nthe cookie prompt was designed to be always application modal.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\r\n\r\n\u003ch2 style\u003d\"color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Requirements\" /\u003eRequirements\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\r\nThe following use-cases for the cookie prompt exist. A replacement should address all of those.\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003col\u003e\u003col\u003e\u003cli\u003eCompile a list of exception rules for the sites a user visits and trusts.\u003c/li\u003e\u003cli\u003eLearn what sites are setting cookies and other site data.\u003c/li\u003e\u003cli\u003eForce certain cookies to expire at the end of the browsing session.\u003c/li\u003e\u003cli\u003eAllow access to cookies on a case-by-case basis.\u003c/li\u003e\u003c/ol\u003e\r\n\r\n\r\n\u003c/ol\u003e\r\n\u003ch2 style\u003d\"color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Design\" /\u003e Design\u003c/h2\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cp\u003eThe idea is to remove the cookie prompt entirely. Instead, the cookie blocked notification bubble is augmented with enough information to address use-cases 1-3.\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:small\"\u003e1. Compile a list of exception rules for the sites a user visits and trusts\u003c/span\u003e\u003c/b\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003eThe cookie blocked notification bubble contains a link or button (mock needed) that will open a dialog similar to the content settings exception dialog pre-filled with patterns matching all sites requesting cookies on the current web page. The user can then grant or deny access to the individual sites. It won't be possible to remove or add patterns from this dialog. The dialog will also contain any pre-existing exception that applies to the current web page.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cb\u003e2. Learn what sites are setting cookies and other site data.\u003c/b\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003eThe cookies blocked notification bubble will show a text like \"The site example.com and 4 sites included from it were denied access to cookies\" or \"3 sites included from example.com where denied access to cookies\" (mock needed). A link to details will open a dialog similar to the \"Cookies and other site data\" dialog pre-filled with all cookies set by the sites included from the current web page. It will not be possible to modify cookies in this dialog. The information per cookie required for this dialog is the same  that is currently presented to the user in the modal cookie prompt. It can be collected on the same code-path that leads to this prompt.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cb\u003e3. Force certain cookies to expire at the end of the browsing session.\u003c/b\u003e\u003c/span\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003eIn addition to \"Block\" and \"Allow\", content settings exceptions can have the action \"Allow for session\". This will force all HTML cookies matching such a rule to become session cookies. Non-HTML cookies, such as web databases, will be matched against the set of exceptions during shutdown of Chrome and deleted where required.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal;font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003eIn contrast to the current cookie prompt, a website that requires cookies will not work on the first visit. The user first has to explicitly add exceptions for this site and then reload the page. Furthermore, it is not possible to allow and block certain cookies from the same site - content setting exceptions apply on a per-site basis. Use-case 4 can be, however, addressed to a certain extend using the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api\"\u003ecookie extension API\u003c/a\u003e.\u003c/div\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cp\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eAlternatives\r\n Considered\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003eAn alternative\r\n would be to allow all cookies and present the user with an UI to \r\nremove/block some or all cookies. This has several disadvantages:\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\r\n\u003cul\u003e\u003cul\u003e\u003cli\u003eFor all kinds of cookies (e.g. AppCache, \r\nlocal storage), a transaction model has to be implemented.\u003c/li\u003e\u003cli\u003eThe \r\nuser needs to decide what to do with the cookies at latest when \r\nnavigating away from the current page.\u003c/li\u003e\u003cli\u003eThe UI is more intrusive than just displaying a content blocked notification in the omnibox.\u003c/li\u003e\u003c/ul\u003e\r\n\r\n\u003c/ul\u003e\r\n\u003ch2 style\u003d\"color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/cookie-prompt-replacement"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8226376771381540259"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8226376771381540259"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8226376771381540259"}],"author":[{"name":{"$t":"Jochen Eisinger"},"email":{"$t":"jochen@chromium.org"}}],"sites$pageName":{"$t":"cookie-prompt-replacement"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7286951710747454020"},"published":{"$t":"2010-04-15T21:05:09.864Z"},"updated":{"$t":"2010-04-15T21:07:22.067Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-15T21:07:22.065Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Chromium OS Printing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\r\n\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-1\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Abstract\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAbstract\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Chromium_OS_26501248590648174__882450994104147\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eChromium OS\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Chromium_3794744545593858_2894_5514562809839845\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eChromium-based browser\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#Cloud_printing_workflow_077850\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eCloud printing workflow\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h3\u003e\r\nThis document describes the cloud printing workflow and how it interacts with Google Cloud Print.  Support for and interactions with Google Cloud Print dialogs will also be documented here as they are determined.\u003cbr /\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"Chromium_OS_26501248590648174__882450994104147\" /\u003e\u003cb\u003eChromium OS\u003c/b\u003e\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eWhen asked to print, Chromium OS checks to see if the user is logged in. (This case should be rare and occur only if the user entered via the guest account.)  If the user is not logged in, a login dialog is presented.  \u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOnce logged in, if the user has not yet set up cloud printing or has no registered or shared printers, a server-hosted introductory wizard is presented. In this case, printers that are universally shared (for example, \"printing\" a PDF to Google Docs) do not count as shared with the user, as it's expected that most users will be interested in printing to local printers.  This wizard outlines the steps necessary to set up cloud printing, including instructions for setting up a proxy and registering printers. This should happen even if there are printers shared globally with the user.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOnce the user is logged in and has registered printers or has dismissed the wizard as completed, the cloud printing workflow begins.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"Chromium_3794744545593858_2894_5514562809839845\" /\u003eChromium-based browser\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eHow cloud printing integrates into a Chromium-based browser is still to be determined.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"Cloud_printing_workflow_077850\" /\u003eCloud printing workflow\u003c/h3\u003e\r\nOn entering the cloud printing workflow, the browser checks to see if the current page/application provides its own printing workflow (how to do this TBD).  Currently, some web applications, such as the document editor in Google Docs, trap the keyboard shortcut for printing (Ctrl-P for English) and have their own print menu items.  The goal here is to unify the browser's print menu item into that workflow for consistency.  Once in the application's own print flow, it is up to that application to work with Google Cloud Print or provide an alternate means of printing.  The application can choose to present its own print settings user interface and re-join the common printing workflow by using the \u003cfont face\u003d\"'Courier New'\"\u003ewindow.print()\u003c/font\u003e JavaScript request, or it can provide its own entirely separate printing solution.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eIf the application does not provide its own print workflow, a modal cloud print common dialog is presented in a new popup window.  This single dialog allows the user to quickly print with some default settings but also allows for changing of some page setup and advanced print settings without bringing up additional dialogs.  The contents of the dialog are hosted by Google Cloud Print, and the browser provides calls to the scripts on the page in the dialog to change page setup information (information needed for PDF generation) and for returning the contents of the generated PDF file from the browser to the scripts for uploading to the service. (This may be changed so that the browser could also provide the upload service as a call, so that it can happen on the IO thread.)  Any setting of the page setup information will require re-generation of the PDF file, which should happen in the renderer process that owns the tab being printed.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOptionally, in the future, the browser can get a thumbnail rendering of a particular page and call into the dialog scripts to show it.  Additionally, application-specific simple and advanced settings may be incorporated into the dialog.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAfter the user sets other post-PDF generation information (job settings, for example, \u003ci\u003eN\u003c/i\u003e-up printing), the scripts in the dialog upload the PDF the browser provided and the job ticket containing the job settings.  It then makes a call to the browser to close the dialog.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003ch4 style\u003d\"font-size:10pt\"\u003e\u003ca name\u003d\"Notes_5853848708793521_4468540\" /\u003eNotes\u003c/h4\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThis is a change in printing workflow from what is currently in Chromium OS.  In order to mix the page settings into a single simple print dialog, the print settings can't be treated as final before the dialog comes up (which is how printing in Chromium OS is currently working).  But this also gives us an opportunity to get a PDF generation progress meter somewhere in this process. (There's a Chromium OS bug currently open on this issue.)\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eCare needs to be taken to generate the PDF in the background asynchronously.  The dialog script code needs to disable or otherwise indicate that it hasn't yet gotten back the PDF information from the browser any time it makes a change to the page setup information.\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUploading of the PDF and job settings happens in the background.\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/chromium-os-printing-design"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7286951710747454020"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7286951710747454020"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7286951710747454020"}],"author":[{}],"sites$pageName":{"$t":"chromium-os-printing-design"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/392184158323466364"},"published":{"$t":"2010-04-14T20:24:32.933Z"},"updated":{"$t":"2010-04-14T20:24:32.954Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-14T20:24:32.933Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#comment","label":"comment"}],"title":{"$t":""},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003es/chrome/chromium where appropriate\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1209459978548328160"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/392184158323466364"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/392184158323466364"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/392184158323466364"}],"author":[{"name":{"$t":"Luigi Semenzato"},"email":{"$t":"semenzato@chromium.org"}}],"thr$in-reply-to":{"href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/building-chromium-browser","ref":"https://sites.google.com/feeds/content/chromium.org/dev/1209459978548328160","source":"https://sites.google.com/feeds/content/chromium.org/dev","type":"text/html"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8993030894709264566"},"published":{"$t":"2010-04-14T20:24:00.842Z"},"updated":{"$t":"2010-04-14T20:24:00.849Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-14T20:24:00.842Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#comment","label":"comment"}],"title":{"$t":""},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003eCan anybody add instructions for incremental builds? The chrome documentation states that it is sufficient to run GYP_DEFINES\u003d\"chromeos\u003d1\" make chrome---can we confirm this here?\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1209459978548328160"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8993030894709264566"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8993030894709264566"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8993030894709264566"}],"author":[{"name":{"$t":"Luigi Semenzato"},"email":{"$t":"semenzato@chromium.org"}}],"thr$in-reply-to":{"href":"https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/building-chromium-browser","ref":"https://sites.google.com/feeds/content/chromium.org/dev/1209459978548328160","source":"https://sites.google.com/feeds/content/chromium.org/dev","type":"text/html"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5605495356529707253"},"published":{"$t":"2010-04-13T21:42:27.833Z"},"updated":{"$t":"2010-04-13T21:42:27.844Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-13T21:42:27.833Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"sk78RvI_UcGGddwNUBzsAcA.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5605495356529707253"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5890258080063263598"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5605495356529707253"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5605495356529707253"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5605495356529707253"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5605495356529707253"}],"author":[{"name":{"$t":"Kan Liu"},"email":{"$t":"kanliu@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8780554837281885774"},"published":{"$t":"2010-04-13T21:41:54.256Z"},"updated":{"$t":"2010-04-13T21:41:54.265Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-13T21:41:54.256Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"srjy2ox0dbMkVTv25qW2QdA.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8780554837281885774"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5890258080063263598"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8780554837281885774"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8780554837281885774"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8780554837281885774"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8780554837281885774"}],"author":[{"name":{"$t":"Kan Liu"},"email":{"$t":"kanliu@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1401353235129857814"},"published":{"$t":"2010-04-12T22:11:40.424Z"},"updated":{"$t":"2010-04-12T22:11:40.436Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-12T22:11:40.424Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"More_Bandwidth_Doesn_t_Matter_2_ (2).pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1401353235129857814"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/spdy/More_Bandwidth_Doesn_t_Matter_2_(2).pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1401353235129857814"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1401353235129857814"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1401353235129857814"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1401353235129857814"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4195199035961075686"},"published":{"$t":"2010-04-09T04:28:50.418Z"},"updated":{"$t":"2010-04-09T04:28:50.426Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-09T04:28:50.418Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Plugin architecture out of process.ai"},"summary":{},"content":{"type":"application/postscript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4195199035961075686"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"application/postscript","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/Pluginarchitectureoutofprocess.ai"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4195199035961075686"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4195199035961075686"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4195199035961075686"},{"rel":"edit-media","type":"application/postscript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4195199035961075686"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6771627989470524458"},"published":{"$t":"2010-04-09T04:25:49.514Z"},"updated":{"$t":"2010-04-09T04:25:49.534Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-09T04:25:49.514Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Plugin architecture.ai"},"summary":{},"content":{"type":"application/postscript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6771627989470524458"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"application/postscript","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/Pluginarchitecture.ai"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6771627989470524458"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6771627989470524458"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6771627989470524458"},{"rel":"edit-media","type":"application/postscript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6771627989470524458"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5913189470066965997"},"published":{"$t":"2010-04-09T03:47:46.840Z"},"updated":{"$t":"2010-04-09T03:47:46.860Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-09T03:47:46.840Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"out_of_process_plugins.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5913189470066965997"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/out_of_process_plugins.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5913189470066965997"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5913189470066965997"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5913189470066965997"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5913189470066965997"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8915156356304507554"},"published":{"$t":"2010-04-09T03:45:36.337Z"},"updated":{"$t":"2010-04-09T03:45:36.346Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-09T03:45:36.337Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"in_process_plugins.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8915156356304507554"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/in_process_plugins.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8915156356304507554"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8915156356304507554"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8915156356304507554"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8915156356304507554"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},"published":{"$t":"2010-04-07T22:33:12.943Z"},"updated":{"$t":"2010-04-07T22:44:44.970Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-07T22:44:44.968Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Window Management / Overview"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:trebuchet ms\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-In-full-screen-mode-multiple-windows-are-supported-by-hotkeys-and-swiping-gestures-to-switch-back-and-forth.-Users-can-jump-from-tab-to-tab-or-from-window-to-window.-Alternatively-the-Overview-allows-visual-tab-switching.\" /\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eIn full screen mode, multiple windows are supported by hotkeys and swiping \u003ca href\u003d\"https://sites.google.com/a/google.com/chromeos/for-team-members/user-experience/multitouch\" style\u003d\"color:rgb(46,73,135)!important;outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003egestures\u003c/a\u003e to switch back and forth. Users can jump from tab to tab or from window to window. Alternatively, the Overview allows visual tab switching.\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\r\n\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/OverviewSketch.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1270679727319/chromium-os/user-experience/window-management/OverviewSketch.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-The-overview\" /\u003eThe overview\u003c/h3\u003e\r\n\u003cdiv\u003eThe overview is available via either gesture and hotkey. It provides a visual way of switching between windows and tabs.\u003c/div\u003e\r\n\u003cdiv\u003eWindows are exploded into the tabs they contain, and all tabs/windows are visible in a single 2.5d space. We are exploring a variety of different display techniques, one illustrated below.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Overview.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1270679722536/chromium-os/user-experience/window-management/Overview.png\" width\u003d\"600\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThis model is largely based on Peter Jin Hong \u0026amp; Elin Pedersen's G.L.I.D.E. Tab Navigation ( \u003ca href\u003d\"http://www.flickr.com/photos/peterheads/sets/72157620266552714/show/with/3651412293/\" rel\u003d\"nofollow\"\u003emocks\u003c/a\u003e | \u003ca href\u003d\"http://www.youtube.com/watch?v\u003dkTXvNdiP-rE\"\u003evideo\u003c/a\u003e ). We present tabs in a venetian blind arrangement, ensuring visibility of the top left of every page, and using perspective to compress the most useful portions of the page into the available strips. Favicons are presented as an alternative visual aid. \u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eTo sample window motion, try the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip?attredirects\u003d0\"\u003eprototype\u003c/a\u003e (Requires Mac OS X 10.5+ / Safari 4).\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Tab-switching-overlay\" /\u003eTab switching overlay\u003c/h3\u003e\r\n\u003cdiv\u003eA lightweight version of this may be available for quick alt-tab switching. This would be sorted by most recently used (versus the ordered, ctrl-tab switcher) and would potentially include recently closed items from history. When switching, the contents in the background would swap to match the currently selected thumbnail/icon. \u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1270679712569/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png\" width\u003d\"600\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6127439158687662579"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"window-management"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4133766767740965965"},"published":{"$t":"2010-04-07T22:38:53.735Z"},"updated":{"$t":"2010-04-07T22:38:53.744Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-07T22:38:53.735Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Overview.app.1.0.0.zip"},"summary":{},"content":{"type":"application/zip","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4133766767740965965"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},{"rel":"alternate","type":"application/zip","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4133766767740965965"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4133766767740965965"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4133766767740965965"},{"rel":"edit-media","type":"application/zip","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4133766767740965965"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7560606709012765701"},"published":{"$t":"2010-04-07T22:35:27.312Z"},"updated":{"$t":"2010-04-07T22:35:27.319Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-07T22:35:27.312Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"OverviewSketch.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7560606709012765701"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/OverviewSketch.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7560606709012765701"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7560606709012765701"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7560606709012765701"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7560606709012765701"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7477691573927143121"},"published":{"$t":"2010-04-07T22:35:22.522Z"},"updated":{"$t":"2010-04-07T22:35:22.536Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-07T22:35:22.522Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Overview.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7477691573927143121"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Overview.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7477691573927143121"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7477691573927143121"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7477691573927143121"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7477691573927143121"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/40523231647190024"},"published":{"$t":"2010-04-07T22:35:12.563Z"},"updated":{"$t":"2010-04-07T22:35:12.569Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-04-07T22:35:12.563Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome-OS-Overlay.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/40523231647190024"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6127439158687662579"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/40523231647190024"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/40523231647190024"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/40523231647190024"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/40523231647190024"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6711775987372063849"},"published":{"$t":"2010-03-26T19:54:19.800Z"},"updated":{"$t":"2010-03-26T19:54:19.813Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-26T19:54:19.800Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt"},"summary":{},"content":{"type":"text/plain","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6711775987372063849"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"alternate","type":"text/plain","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6711775987372063849"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6711775987372063849"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6711775987372063849"},{"rel":"edit-media","type":"text/plain","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6711775987372063849"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6189293820549023931"},"published":{"$t":"2010-03-26T19:54:15.261Z"},"updated":{"$t":"2010-03-26T19:54:15.273Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-26T19:54:15.261Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CSUN_Improving_Access_To_Web_Platforms_Content_and Applications.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6189293820549023931"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_andApplications.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6189293820549023931"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6189293820549023931"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6189293820549023931"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6189293820549023931"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4964089216187999735"},"published":{"$t":"2010-03-25T14:26:02.636Z"},"updated":{"$t":"2010-03-25T14:26:02.649Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-25T14:26:02.636Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CSUN_Accessibility_in_the_Cloud.txt"},"summary":{},"content":{"type":"text/plain","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4964089216187999735"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"alternate","type":"text/plain","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.txt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4964089216187999735"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4964089216187999735"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4964089216187999735"},{"rel":"edit-media","type":"text/plain","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4964089216187999735"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7150169845837988028"},"published":{"$t":"2010-03-25T14:25:54.844Z"},"updated":{"$t":"2010-03-25T14:25:54.858Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-25T14:25:54.844Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"CSUN_Accessibility_in_the_Cloud.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7150169845837988028"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7150169845837988028"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7150169845837988028"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7150169845837988028"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7150169845837988028"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WCl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},"published":{"$t":"2010-03-09T21:30:21.127Z"},"updated":{"$t":"2010-03-23T22:45:55.211Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-23T22:45:55.203Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Infobars"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Arial\"\u003e\u003ch1 style\u003d\"font-size:18pt\"\u003e\u003ca name\u003d\"TOC-Infobars-are-non-modal-informational-messages-that-display-as-an-extension-of-the-chrome.-They-are-displayed-when-something-happens-in-the-Tab-that-the-user-should-be-aware-of-e.g.-a-plugin-has-crashed-or-the-user-can-save-a-password-they-just-entered.-An-\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003ch1 style\u003d\"font-size:18pt\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\" /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h1\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Infobars-are-non-modal-informational-messages-that-display-as-an-extension-of-the-chrome.-They-are-displayed-when-something-happens-in-the-Tab-that-the-user-should-be-aware-of-e.g.-a-plugin-has-crashed-or-the-user-can-save-a-password-they-just-entered.-An-1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Infobars-are-non-modal-informational-messages-that-display-as-an-extension-of-the-chrome.-They-are-displayed-when-something-happens-in-the-Tab-that-the-user-should-be-aware-of-e.g.-a-plugin-has-crashed-or-the-user-can-save-a-password-they-just-entered.-An-2\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Infobars-are-non-modal-informational-messages-that-display-as-an-extension-of-the-chrome.-They-are-displayed-when-something-happens-in-the-Tab-that-the-user-should-be-aware-of-e.g.-a-plugin-has-crashed-or-the-user-can-save-a-password-they-just-entered.-An-3\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Infobars-are-non-modal-informational-messages-that-display-as-an-extension-of-the-chrome.-They-are-displayed-when-something-happens-in-the-Tab-that-the-user-should-be-aware-of-e.g.-a-plugin-has-crashed-or-the-user-can-save-a-password-they-just-entered.-An-4\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003eInfobars are non-modal, informational messages that display as an extension of the chrome. They are displayed when something happens in the Tab that the user should be aware of, e.g. a plugin has crashed, or the user can save a password they just entered. An infobar will push the website down so as to not block any content.Variants\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-2\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch4 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-3\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch4 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-4\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-5\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Usage-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch4 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Usage-1\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch4 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Usage-2\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Usage-3\" /\u003e\u003cfont size\u003d\"3\"\u003eUsage\u003cspan style\u003d\"font-size:13px\"\u003e \u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h4\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-There-are-two-main-scenarios-for-dispalying-an-infobar:-1-Page-related-actions---to-message-the-user-about-an-action-they-can-take-related-to-the-page-they-are-on2-Confirmations-warnings---to-provide-a-notification-or-alert-about-a-problem-or-a-completed-a\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eThere are two main scenarios for dispalying an infobar: \u003cbr /\u003e1) Page-related actions - to message the user about an action they can take related to the page they are on\u003cbr /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-2-Confirmations-warnings---to-provide-a-notification-or-alert-about-a-problem-or-a-completed-actionInfobars-should-never-be-purely-informational-they-should-always-have-an-action-the-user-can-take.-Additionally-actions-should-be-optional.-If-they-are-block\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e2) Confirmations / warnings - to provide a notification or alert about a problem or a completed action\u003cbr /\u003e\u003cbr /\u003eInfobars should never be purely informational; they should always have an action the user can take. Additionally, actions should be optional. If they are blocking the user from doing something else, a dialog should be used instead.\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Types\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Types1\" /\u003e\u003cspan style\u003d\"font-size:medium\"\u003eTypes\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-1-Page-related-actions\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-1-Page-related-actions1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e1) Page-related actions\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Permissions---getting-the-user-to-agree-to-or-permit-an-action-e.g.-sharing-their-location-so-it-can-be-used-with-the-site-they-are-on-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Permissions---getting-the-user-to-agree-to-or-permit-an-action-e.g.-sharing-their-location-so-it-can-be-used-with-the-site-they-are-on-1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003ePermissions - getting the user to agree to or permit an action  (e.g. sharing their location so it can be used with the site they are on)\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Page-action---asking-the-user-if-they-want-to-perform-an-action-on-a-page-that-the-user-is-currently-on-e.g.-translating-a-page-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Page-action---asking-the-user-if-they-want-to-perform-an-action-on-a-page-that-the-user-is-currently-on-e.g.-translating-a-page-1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Page-action---asking-the-user-if-they-want-to-perform-an-action-on-a-page-that-the-user-is-currently-on-e.g.-translating-a-page-2\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Page-action---asking-the-user-if-they-want-to-perform-an-action-on-a-page-that-the-user-is-currently-on-e.g.-translating-a-page-3\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003ePage action - asking the user if they want to perform an action on a page that the user is currently on  (e.g. translating a page)\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-2\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-3\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-4\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Feature-setup---promoting-a-feature-that-s-related-to-content-on-the-current-page-additionally-giving-them-a-way-to-set-it-up-e.g.-setting-up-Autofill-feature-by-saving-current-page-s-form-info-5\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eFeature setup - promoting a feature that's related to content on the current page; additionally giving them a way to set it up  (e.g. setting up Autofill feature by saving current page's form info)\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-6\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-7\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-8\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-9\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-2-Confirmations-Warnings-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-2-Confirmations-Warnings-1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-2-Confirmations-Warnings-2\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-2-Confirmations-Warnings-3\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e2) Confirmations/Warnings \u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Confirmation---a-success-confirmation-of-action-installation-e.g.-confirmation-of-an-extension-or-theme-installation-with-ability-to-undo-\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Confirmation---a-success-confirmation-of-action-installation-e.g.-confirmation-of-an-extension-or-theme-installation-with-ability-to-undo-1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eConfirmation - a success confirmation of action/installation  (e.g. confirmation of an extension or theme installation with ability to undo) \u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Problem---informing-the-user-of-a-problem-that-occurred-with-a-way-for-them-to-fix-troubleshoot-e.g.-notification-of-extension-crashing-with-option-to-restore-notification-of-missing-plug-in-with-a-way-to-install-When-Where-to-display\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Problem---informing-the-user-of-a-problem-that-occurred-with-a-way-for-them-to-fix-troubleshoot-e.g.-notification-of-extension-crashing-with-option-to-restore-notification-of-missing-plug-in-with-a-way-to-install-When-Where-to-display1\" /\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eProblem - informing the user of a problem that occurred with a way for them to fix/troubleshoot (e.g. notification of extension crashing with option to restore; notification of missing plug-in with a way to install)\u003cbr /\u003e\u003cbr /\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-When-Where-to-display\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-When-Where-to-display1\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-When-Where-to-display2\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003eWhen \u0026amp; Where to display\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h1\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:Arial\"\u003e\u003ch1 style\u003d\"font-size:18pt\"\u003e\u003ca name\u003d\"TOC-In-most-cases-infobars-should-not-be-displayed-in-direct-response-to-a-user-action-i.e.-they-should-be-system-initiated-.-If-a-user-performs-an-action-that-directly-responds-with-a-message-of-the-types-listed-above-a-lightweight-dialog-should-be-used-inste\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-In-most-cases-infobars-should-not-be-displayed-in-direct-response-to-a-user-action-i.e.-they-should-be-system-initiated-.-If-a-user-performs-an-action-that-directly-responds-with-a-message-of-the-types-listed-above-a-lightweight-dialog-should-be-used-inste1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003eIn most cases, infobars should not be displayed in direct response to a user action (i.e. they should be system-initiated). If a user performs an action that directly responds with a message of the types listed above, a lightweight dialog should be used instead. The exception to this is the confirmation infobar which is usually in direct response to the user choosing to install something.\u003cbr /\u003e\u003cbr /\u003eInfobars with page-related actions should only show on the pages to which they are relevant. Confirmation/warning infobars should only show on the page that they first appeared. The infobar can persist on that tab/page as long as it makes sense to stay open or until the user closes it out.\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cb\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Visual\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cb\u003eVisual\u003c/b\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003eColors\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eFrom Chrome/3rd party (PC)\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/blue-gradient.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268171824859/user-experience/infobars/blue-gradient.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"text-align:auto;display:block\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eFrom Chrome/3rd party (Mac)\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/grey-gradient.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268171843497/user-experience/infobars/grey-gradient.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont size\u003d\"2\"\u003eConfirmation/warning\u003c/font\u003e\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cspan style\u003d\"font-size:16px\"\u003e\u003cb\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/yellow-gradient.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268171857241/user-experience/infobars/yellow-gradient.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cspan style\u003d\"font-size:16px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont size\u003d\"4\"\u003e\u003cspan style\u003d\"font-size:16px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003eControls\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-10\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/controls.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268172124824/user-experience/infobars/controls.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left;margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-size:small\"\u003eNote: The Options menu on an infobar only shows the encasing button on hover and press, similar to the page and wrench menus in Chrome.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:small\"\u003eSpacing\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003einfobar height \u003d 36 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003eleft and right padding \u003d 6 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003espacing after icon \u003d 6 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003espacing between buttons \u003d 10 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003espacing after message (and before buttons) \u003d 16 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003espacing to left of x button (between x and learn more or Options) \u003d 12 px\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-11\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/controls.png?attredirects\u003d0\" imageanchor\u003d\"1\" /\u003e\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Examples\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-12\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Examples1\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eExamples\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/h3\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-e.g.-Page-action-infobar-from-Translatee.g.-Confirmation.-page-action-infobar-with-more-optionse.g.-Problem-infobar\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"text-align:auto;margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-e.g.-Page-action-infobar-from-Translate\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-e.g.-Page-action-infobar-from-Translate1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003ee.g. Page action infobar from\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Translate\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Translate1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e Translate\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-13\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-translate.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268173421014/user-experience/infobars/example-translate.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003ee.g. Confirmation./page action infobar with more options\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268173035518/user-experience/infobars/example-translate-confirm.png\" /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-e.g.-Problem-infobar\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-e.g.-Problem-infobar1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003ee.g. Problem infobar\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-14\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch3 style\u003d\"font-size:12pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-15\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cspan style\u003d\"font-size:x-large\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-ext-crash.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268172903152/user-experience/infobars/example-ext-crash.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Content\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cb\u003eContent\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cb\u003eFont\u003c/b\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e[system font]\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e(Tahoma 13px shown in mocks)\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cfont face\u003d\"Arial, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/font\u003e\u003c/p\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003eMessage wording\u003c/b\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eInfobar messages should be clear and succinct. If possible, the message should be able to fit on one line of the infobar and still retain enough space for controls, options/learn more and a close button.   There may be cases where multiple infobars get stacked so messages should always be clear about where (which feature/app) the message is coming from.\u003c/font\u003e\u003cbr /\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cb\u003eButton wording\u003c/b\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cfont face\u003d\"Arial\"\u003eThe button that performs the main action should convey in wording what action will take place.  \u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eThe button that declines the action should simply say no if the preceding text contains a question. If the infobar message does not contain a question, then the button should convey what they are refusing.\u003c/font\u003e\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cb\u003eExamples by type: \u003c/b\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003ePermissions/Page Actions - explanation of who/what is asking and what they are asking permission for\u003c/p\u003e\u003c/div\u003e\u003cblockquote style\u003d\"padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-width:initial;border-color:initial\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003ee.g. Flickr wishes to use your location.  [Share my location]  [Don't share]\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003ee.g. This page is in French. Would you like to translate it?  [Translate]  [No thanks]\u003c/p\u003e\u003c/blockquote\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003eFeature setup - explanation of what feature is and/or value + question asking if user wants to perform action\u003c/p\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e             e.g. Chrome's Autofill feature can help you fill out web forms faster. Would you like to save this form info?  [Set up Autofill...]  [Nope]\u003c/p\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003eConfirmation - confirmation of completed action\u003c/p\u003e\u003c/div\u003e\u003cblockquote style\u003d\"padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-width:initial;border-color:initial\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003ee.g. The \"Mappy\" extension was successfully installed.  [Undo]\u003c/p\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003ee.g. This page has been translated from [French] to [English]. \u003ci\u003e Note: The controls are dropdowns in this example.\u003c/i\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003eProblem - explanation of problem\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px\"\u003e            e.g. The \"Dictionary\" extension crashed.  [Restore]\u003c/p\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\" /\u003e\u003c/ul\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Options-Learn-more-HelpIf-an-infobar-is-substantial-enough-to-have-an-options-menu-put-the-Help-or-Learn-more-link-within-that-menu.-Otherwise-any-infobar-that-can-provide-additional-explanation-of-the-feature-or-message-should-give-more-information-in-a-l\" /\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cp style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;display:inline!important\"\u003e\u003cfont face\u003d\"Arial\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003eOptions / Learn more / Help\u003cbr /\u003e\u003c/b\u003e\u003cbr /\u003e\u003c/font\u003eIf an infobar is substantial enough to have an options menu, put the Help or Learn more link within that menu.  Otherwise, any infobar that can provide additional explanation of the feature or message should give more information in a \"learn more\" or \"About [feature name]\" link.\u003c/font\u003e\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/h3\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Persistence-and-Crossfading\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003ePersistence and Crossfading\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003cdiv\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003ePersistence\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cdiv\u003eIn general, to avoid the up and down bouncing of new infobar instances, infobars related to the same action instance should persist.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor example, translating a page involves multiple infobars.  The first allow the user to translate the page, and the second informs the user that the page has been translated AND offers the ability to do another translation.  When the user clicks on the affirmative button in the first infobar, the infobar will not bounce up and return with the second infobar.  Instead, the infobar will persist, and the content on the infobar will change.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eIn a case where there is a persistent infobar and the color of the infobar must change, the first color will crossfade into the second color over 500 ms.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor example, if a user tries to translate a page using the blue translation bar and an error occurs, the blue infobar will crossfade into a yellow infobar outlining the issue and an ability to try translating again.\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:900\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003ch4 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Dialogs\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"display:inline!important\"\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003eDialogs\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:auto;margin-top:0px;margin-bottom:0px\"\u003e\u003cdiv style\u003d\"text-align:auto\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003eA dialog should be used instead of an infobar if...\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cdiv style\u003d\"text-align:auto\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e1) it will block the user from doing something unless he/she takes action\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e2) it is a direct response to a user action\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003ee.g.\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/dialog.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268173578521/user-experience/infobars/dialog.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Variants\" /\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left;display:inline!important\"\u003e\u003cb\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"display:inline!important\"\u003e\u003ca name\u003d\"TOC-Variants1\" /\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003eVariants\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/b\u003e\u003c/h4\u003e\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Geolocation-\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-Geolocation-1\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\"\u003eGeolocation\u003c/a\u003e \u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial;font-weight:normal;font-size:24px\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Arial,sans-serif;font-size:13px;font-weight:normal\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;display:inline!important\"\u003e\u003ch2 style\u003d\"font-size:14pt;display:inline!important\"\u003e\u003ca name\u003d\"TOC-16\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/h1\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5015258131538755524"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$pageName":{"$t":"infobars"},"sites$revision":{"$t":"21"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1983478281280698925"},"published":{"$t":"2010-03-23T21:14:44.477Z"},"updated":{"$t":"2010-03-23T21:14:44.484Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-23T21:14:44.477Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome RCX.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1983478281280698925"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2005444288198377207"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/calendar/Chrome%20RCX.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1983478281280698925"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1983478281280698925"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1983478281280698925"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1983478281280698925"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8637413939683792608"},"published":{"$t":"2010-03-23T18:31:04.267Z"},"updated":{"$t":"2010-03-23T18:31:04.278Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-23T18:31:04.267Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome RC.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8637413939683792608"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2005444288198377207"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/calendar/Chrome%20RC.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8637413939683792608"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8637413939683792608"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8637413939683792608"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8637413939683792608"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3743702564302757474"},"published":{"$t":"2010-03-23T18:13:08.374Z"},"updated":{"$t":"2010-03-23T18:13:08.388Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-23T18:13:08.374Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome Release Cycle 6.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3743702564302757474"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2005444288198377207"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/calendar/Chrome%20Release%20Cycle%206.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3743702564302757474"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3743702564302757474"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3743702564302757474"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3743702564302757474"}],"author":[{"name":{"$t":"Anthony LaForge"},"email":{"$t":"laforge@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8812075868204997277"},"published":{"$t":"2010-03-15T22:30:57.919Z"},"updated":{"$t":"2010-03-15T22:38:57.269Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-15T22:38:57.267Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Autoupdate Details"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium\"\u003e\u003cspan style\u003d\"font-family:Verdana;font-size:13px\"\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Abstract\" /\u003eAbstract\u003c/h2\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003eThis document describes details about how the \r\nautoupdate system works. For a high-level view of autoupdate, and \r\ninformation about the filesystem, see\u003cspan\u003e \u003c/span\u003e\u003ca href\u003d\"http://dev.chromium.org/chromium-os/chromiumos-design-docs/filesystem-autoupdate\" title\u003d\"File System/Autoupdate\"\u003eFile System/Autoupdate\u003c/a\u003e.\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003eThe autoupdate \r\nsystem provides bit-for-bit-exact in-place filesystem updates with \r\nfile-level binary diffs.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Goals\" /\u003e\u003cb\u003eGoals\u003c/b\u003e\u003c/h2\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUpdates should be as small\r\n as we can reasonably make them.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAn update must result in a root-filesystem \r\npartition in which each disk block is exactly (bit-for-bit) as specified\r\n by the OS vendor, so that the update can be signed on the server (for \r\nverified boot). \u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUpdates must be applied in place, so that many delta updates can \r\nbe installed without rebooting. For example: if a user is booted into \r\nversion N, and N+1 is released, the user downloads the (N→N+1) update \r\nand installs. If the user is still booted into N when N+2 comes out, \r\nthen the user downloads the (N+1→N+2) update and in-place installs it \r\nover N+1.\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Overview-of-the-install-procedure\" /\u003e\u003cb\u003eOverview of the \r\ninstall procedure\u003c/b\u003e\u003c/h2\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe client will have a partition (which we'll call the \"install \r\npartition\") on which to install a delta update. This partition will \r\nalready contain some version of the operating system.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe client will contact \r\nthe autoupdate server to request an update, specifying the version \r\nnumber of the system installed on the install partition. The server may \r\nprovide the client with a delta update which the client will download.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe delta update file \r\ncontains an ordered list of operations to perform on the install \r\npartition that will take it from the existing version to the new \r\nversion.\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Overview-of-the-delta-update-file-format\" /\u003e\u003cb\u003eOverview of the delta update \r\nfile format\u003c/b\u003e\u003c/h2\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNote:\r\n The destination partition is composed of 4K blocks.[1]\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe update file is an \r\nordered list of operations to perform. Each operation operates on \r\nspecific blocks on the partition. For each operation, there may be an \r\noptional data blob, also included in the update file.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe types of install \r\noperations are:\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eCopy: copy some blocks in \r\nthe install partition to other blocks in the install partition. This can\r\n be used to move a block to a new location, or to copy a block to \r\ntemporary storage; for more information, see the example below.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eBsdiff: read some blocks \r\ninto memory from the existing install partition, perform a patch (binary\r\n diff) using the attached data blob, and write the resulting updated \r\nblocks to specified blocks in the install partition. (See below for more\r\n details.)\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eReplace: write the attached data blob to specified \r\nblocks in the install partition.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eReplace_bz: B-unzip the attached data blob and \r\nwrite the result to specified blocks in the install partition.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eA traditional diff update \r\nto a file (using bsdiff) works like this: the old file and the patch \r\nfile are read into memory. Next, a patch operation is performed in \r\nmemory, resulting in the new file being in memory. Finally, the new file\r\n is written to disk.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nWe modify that operation \r\nslightly. We tell the patch program that the old file is the install \r\npartition. However, rather than have the program read the entire \r\npartition into memory, we tell it which blocks to read. Then the patch \r\noperation is performed in memory. Finally, the result is written \r\ndirectly to the install partition, but not at the beginning of the \r\ndevice: we will tell the program which blocks to write the result to.\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Generating-delta-update-files\" /\u003e\u003cb\u003eGenerating delta update files\u003c/b\u003e\u003c/h2\u003e\r\nThis \r\nsection describes how the OS vender creates an update file.\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe update file format \r\nwill be:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003col style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eMagic number ('CrAU')\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eVersion number\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eEight bytes for protobuf \r\nlength \u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe \r\nprotobuf\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eCollection\r\n of data blobs\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eEOF\u003c/li\u003e\r\n\u003c/ol\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe protobuf is a series \r\nof instructions that the client must perform in order.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNote: To specify a set of \r\nblocks, we use an extent, which is simply a contiguous range of disk \r\nblocks. For example, rather than specify blocks {10, 11, 12, 13, 14, 15,\r\n 17, 18}, it can be simpler to specify { (10, 6), (17, 2) } (a list of \r\nextents).\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003emessage Manifest {\u003cbr /\u003e  message InstallOperation {\u003cbr /\u003e    enum CompressionType {\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      COPY \u003d 0,  // file is unchanged; just move data blocks\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      BSDIFF \u003d 1,  // Read source data blocks as old file, included binary blob is diff, output to new blocks\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      REPLACE \u003d 2,  // Output included binary blob to new blocks\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      REPLACE_BZ \u003d 3  // Bunzip binary blob into new blocks\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    }\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    uint64 blob_offset;  // if present, the offset in the update image of the binary blob for this file\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    uint64 blob_length;  // if present, the length of the binary blob\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    message extent {\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      uint64 offset;  // in blocksize\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e      uint64 length;  // in blocksize\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    }\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    repeated extent input_extents;\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e    repeated extent output_extents;\u003c/pre\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003e  }\u003cbr /\u003e  repeated InstallOperation install_operations;\u003cbr /\u003e}\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eTo generate a delta \r\nupdate, we iterate over each regular file on the new filesystem. We get \r\nan ordered list of all datablocks in the file, then store those in a \r\nFile struct:\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003estruct Extent {\u003cbr /\u003e  uint64 start;\u003cbr /\u003e  uint64 length;\u003cbr /\u003e}\u003cbr /\u003e\u003cbr /\u003estruct File {\u003cbr /\u003e  string path;  // path within the filesystem\u003cbr /\u003e  vector\u0026lt;Extent\u0026gt; dst_extents;  // ordered list of all extents on the new filesystem\u003cbr /\u003e  vector\u0026lt;Extent\u0026gt; src_extents;  // Applies only for COPY and BSDIFF\u003cbr /\u003e  enum CompressionType; // one of: COPY, BSDIFF, REPLACE, REPLACE_BZ\u003cbr /\u003e}\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNote: eventually, each \r\nFile object will be converted into an InstallOperation message in the \r\nprotobuf.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFor each file, we look for the optimal \r\nway to compress it. If the file has changed, then we compare the sizes \r\nof the binary-diff, uncompressed, and bzip options, and we pick \r\nwhichever yields the smallest file size.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eWe then create a vertex in a graph for each \r\nFile object. Alongside the graph, we also create a vector to represent \r\neach block in the install partition:\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cpre style\u003d\"font-family:Courier New;white-space:pre-wrap;margin:0px\"\u003estruct Block {\u003cbr /\u003e  File* reader;\u003cbr /\u003e  File* writer;\u003cbr /\u003e}\u003cbr /\u003e\u003cbr /\u003evector\u0026lt;Block\u0026gt; blocks;  // length is the size of the install partition\u003cbr /\u003e\u003c/pre\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eWe then go \r\nthrough each block in each File object. For each block, we set the \r\nreader and writer parameters of the blocks vector.\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNext, we iterate through \r\nthe blocks array, and for each block with a different reader and writer \r\n(which are both non-null), we create an edge in the graph from the \r\nwriter to the reader. An edge in the (directed) graph points to a file \r\noperation that must complete before the edge's source file operation \r\nstarts. Thus, we are trying to ensure that if a block is both read and \r\nwritten by different file operations, the block is read before it's \r\nwritten. The edge represents blocks in the graph, so the edge's weight \r\nis the number of blocks.\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAt this point, we are likely to have a graph with \r\ncycles. We must break the cycles. We find the cycles with Johnson's \r\ncircuit finding agorithm (\u003ca href\u003d\"http://dutta.csc.ncsu.edu/csc791_spring07/wrap/circuits_johnson.pdf\" target\u003d\"_blank\" title\u003d\"PDF\" rel\u003d\"nofollow\"\u003ePDF\u003c/a\u003e) and Tarjan's strongly connected \r\ncomponents agorithm. For each cycle, we find the lowest-weight edge and \r\ncut it[2]. We cut an edge as follows: create a new node that represents \r\nan operation of copying some extents to scratch space. We then make the \r\nedge's source node point to the new node. We also modify the cut edge's \r\ndestination node to read from the scratch space rather than from the \r\nblocks represented by the edge we're cutting.\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eHere's an example of \r\ncutting an edge to break a cycle. Operation A reads block 3 to write \r\nblock 4. Operation B reads block 4 to write block 10.\u003cspan\u003e \u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268692643085/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium\"\u003e\u003cspan style\u003d\"font-family:Verdana;font-size:13px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOnce the cycles are broken, we can use a \r\ntopological sort to order all the nodes. Then we convert each node to an\r\n InstallOperation and add it to the Manifest structure. If the client \r\nwere to download and install the Manifest at this point, all the blocks \r\nthat contain filedata would be set correctly.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nHowever, we also \r\nneed non-filedata blocks to be set correctly. To handle non-filedata \r\nblocks, we create a single final InstallOperation of type REPLACE_BZ \r\nwhich writes to all extents that don't contain filedata. The attached \r\ndata blob contains the bzip2-compressed data to go into those blocks. In\r\n practice, this takes up about 2 megabytes compressed.\u003cfont size\u003d\"3\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Example\" /\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/h2\u003e\r\n\u003c/span\u003e\u003c/span\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/autoupdate-details/example.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1268692655838/chromium-os/chromiumos-design-docs/autoupdate-details/example.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium\"\u003e\u003cspan style\u003d\"font-family:Verdana;font-size:13px\"\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Streaming\" /\u003e\u003cb\u003eStreaming\u003c/b\u003e\u003c/h2\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eBecause the protobuf \r\n(which lists all operations) occurs at the beginning of the file, the \r\nupdate doesn't need to be saved to disk. It can be applied while \r\nstreaming from the server.\u003cbr /\u003e\r\n \u003cbr /\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eWe do need to make sure that the update is signed \r\nby the OS vendor. We can begin to apply the update and not mark it \r\nbootable until after the delta update signature is verified.\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Alternatives-considered\" /\u003e\u003cb\u003eAlternatives considered\u003c/b\u003e\u003c/h2\u003e\r\nThe solution\r\n presented here is not the only one we considered, but it is the only \r\none we've found that gives the best compression ratio in practice. Other\r\n solutions considered were:\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eDelta-compress\r\n the entire partition\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nBsdiff can't delta-compress the entire \r\npartition because its memory requirements are too high. During patching,\r\n it needs enough memory to store the original and new files, which in \r\nour case could have been over 1 gigabyte.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nHowever, another delta \r\ncompression program, Xdelta, uses a sliding window. In practice, this \r\nresulted in poor compression. On a test corpus, the diff was hundreds of\r\n megabytes.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003erdiff\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nRdiff\r\n works by storing only changed blocks in the delta file. It uses a \r\nsliding window so that blocks don't need to be aligned. When pointed at \r\nthe testing corpus, an rdiff delta of the entire partition was 104M, \r\nwell above the roughly 10M the proposed algorithm takes for the same \r\ncorpus.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIn the future, we might consider using rdiff-style (that \r\nis, rsync-style) delta compression at the file level. We could drop that\r\n in alongside bsdiff in the future.\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2 style\u003d\"font-size:14pt\"\u003e\u003ca name\u003d\"TOC-Footnotes\" /\u003e\u003cb\u003eFootnotes\u003c/b\u003e\u003c/h2\u003e\r\n[1] Some of these blocks contain file-data \r\nand some contain other data (metadata, for example). Since we are using \r\next4, which (at the time of writing) doesn't support fragments, we know \r\nthat a block cannot contain file data for more than one file: a block \r\neither contains file data for one file or no files.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n[2] In our \r\ntests, with the greedy agorithm (cut an edge in each cycle as it's \r\nfound), we cut about 28 MB worth of edges, which seems reasonable. \r\nEnumerating all cycles and cutting no edges, we found over \r\n5,000,000,000,000,000 cycles, so it's absolutely infeasible to consider \r\nall cycles before making cuts. To cut cycles more efficiently, though, \r\nwe might consider more than 1 cycle before making cuts (perhaps 1000 \r\ncycles or so).\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/autoupdate-details"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8812075868204997277"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8812075868204997277"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8812075868204997277"}],"author":[{"name":{"$t":"Andrew de los Reyes"},"email":{"$t":"adlr@chromium.org"}}],"sites$pageName":{"$t":"autoupdate-details"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7813204577117091086"},"published":{"$t":"2010-03-15T22:37:35.824Z"},"updated":{"$t":"2010-03-15T22:37:35.838Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-15T22:37:35.824Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7813204577117091086"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8812075868204997277"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/autoupdate-details/example.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7813204577117091086"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7813204577117091086"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7813204577117091086"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7813204577117091086"}],"author":[{"name":{"$t":"Andrew de los Reyes"},"email":{"$t":"adlr@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/673337399913437563"},"published":{"$t":"2010-03-15T22:37:23.063Z"},"updated":{"$t":"2010-03-15T22:37:23.085Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-15T22:37:23.063Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"cycle_break.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/673337399913437563"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8812075868204997277"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/673337399913437563"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/673337399913437563"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/673337399913437563"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/673337399913437563"}],"author":[{"name":{"$t":"Andrew de los Reyes"},"email":{"$t":"adlr@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8720180092030314005"},"published":{"$t":"2010-03-15T19:28:18.974Z"},"updated":{"$t":"2010-03-15T19:28:19.059Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-15T19:28:18.974Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome Windows Access Issue Tracker (public).csv"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8720180092030314005"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4241381013844394989"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/tracker/ChromeWindowsAccessIssueTracker(public).csv"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8720180092030314005"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8720180092030314005"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8720180092030314005"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8720180092030314005"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4513116466766194089"},"published":{"$t":"2010-03-09T22:18:51.113Z"},"updated":{"$t":"2010-03-09T22:47:15.011Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:47:15.004Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example-theme.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4513116466766194089"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-theme.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4513116466766194089"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4513116466766194089"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4513116466766194089"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4513116466766194089"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1106308544747435947"},"published":{"$t":"2010-03-09T22:37:03.530Z"},"updated":{"$t":"2010-03-09T22:37:03.543Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:37:03.530Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example-geolocation.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1106308544747435947"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1960927698603601539"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/geolocation/example-geolocation.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1106308544747435947"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1106308544747435947"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1106308544747435947"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1106308544747435947"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7023690397379321967"},"published":{"$t":"2010-03-09T22:26:18.500Z"},"updated":{"$t":"2010-03-09T22:26:18.521Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:26:18.500Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"dialog.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7023690397379321967"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/dialog.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7023690397379321967"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7023690397379321967"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7023690397379321967"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7023690397379321967"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4298516763498089766"},"published":{"$t":"2010-03-09T22:23:40.994Z"},"updated":{"$t":"2010-03-09T22:23:41.014Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:23:40.994Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example-translate.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4298516763498089766"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-translate.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4298516763498089766"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4298516763498089766"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4298516763498089766"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4298516763498089766"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8042121104821415478"},"published":{"$t":"2010-03-09T22:17:15.507Z"},"updated":{"$t":"2010-03-09T22:17:15.518Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:17:15.507Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example-translate-confirm.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8042121104821415478"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-translate-confirm.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8042121104821415478"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8042121104821415478"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8042121104821415478"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8042121104821415478"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2980862388905316123"},"published":{"$t":"2010-03-09T22:15:03.134Z"},"updated":{"$t":"2010-03-09T22:15:03.152Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:15:03.134Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"example-ext-crash.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2980862388905316123"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/example-ext-crash.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2980862388905316123"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2980862388905316123"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2980862388905316123"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2980862388905316123"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2521974991170862618"},"published":{"$t":"2010-03-09T22:00:50.876Z"},"updated":{"$t":"2010-03-09T22:02:04.824Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T22:02:04.818Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"controls.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2521974991170862618"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/controls.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2521974991170862618"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2521974991170862618"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2521974991170862618"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2521974991170862618"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3616329445872048635"},"published":{"$t":"2010-03-09T21:57:37.234Z"},"updated":{"$t":"2010-03-09T21:57:37.241Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T21:57:37.234Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"yellow-gradient.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3616329445872048635"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/yellow-gradient.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3616329445872048635"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3616329445872048635"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3616329445872048635"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3616329445872048635"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/714822652473450592"},"published":{"$t":"2010-03-09T21:57:23.490Z"},"updated":{"$t":"2010-03-09T21:57:23.497Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T21:57:23.490Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"grey-gradient.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/714822652473450592"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/grey-gradient.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/714822652473450592"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/714822652473450592"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/714822652473450592"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/714822652473450592"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/13448708717154750"},"published":{"$t":"2010-03-09T21:57:04.836Z"},"updated":{"$t":"2010-03-09T21:57:04.859Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T21:57:04.836Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"blue-gradient.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/13448708717154750"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5015258131538755524"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/infobars/blue-gradient.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/13448708717154750"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/13448708717154750"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/13448708717154750"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/13448708717154750"}],"author":[{"name":{"$t":"Roma Shah"},"email":{"$t":"roma@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3892058624054432172"},"published":{"$t":"2009-11-19T17:04:16.528Z"},"updated":{"$t":"2010-03-09T19:29:08.944Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T19:29:08.942Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Pinned Tabs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cfont color\u003d\"#E69138\" face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/font\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;, Verdana, sans-serif\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Pinned-tabs\" /\u003e\u003cb\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650258115/chromium-os/user-experience/tab-ui/tab_stripspng\" /\u003e\u003c/div\u003e\u003c/b\u003e\u003c/b\u003e\u003c/h3\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eMany users of existing browsers keep their 'primary' tabs to the left of their tab-strip. This allows easy access to commonly used applications that users keep open all the time. Others use bookmarks to quickly access their favorite apps without leaving them open, though bookmarks will replace their current window which may be undesirable.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\nPinned tabs are an acknowledgement of both of these behaviors:\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eAny tab can be converted into a 'pinned tab' where it shrinks to the size of its favicon, and remains locked to the left of the tab-strip\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eAny external link opened from a pinned tab will be opened outside of the group of pinned tabs, ensuring that the group remains consistently accessible\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003eApplications open with the pinned tabs automatically, and pinned tabs are removed when they are closed\u003c/li\u003e\u003c/ul\u003e\r\n\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cb\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003ePinned tabs remain available across sessions, allowing users to always access their favorite apps from a consistent location. Pinned tabs can be created via contextual menu, dragging a tab to the pinned area, or opening an application.\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/tab-ui"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3892058624054432172"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3892058624054432172"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3892058624054432172"}],"author":[{}],"sites$pageName":{"$t":"tab-ui"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3610379372322531763"},"published":{"$t":"2010-03-09T19:21:58.378Z"},"updated":{"$t":"2010-03-09T19:21:58.397Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T19:21:58.378Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ChromeOS.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3610379372322531763"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/ChromeOS.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3610379372322531763"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3610379372322531763"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3610379372322531763"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3610379372322531763"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8562016952839974999"},"published":{"$t":"2010-03-09T19:21:39.293Z"},"updated":{"$t":"2010-03-09T19:21:39.309Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T19:21:39.293Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8562016952839974999"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/Chrome.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8562016952839974999"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8562016952839974999"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8562016952839974999"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8562016952839974999"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"XSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},"published":{"$t":"2009-11-19T17:04:02.843Z"},"updated":{"$t":"2010-03-09T17:47:04.871Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T17:47:04.869Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"User Experience"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003ePlease visit \u003ca href\u003d\"http://www.chromium.org/user-experience\"\u003ehttp://chromium.org/user-experience\u003c/a\u003e for more information\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5368512348015071375"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"}],"author":[{}],"sites$pageName":{"$t":"user-experience"},"sites$revision":{"$t":"14"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6798971709427389352"},"published":{"$t":"2010-03-09T01:35:08.969Z"},"updated":{"$t":"2010-03-09T01:35:08.985Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T01:35:08.969Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"custom_colors.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6798971709427389352"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/custom_colors.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6798971709427389352"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6798971709427389352"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6798971709427389352"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6798971709427389352"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1739725953270634629"},"published":{"$t":"2010-03-09T01:33:42.504Z"},"updated":{"$t":"2010-03-09T01:33:42.513Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T01:33:42.504Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"xoom_menu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1739725953270634629"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/xoom_menu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1739725953270634629"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1739725953270634629"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1739725953270634629"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1739725953270634629"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1884650344430296413"},"published":{"$t":"2010-03-09T01:28:31.330Z"},"updated":{"$t":"2010-03-09T01:32:55.801Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T01:32:55.796Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flag_added.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1884650344430296413"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/flag_added.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1884650344430296413"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1884650344430296413"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1884650344430296413"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1884650344430296413"}],"author":[{}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3702803433739732282"},"published":{"$t":"2010-03-09T01:27:04.457Z"},"updated":{"$t":"2010-03-09T01:27:04.465Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T01:27:04.457Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"properties.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3702803433739732282"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/properties.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3702803433739732282"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702803433739732282"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3702803433739732282"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3702803433739732282"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/77817041891954544"},"published":{"$t":"2010-03-09T01:24:20.685Z"},"updated":{"$t":"2010-03-09T01:25:53.935Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-09T01:25:53.929Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"create_shortcut.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/77817041891954544"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/create_shortcut.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/77817041891954544"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/77817041891954544"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/77817041891954544"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/77817041891954544"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8025687992217450180"},"published":{"$t":"2010-03-06T19:05:23.238Z"},"updated":{"$t":"2010-03-06T19:05:33.002Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-06T19:05:33.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"IndexedDBBackup"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cfont color\u003d\"#CC0000\"\u003e\u003cb\u003eThis is an early draft:\u003c/b\u003e \u003c/font\u003ePlease send any feedback you might have to \u003ci\u003eJeremy Orlow \u0026lt;jorlow@chromium.org\u0026gt;\u003c/i\u003e or \u003ci\u003echromium-dev@chromium.org\u003c/i\u003e.\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eIntroduction:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe IndexedDB API implements a persistent (across browser/machine restarts) database that is quite stripped down.  It is built upon \"Object Stores\" (btrees of key-\u0026gt;value pairs) and Indexes (btrees of key-\u0026gt;object store record).  It includes an async API for use in pages and both an async and a sync API for workers.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe latest editors draft of the spec can be found here: \u003ca href\u003d\"http://dev.w3.org/2006/webapi/WebSimpleDB/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(71,18,100);outline-style:none;outline-width:initial;outline-color:initial\"\u003ehttp://dev.w3.org/2006/webapi/WebSimpleDB/\u003c/a\u003e  And there's a lot of discussion currently happening on public-webapps@w3.org.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAt the time of this writing the following are major changes that will probably happen to the spec in the near term:\u003c/div\u003e\u003cdiv\u003e\u003col style\u003d\"list-style-type:decimal\"\u003e\u003cli\u003eThe async API will probably be changed to a callback based one.\u003c/li\u003e\u003cli\u003eThe async API should be available from workers.\u003c/li\u003e\u003cli\u003eComposite indexes will probably be added.\u003c/li\u003e\u003cli\u003eExternal indexes will probably be removed (indexes not attached to a object store).\u003c/li\u003e\u003cli\u003eInverted indexes will hopefully be added so it's possible to efficiently implement full text search.\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eQ: Why this over LocalStorage?\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eA: LocalStorage is inherently racy or a parallelism disaster, depending on whether or not you're willing to implement the \"storage mutex\" described in the spec.  Chromium has decided not to implement it.  WebKit itself is single thread/process (i.e. no parallelism period).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eQ: Why this over WebSQLDatabase?\u003c/div\u003e\u003cdiv\u003eA: Microsoft and Mozilla have made it very clear they will not implement SQL in the browser.  If you want to argue this is silly, talk to them, not me.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003ci\u003eNote: Most of this design doc is talking about work inside WebKit/WebCore since most of the implementation will exist there.  At the bottom, there is discussion of Chromium specific plumbing.\u003c/i\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eThreading model:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAll database processing will happen on a background thread.  The reasons are as follows:  Both workers and pages will be able to access IndexedDB and thus it's possible that two different WebKit threads may have the same database open at the same time.  Database access will result in file IO and we need to ensure that we never block the main thread.  There's no way to re-use worker threads (even if we wanted to) because their lifetimes may be shorter than that of the opened database.  In addition, sharing things across threads is particularly difficult and dangerous in WebKit.  So, the easiest way to mitigate this is to do all database work on its own thread.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eUp for debate is whether we should have one IndexedDB thread, one per origin, or one per database.  Originally I was leaning towards one per database since threads are cheap and we should let the OS do its thing in terms of IO scheduling, but this may be excessive. Either way, I'd like to design so that we \u003ci\u003ecan\u003c/i\u003e split things up thread wise if we choose to in the future.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA side effect of having all work take place on a background thread is that we can share almost all of the code between the sync and async versions of the API.  To make this simpler, I'm planning on creating a class like what follows to link code running on a background thread to either the sync or async messages happening on the main/worker threads.\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// This is a class that abstracts away the idea of having another thread offer a\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// \"promise\" to give a particular return value, go off and do the processes, and then\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// send a message which either triggers asynchronous callbacks or unblocks the thread\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// and returns a result.  This class is not threadsafe, so be sure to only call it from\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e// the thread it's created on.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003etemplate \u0026lt;typename ResultType\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eclass AsyncReturn\u0026lt;ResultType\u0026gt; : RefCounted\u0026lt;ResultType\u0026gt; {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003epublic:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Provide async callbacks to be used in the event of a success or error.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // You should only call this or syncWaitForResult, and you should only call\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // either one once.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setAsyncCallbacks(PassOwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; successCallback, \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e                           PassOwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; errorCallback);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Block execution until a result or an exception is returned.  This will run\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // a WorkerRunLoop (sync is only available on workers) with the mode set to only\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // process tasks from our background thread.  You should only call this or\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // setAsyncCallbacks, and you should only call either one once.  If an exception\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // is set, the returned pointer will be 0.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    PassOwnPtr\u0026lt;ResultType\u0026gt; syncWaitForResult(OwnPtr\u0026lt;IDBDatabaseException\u0026gt;*);\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Called on success.  If there's anything in the queue, starts a one shot timer\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // on m_timer.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setResult(PassOwnPtr\u0026lt;Type\u0026gt;);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Called on error.  If there's anything in the queue, starts a one shot timer on\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // m_timer.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void setError(PassOwnPtr\u0026lt;IDBError\u0026gt;);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eprivate:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Function called by our timer.  Calls the proper callback.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    void onTimer(Timer*);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // Only one of the following should ever be set.  These are necessary even in\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // sync mode because it's possible for syncWaitForResult to be called after\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // the response has reached us.  These are zeroed out again when passed to the\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // callback or returned via syncWaitForResult.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;Foo\u0026gt; m_result;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    OwnPtr\u0026lt;IDBDatabaseError\u0026gt; m_error;\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // When this fires, we'll call the proper callback.  Only for async usage.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    Timer m_timer;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    // Only one of these is ever used and only during async usage.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; m_successCallback; \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e    OwnPtr\u0026lt;ScriptExecutionContext::Task\u0026gt; m_errorCallback;\u003c/font\u003e\u003c/div\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    // Used so we can assert this class is only used in one way or another.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    bool m_asyncUsage;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e    bool m_syncUsage;\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e};\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eClass structure:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn the spec, each interface has an async and a sync counterpart.  In most cases, they share a common base class.  The sync version has a \"Sync\" suffix and the async version has a \"Request\" suffix.  Thus the following is fairly common:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eInterface FooRequest : Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooSync : Foo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn most cases, FooRequest and FooSync are almost identical except in terms of the return types.  For sync, the methods usually return values.  For the other, they call callbacks which pass the values in as a parameter.  (The current event based API has you set event handlers that are shared by all requests and make a call.  So it is like the callback interface except only one call can be inflight at a time.  Plus the syntax is ugly.)\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn WebKit, my plan is to call the base class FooBase, but otherwise implement the IDLs exactly as specced.  So, I'll implement things as if the structure was as follows:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooRequest : FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003einterface FooSync : FooBase\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFooRequest and FooSync are very similar.  The only difference is in their return values and whether they block.  Since we're doing all real work on the background thread anyway, it makes sense for our sync and async APIs to run the same code and simply use the above AsyncReturn class to signal completion in both cases.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBoth FooRequest and FooSync will have a pointer to a Foo class.  This Foo class will have all the same methods as FooRequest and FooSync except it'll return an AsyncReturn\u0026lt;Type\u0026gt; instance.  FooSync will then call syncWaitForResult() which will run the WorkerRunLoop with the mode set to only accept messages from a background thread (much like WebSockets and sync XHR) while waiting for the response.  FooRequest will call setAsyncCallbacks and use those to call the proper javascript callback when the result is ready.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor browsers that use multiple processes (like Chromium) there needs to be some way to detach the central backend from various frontends (in Chromium terms, the browser process and the various renderer processes).  We'll do this by making all the Foo classes abstract interfaces and having the actual implementations be FooImpl classes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eEach Foo class will have a .cpp file with a single static method in it: a constructor.  For normal WebKit, that will call FooImpl::create.  For multi-process implementations, they can omit this file from their build and instead have Foo::create return a proxy object which implements the Foo interface but which actually sends messages across processes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSo, to recap, for each type of interface in the IDLs (for example, IDBObjectStore____) we'll have the following classes:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIDBObjectStoreBase  -\u0026gt;  \"IDBObjectStore\" in the IDL; just a base class with stuff shared between the next two.\u003c/li\u003e\u003cli\u003eIDBObjectStoreRequest -\u0026gt;  The same in the IDL; the async version of the class.  This and the next one do little more than have a reference to IDBObjectStore and call methods on it.\u003c/li\u003e\u003cli\u003eIDBObjectStoreSync  -\u0026gt;  The same in the IDL; the sync version of the class.\u003c/li\u003e\u003cli\u003eIDBObjectStore  -\u0026gt;  Interface for IDBObjectStoreImpl; methods will pretty much match what's exposed in IDL.\u003c/li\u003e\u003cli\u003eIDBObjectStoreImpl  -\u0026gt;  Implements IDBObjectStore; lives almost entirely on the background thread; will send a message to the AsyncReturn instance on completion.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003eBecause all objects either are tied 100% to the thread they're created on (FooSync/FooRequest/FooBase) or exist completely on the background thread (Foo), object lifetimes and how they're destroyed should be fairly easy.  This is even true in the face of the page cache.  When a page is suspended, we should pause all of it's callbacks.  Ideally, we'd cancel all currently running operations and restart if/when the page comes back, but it's not necessary for correctness.  All in all, the threading model should make page cache integration fairly straightforward.  During early development, however, we'll probably just have canSuspend return false to keep things simple.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen we open an indexed database, we'll need to call the chrome client to see if it's allowed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eDisk based tree implementation possibilities:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eI often say \"btree\" but really a B+Tree, B*Tree, B-Tree, etc, etc could all work, and I'm not married to any particular one.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eI haven't done much research into which would be best here or (more importantly) which library to use but \u003ca href\u003d\"http://1978th.net/tokyocabinet/\" style\u003d\"color:rgb(71,18,100);outline-style:none;outline-width:initial;outline-color:initial\" rel\u003d\"nofollow\"\u003ehttp://1978th.net/tokyocabinet/\u003c/a\u003e seems like a major possibility.  If all else fails, we can probably use the implementation in some existing product (that's license compatible) like SQLite.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf you have thoughts on this, please send me suggestions!\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eI'm not exactly sure how we'll integrate such a library with WebKit.  If it's small, we might be able to simply check it in.  If it's large.....ideas?\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eChromium side of the implementation:\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe communication from WebCore in the renderer to WebCore in the browser is all fairly straightforward (and will look much like how we implemented LocalStorage/SessionStorage), but the reverse needs to happen completely via async callbacks/tasks.  To handle this cleanly/efficiently, we'll need to add some notion of \"tasks\" to the Chromium WebKit API (like WebCore::GenericWorkerTask and Chromium's Task/RunnableMethod classes).  We'll also have FooProxy classes in WebCore that implement the Foo interface and which proxy all calls through to the WebKit layer, much like in LocalStorage/SessionStorage.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHere are the various layers of calls (from renderer to browser):\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebCore::FooProxy  (implements WebCore::Foo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebKit::RendererWebFooImpl  (implements WebKit::WebFoo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e\u0026lt;-- IPC --\u0026gt;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eFoo\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebKit::WebFooImpl  (implements WebKit::WebFoo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003eWebCore::FooImpl  (implements WebCore::Foo)\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote the symmetry and how we're essentially just trying to connect WebCore (in the renderer) to WebCore (in the browser process).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn addition to the standard set of classes, we'll need a couple special ones.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eWebKit::WebAsyncReturn\u0026lt;\u0026gt;\u003c/b\u003e   Much like WebCore::AsyncReturn\u0026lt;\u0026gt; except without any of the synchronous waiting functionality.  Returned from all methods.\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cb\u003eWebKit::WebTask\u003c/b\u003e   Much like WebCore::GenericWorkerTask or Chromium's Task.  Passed into WebKit::WebAsyncReturn\u0026lt;\u0026gt;::setAsyncCallbacks().\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003eIndexedDBDispatcher\u003c/b\u003e   Lives in the renderer and handles all the reply messages from the browser process.  Each outgoing request is assigned an ID so that we know which WebAsyncReturn object to match it up with.\u003c/li\u003e\u003cli\u003eIndexedDBDispatcherHost    Lives in the browser and handles all the messages from the renderer process.  It has a reference to the IndexedDB context and can send reply messages back to the renderer process.\u003c/li\u003e\u003cli\u003eIndexedDBContext   Owns the IndexedDatabase wrapper which owns all knows how to route messages to the right Chromium wrapper, which is 1:1 to a WebKit wrapper, which is 1:1 with a WebCore implementation.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003edelete mesages\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eLets take IDBDatabaseRequest::openObjectStore() as an example:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eIn WebCore inside the renderer process, openObjectStore will be called on an IDBDatabaseProxy object which implements the WebCore::IDBDatabase object.  (This object would have been returned earlier by the IndexedDatabase::open() call.)\u003c/li\u003e\u003cli\u003eThe proxy will call RendererWebIDBDatabaseImpl::openObjectStore().  (The object would have been returned earlier by RendererWebIndexedDatabaseImpl::open().  The object is an implementation of the WebIDBDatabase interface.)\u003c/li\u003e\u003cli\u003eThe Chromium implementation of RendererWebIndexedDatabaseImpl::openObjectStore() makes an async call to the browser process with the RendererWebIDBDatabaseImpl's ID.\u003c/li\u003e\u003cli\u003eIt then creates a RendererWebAsyncReturnImpl\u0026lt;WebIDBobjectStore\u0026gt; object and registers it with the IndexedDBDisptcher.\u003c/li\u003e\u003cli\u003eRendererWebIDBDatabaseImpl::openObjectStore() then returns that WebAsyncReturn\u0026lt;WebIDBObjectStore\u0026gt; object to its caller (IDBDatabaseProxy).\u003c/li\u003e\u003cli\u003eIDBDatabaseProxy::openObjectStore() would then instantiate a AsyncReturn\u0026lt;IDBObjectStore\u0026gt; object and two WebTasks.\u003c/li\u003e\u003cli\u003eBoth WebTasks would have pointers to the AsyncReturn\u0026lt;\u0026gt; object.  One would set the result.  The other would set the error.\u003c/li\u003e\u003cli\u003eWebAsyncReturn\u0026lt;\u0026gt;::setAsyncCallbacks() would be called with the two tasks.\u003c/li\u003e\u003cli\u003eIDBDatabaseProxy::openObjectStore() would then return the AsyncReturn\u0026lt;\u0026gt; object to its caller.\u003c/li\u003e\u003cli\u003eThat caller would similarly create tasks and pass them into the AsyncReturn\u0026lt;\u0026gt; (but that's just what happens normally; it's not Chromium speciifc).\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eSo now there's an async message in flight to the browser process and a chain of callbacks/tasks set up to fire a callback or allow execution to continue inside the browser process.\u003c/div\u003e\u003cul\u003e\u003cli\u003eOn the IO thread in the browser, the message comes in.  An IndexedDBDispatcherHost receives the message.  Each method detects whether it's on the IO thread and, if so, redirects it to the WebKit thread.\u003c/li\u003e\u003cli\u003eThe message would then call IndexedDBContext::getIndexedDatabase() with the WebIndexedDatabase's ID.\u003c/li\u003e\u003cli\u003eIf the ID doesn't exist, we kill off the renderer since at best there's a major bug or memory corruption, and at worst the renderer is compromised.\u003c/li\u003e\u003cli\u003eWe then call Chromium's IDBDatabase::openObjectStore() method.  (Note that the name is the same as another object in WebCore.  That's fine.  They're in separate namespaces and since the WebKit layer is in between, it isn't confusing in practice.)\u003c/li\u003e\u003cli\u003eChromium's IDBDatabase::openObjectStore then calls WebIDBDatabaseImpl::openObjectStore().  (The WebIDBDatabaseImpl is an implementation of WebIDBDatabase that lives in WebKit/chromium/src and provides entry back into WebCore's implementation of the IndexedDB implementation)\u003c/li\u003e\u003cli\u003eWebIDBDatabaseImpl::openObjectStore() then calls WebCore::IDBDatabase::openObjectStore().  (Which, via the virtual method call, actually calls WebCore::IDBDatabaseImpl::openObjectStore().)\u003c/li\u003e\u003cli\u003eWebCore's IndexedDB implementation does its thing and returns an AsyncReturn\u0026lt;IDBObjectStore\u0026gt; object.\u003c/li\u003e\u003cli\u003eWebIDBDatabaseImpl then creates a WebAsyncReturnImpl\u0026lt;WebIDBObjectStore\u0026gt; object that has a pointer to the AsyncReturn\u0026lt;\u0026gt; object and returns it.\u003c/li\u003e\u003cli\u003eChromium's IDBDatabase::openObjectStore() then creates two WebTasks.  One for a success/result and one for an error.  These WebTasks wrap Chromium Tasks/RunnableMethods.\u003c/li\u003e\u003cli\u003eWhen the WebTasks get a response, they'll wrap it in a WebIDBDatabaseError or a WebIDBObjectStore as appropriate.  They'll then pass the result on to the appropriate WebTask.\u003c/li\u003e\u003cli\u003eThe appropriate Chromium Task will then be called which will fetch the result.  If it's a WebIDBObjectStore, it'll be added to the IndexedDBContext and an ID will be assigned.\u003c/li\u003e\u003cli\u003eEither the serialized WebIDBDatabaseError or the WebIDBObjectStore's ID will be sent back via the IndexedDBDispatcherHost via an async message.  Either way, it'll include an ID that was sent with the original async request.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eSo now a reply message is en route to the renderer.\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe IndexedDBDispatcher receives the message.  Based on the ID, it figures out which WebAsyncReturn\u0026lt;\u0026gt; object is associated with it.\u003c/li\u003e\u003cli\u003eIt'll create a RendererWebIDBDatabaseErrorImpl or a RendererWebIDBObejctStoreImpl to wrap the result in.  If it's the latter, it'll be given the ID the browser process created.\u003c/li\u003e\u003cli\u003eThe object is passed into either WebAsyncReturn\u0026lt;\u0026gt;::setResult() or ::setError.\u003c/li\u003e\u003cli\u003eThat then either converts the WebIDBDatabaseError object into a WebCore::IDBDatabaseError or wraps the WebIDBObjectStore in an WebCore::IDBObjectStoreProxy and passes the result into WebCore::AsyncReturn\u0026lt;\u0026gt;::setResult() or ::setError().\u003c/li\u003e\u003cli\u003eAnd the rest proceeds as it normally would in WebCore.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eThis same process happens for each object type--except for IndexedDatabase since it's a singleton and the entrypoint to the whole API.  It'd be created as follows:\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eWebCore::IndexedDatabase::create() is normally part of WebCore/storage/IndexedDatabase.cpp, but Chromium won't compile that file.  Instead, the file with our WebCore::IndexedDatabaseProxy will contain the WebCore::IndexedDatabase::create() implementation.  (Normally WebCore::IndexedDatabase::create() would just call WebCore::IndexedDatabaseImpl::create().)\u003c/li\u003e\u003cli\u003eWebCore::IndexedDatabase::create() would call WebCore::IndexedDatabaseProxy::create() through the ChromiumBridge.\u003c/li\u003e\u003cli\u003eIndexedDatabaseProxy::create() would call WebKitClient::CreateIndexedDatabase() which would create a RendererWebIndexedDatabaseImpl and return is synchronously.  IndexedDatabaseProxy would then wrap that class.\u003c/li\u003e\u003cli\u003eThe browser process would create its own IndexedDatabase/WebIndexedDatabase/WebCore::IndexedDatabase lazily on first use.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5790027220183470225"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/indexeddb/indexeddbbackup"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8025687992217450180"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8025687992217450180"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8025687992217450180"}],"author":[{}],"sites$pageName":{"$t":"indexeddbbackup"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1676430114292223065"},"published":{"$t":"2008-09-17T18:47:07.042Z"},"updated":{"$t":"2010-03-02T14:51:10.980Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-03-02T14:47:40.341Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"DNS Prefetching"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Problem\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eProblem\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Solution\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eSolution\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Architecture\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eArchitecture\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Manual-Prefetch\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eManual Prefetch\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-DNS-Prefetch-Control\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eDNS Prefetch Control\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Browser-Startup\"\u003e\u003cstrong\u003e6 \u003c/strong\u003eBrowser Startup\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Omnibox\"\u003e\u003cstrong\u003e7 \u003c/strong\u003eOmnibox\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Effectiveness\"\u003e\u003cstrong\u003e8 \u003c/strong\u003eEffectiveness\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Typical-Usage\"\u003e\u003cstrong\u003e8.1 \u003c/strong\u003eTypical Usage\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Network-Usage\"\u003e\u003cstrong\u003e8.2 \u003c/strong\u003eNetwork Usage\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Cache-Eviction\"\u003e\u003cstrong\u003e8.3 \u003c/strong\u003eCache Eviction\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\r\n \r\n \u003c/h2\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Problem\" /\u003e\r\n Problem\u003cbr /\u003e\r\n \u003c/h2\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\nDNS resolution time can lead to a significant amount of user perceived\r\nlatency. The time that DNS resolution takes is highly variable.\r\n Latency delays range from around 1ms (locally cached results) to\r\ncommonly reported times of several seconds. \u003cbr /\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Solution\" /\u003e\r\n Solution\r\n \u003c/h2\u003e\r\n DNS prefetching is an attempt to resolve domain names before a user tries to follow a link. This is done using the computer's normal DNS resolution mechanism; no connection to Google is used. Once\r\na domain name has been resolved, if the user does navigate to that\r\ndomain, there will be no effective delay due to DNS resolution time.\r\n The most obvious example where DNS prefetching can help is when a user\r\nis looking at a page with many links to various domains, such as a\r\nsearch results page.  When we encounter hyperlinks in pages, we extract\r\nthe domain name from each one and resolving each domain to an IP\r\naddress.  All this work is done in parallel with the user's reading of\r\nthe page, using minimal CPU and network resources.  When a user clicks\r\non any of these pre-resolved names, they will on average save about 200\r\nmilliseconds in their navigation (assuming the user hadn't already\r\nvisited the domain recently). More importantly than the average\r\nsavings, users won't tend to experience the \"worst case\" delays for DNS\r\nresolution, which are regularly over 1 second.\u003cbr /\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Architecture\" /\u003e\r\n \u003cb\u003eArchitecture\u003c/b\u003e\r\n \u003c/h2\u003e\r\n \u003cspan style\u003d\"font-weight:normal\"\u003eChromium's\r\nimplementation of DNS prefetching does not use the browser's network\r\nstack at all.  Instead, it relies on external threads to resolve the\r\nnames, thereby warming the DNS cache of the operating system\r\n(completely ignoring any cache in the application network stack).  The\r\nadvantage of this approach was that it was completely compatible with\r\nall network stacks (it is external), and prevented accidental\r\nregressions on the main network stack.  \u003c/span\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\nSince some DNS resolutions can take a long time, it is paramount that\r\nsuch delays in one resolution should not cause delays in other\r\nresolutions.  Toward this end (on Windows, where there is no native\r\nsupport for asynchronous DNS resolution), Chromium currently employs 8\r\ncompletely asynchronous worker threads to do nothing but perform DNS\r\nprefetch resolution. Each worker thread simply waits on a queue, gets\r\nthe next requested domain name, and then blocks on a synchronous\r\nWindows resolution function.   Eventually the operating system responds\r\nwith a DNS resolution, the thread then discards it (leaving the OS\r\ncache warmed!), and waits for the next prefetch request.  With 8\r\nthreads, it is rare than more than one or two threads will block\r\nextensively, and most resolution proceed rather quickly (or as quickly\r\nas DNS can service them!).  On Debug builds, the\r\n\"about:histograms/DNS.PrefetchQueue\" has current stats on the queueing\r\ndelay.\u003cbr /\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Manual-Prefetch\" /\u003e\r\n \u003cb\u003eManual Prefetch\u003cbr /\u003e\r\n \u003c/b\u003e\r\n \u003c/h2\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse;font-family:arial,sans-serif\"\u003eChromium\r\nuses the \"href\" attribute of hyperlinks to find host names to prefetch.\r\nHowever, some of those hyperlinks may be redirects, for example if the\r\nsite is trying to count how many times the link is clicked.  In those\r\nsituations, the \"true\" targeted domain is not necessarily discernible\r\nby examining the content of a web page, and so Chromium not able to\r\nprefetch the final targeted domain. \u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse\"\u003eTo improve the speed of redirects, content authors can add the following tag to their page:\u003c/span\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:Verdana\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:courier new,monospace\"\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse\"\u003e\u0026lt;link rel\u003d\"dns-prefetch\" href\u003d\"\u003ca href\u003d\"http://the_worlds_best_vendor.com/\" rel\u003d\"nofollow\" title\u003d\"//the_worlds_best_vendor.com\"\u003e//host_name_to_prefetch.com\u003c/a\u003e\"\u0026gt;\u003c/span\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:Verdana\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse\"\u003eThe\r\nabove \"link rel\" tag has no impact on the visual rendering of the page,\r\nbut causes Chromium to prefetch the DNS resolution of\r\n\"host_name_to_prefetch.com\" as though there was an actual href targeted\r\nat a path in that domain. The double slashes indicate that the URL\r\nstarts with a host name (as specified in \u003ca href\u003d\"http://www.ietf.org/rfc/rfc1808.txt\" rel\u003d\"nofollow\" title\u003d\"RFC 1808\"\u003eRFC 1808\u003c/a\u003e). It is equivalent (but unnecessary) to use a full URL such as \"http://host_name_to_prefetch.com/\".\u003c/span\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-DNS-Prefetch-Control\" /\u003e\r\n \u003cb\u003eDNS Prefetch Control\u003cbr /\u003e\r\n \u003c/b\u003e\r\n \u003c/h2\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eBy default, Chromium does not prefetch host names in hyperlinks that\r\nappear in HTTPS pages. This restriction helps prevent an eavesdropper\r\nfrom inferring the host names of hyperlinks that appear in HTTPS pages\r\nbased on DNS prefetch traffic. The one exception is that Chromium may\r\nperiodically re-resolve the domain of the HTTPS page itself.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\r\nAn inquisitive content author (for example, a commenter on a blog) may\r\nabuse DNS prefetching to attempt to monitor viewing of content\r\ncontaining links. For example, links with novel subdomains, when\r\nresolved during a prefetch, may notify a domain's resolver that a link\r\nwas viewed, even if it was not clicked.  In some such cases, the\r\nauthority serving the content (such as a blog owner, or webmail server)\r\nmay wish to preclude such abusive monitoring.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\r\nTo allow webmasters to control whether DNS prefetch is enabled or\r\ndisabled, Chromium includes a DNS Prefetch Control mechanism. It can be\r\nused to turn DNS prefetch on for HTTPS pages, or turn it off for HTTP\r\npages.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \u003c/div\u003e\r\n \u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse\"\u003eChromium watches for an HTTP header of the form \"X-DNS-Prefetch-Control\"\r\n(case insensitive) with a value of either \"on\" or \"off.\"  This setting changes the default behavior for the rendered content. A \"meta\r\nhttp-equiv\" tag of the same name can be used to make policy changes within a\r\npage. If a page explicitly opts out of DNS prefetch, further\r\nattempts to opt in are ignored.\u003c/span\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse\"\u003eFor example, the following page from \u003ca href\u003d\"https://content_author.com/\" rel\u003d\"nofollow\" style\u003d\"color:rgb(0,0,222)\" target\u003d\"_blank\" title\u003d\"https://content_author.com/\"\u003e\u003cu\u003ehttps://content_author.com/\u003c/u\u003e\u003c/a\u003e would cause Chromium to prefetch \"b.com\" but not \"a.com\", \"c.com\", or \u003c/span\u003e\u003cspan style\u003d\"border-collapse:collapse\"\u003e\"d.com\". \u003c/span\u003e\r\n \u003c/div\u003e\r\n \u003cspan style\u003d\"border-collapse:collapse;font-family:Verdana\"\u003e\u003cbr /\u003e\r\n \u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\u0026lt;a href\u003d\"\u003c/span\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fa.com\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNEYnDzIlRjJbXDcx3Cax_hkvntAFQ\" style\u003d\"color:rgb(0,0,222);font-family:courier new,monospace\" target\u003d\"_blank\"\u003e\u003cu\u003ehttp://a.com\u003c/u\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\"\u0026gt; A) Default HTTPS: No prefetching \u0026lt;/a\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;meta http-equiv\u003d\"x-dns-prefetch-control\" content\u003d\"on\"\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;a href\u003d\"\u003c/span\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fb.com\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNFq7tUq50NgFVyTsk2WMeiRf6l6WQ\" style\u003d\"color:rgb(0,0,222);font-family:courier new,monospace\" target\u003d\"_blank\"\u003e\u003cu\u003ehttp://b.com\u003c/u\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\"\u0026gt; B) Manual opt-in: Prefetch domain resolution. \u0026lt;/a\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;meta http-equiv\u003d\"x-dns-prefetch-control\" content\u003d\"off\"\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;a href\u003d\"\u003c/span\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fc.com\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNFTPfaTERg_4COAyTmt8OqdKsFsCA\" style\u003d\"color:rgb(0,0,222);font-family:courier new,monospace\" target\u003d\"_blank\"\u003e\u003cu\u003ehttp://c.com\u003c/u\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\"\u0026gt; C) Manual opt-out: Don't prefetch domain resolution \u0026lt;/a\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;meta http-equiv\u003d\"x-dns-prefetch-control\" content\u003d\"on\"\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\r\n \u0026lt;a href\u003d\"\u003c/span\u003e\u003ca href\u003d\"http://www.google.com/url?q\u003dhttp%3A%2F%2Fd.com\u0026amp;sa\u003dD\u0026amp;sntz\u003d1\u0026amp;usg\u003dAFQjCNEJTYzjWlVmnzIooEfteTYJZzXmzA\" style\u003d\"color:rgb(0,0,222);font-family:courier new,monospace\" target\u003d\"_blank\"\u003e\u003cu\u003ehttp://d.com\u003c/u\u003e\u003c/a\u003e\u003cspan style\u003d\"font-family:courier new,monospace\"\u003e\"\u0026gt; D) Already opted out: Don't prefetch domain resolution. \u0026lt;/a\u0026gt;\u003c/span\u003e\u003cbr style\u003d\"font-family:courier new,monospace\" /\u003e\r\n \u003cbr /\u003e\r\n \u003c/span\u003e\u003cspan style\u003d\"border-collapse:collapse;font-family:arial,sans-serif\"\u003eChild frames also inherit the DNS prefetch control opt-out setting from their parent. The DNS prefetch control setting applies only to hyperlinks and not to the manual prefetch mechanism. \u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Browser-Startup\" /\u003e\r\n \u003cb\u003eBrowser Startup\u003c/b\u003e\u003cbr /\u003e\r\n \u003c/h2\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\nChromium automatically remembers the first 10 domains that were\r\nresolved the last time the Chromium was started, and automatically\r\nstarts to resolve these names \u003cb\u003every\u003c/b\u003e early in the startup process.  As\r\na result, the domains for a user's home page(s), along with any\r\nembedded domains (or anything the user \"always\" visits just after\r\nstartup), are generally resolved before much of Chromium has ever\r\nloaded.  When Chromium finally starts to try to load and render those\r\npages, there is typically no DNS induced latency, and the application\r\neffectively \"starts up\" (becoming usable) faster.  Average startup\r\nsavings are 200ms or more, with common acceleration over 1 second.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Omnibox\" /\u003e\r\n Omnibox\r\n \u003c/h2\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\nPrefetching is also used in Chromium's omnibox, where URL and/or search\r\nqueries are entered. The omnibox automatically proposes an action,\r\neither of the form of a search query, or a URL navigation, as the user\r\ntypes in text.  This proposed action is considered the autocompletion\r\nof what the user is typing.  Each time the omnibox makes a proposal\r\n(suggests an autocompletion), the domain for the underlying URL is\r\nautomatically pre-resolved.  This means that when a user is entering a\r\nsearch query, while they type the query (typically when they enter a\r\nspace between words), Chromium will automatically prefetch the\r\nresolution of the domain in their search provider's URL.  Assuming they\r\nhaven't done a search in a while, this can save a user an average of\r\nover 100ms in getting a search result, if not more. Similarly, if the\r\nURL is a \"common\" URL that they've typed in the past (e.g., their\r\nfavorite web site; bank;  email provider; their company; etc.), the\r\nsavings in resolution time can be quite significant. \u003c/div\u003e\r\n \u003c/div\u003e\r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Effectiveness\" /\u003e\r\n Effectiveness\r\n \u003c/h2\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Typical-Usage\" /\u003e\r\n \u003cb\u003eTypical Usage\u003c/b\u003e\u003cbr /\u003e\r\n \u003c/h3\u003e\r\nIf a user resolved a domain name to an IP address recently, their\r\noperating system will remember (cache) the answer, and then resolution\r\ntime can be as low as 0-1ms (a thousandth of a second).  If the\r\nresolution is not locally cached and needs to \"go out over the\r\nnetwork,\" then a bare minimum for resolution time is about 15 ms,\r\nassuming a nearby firewall (home router?) has a cached answer to the\r\nquestion.  Most common names like google.com and yahoo.com are resolved\r\nso often that most local ISP's name resolvers can answer in closer to\r\n80-120ms.  If the domain name in question is an uncommon name, then a\r\nquery may have to go through numerous resolvers up and down the\r\nhierarchy, and the delay can average closer to 200-300ms.  More\r\ninterestingly, for any of these queries that access the internet,\r\ndropped packets, and overworked (under provisioned) name resolvers,\r\nregularly increases the total resolution time to between 1 and 10\r\nseconds. \u003c/div\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Network-Usage\" /\u003e\r\n \u003cb\u003eNetwork Usage\u003c/b\u003e\r\n \u003c/h3\u003e\r\n \u003c/div\u003e\r\nDNS resolutions use a hierarchical system, where each level in the\r\nhierarchy has a cache, to remember previous resolutions.  As a result,\r\nextra resolutions don't generally speaking cause end-to-end internet\r\nusage.  The resolutions only go as far as needed toward the\r\n\"authoritative\" resolver, stopping when they reach a resolver that\r\nalready has the resolution in a cache.  In addition, DNS resolution\r\nrequests are very light weight.  Each request typically involves\r\nsending a single UDP packet that is under 100 bytes out, and getting\r\nback a response that is around 100 bytes.  This minimal impact on\r\nnetwork usage is compensated by a significant improvement in user\r\nexperience.\u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Cache-Eviction\" /\u003e\r\n Cache Eviction\r\n \u003c/h3\u003e\r\nThe local machine's DNS cache is pretty limited.  Current estimates for\r\nthe number of resolutions remembered on a Windows XP box are in the\r\nrange of 50-200 domain names.  As a result, if \"too many\" resolutions\r\nare made, then some \"necessary\" resolutions might be \"evicted\" from the\r\ncache to make room for the new prefetches.  Chromium tries to model the\r\nunderlying cache, and guess when there is a chance that a \"soon to be\r\nneeded\" domain resolution has been evicted.  When Chromium decides an\r\neviction may have taken place, it can automatically resolve the domain\r\nname again, ensuring it is either reloaded into the cache, or marked as\r\n\"recently used\" so that it won't be evicted for a \"while.\"  Cache\r\nevictions caused by Chromium can have a negative impact on other\r\napplications that don't (yet) use prefetching techniques to keep the\r\nunderlying cache \"warm.\" \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\nMany large internet sites (google.com, yahoo.com, etc.) commonly mark\r\nthe domain names resolutions with an expiration time in the\r\nneighborhood of 5 minutes. They probably set the expiration time to be\r\nshort so that they can better respond to changes in supply and demand\r\nfor their services.  This in turn tends cause cache evictions.  As a\r\nresult, most applications tend to face the problem of cache eviction,\r\nand already employ various methods to reduce the impact. \u003c/div\u003e\r\n \r\n\u003cdiv\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \u003cbr /\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n The \"about:histograms/DNS\" and \"about:dns\" pages contain more information about DNS prefetch activity.\r\n \u003c/div\u003e\r\n \r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/dns-prefetching"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1676430114292223065"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1676430114292223065"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1676430114292223065"}],"author":[{}],"sites$pageName":{"$t":"dns-prefetching"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5683620917446394086"},"published":{"$t":"2010-02-18T17:10:42.809Z"},"updated":{"$t":"2010-02-18T17:10:42.820Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-18T17:10:42.809Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Chrome-OS-Panels.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5683620917446394086"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/Chrome-OS-Panels.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5683620917446394086"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5683620917446394086"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5683620917446394086"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5683620917446394086"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"UCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1515690148501349015"},"published":{"$t":"2009-03-04T16:36:53.114Z"},"updated":{"$t":"2010-02-13T09:22:12.535Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-13T09:22:12.535Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Mac App Mode (draft)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h3\u003e\u003cdiv\u003eChromium provides a way to create a \"custom\" browser shortcut for any web site (not yet implemented on Mac). Our ultimate goal for the Mac implementation is to make such a shortcut appear to be first-class application. In particular, its UI should consist of a browser displaying the specified web site, but with many \"normal\" browser features removed (no bookmarks, navigation, a custom menu bar, etc.). Usage examples include Gmail, Reader, Facebook, and so on.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-User-experience-requirements\" /\u003eUser experience requirements\u003c/h3\u003e\u003cdiv\u003eThe following are absolutely essential:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eA shortcut should appear to be an application to the operating system (Spotlight, Finder, etc.). This also includes it working in the Dock like any other application: click to launch/raise, indicates when running, provides a window list, and present in Cmd-tab list for quick application switching.\u003c/li\u003e\u003cli\u003eThe user should be able to treat a shortcut like any other Application, e.g., install it wherever he/she wishes.\u003c/li\u003e\u003cli\u003eA shortcut must have a customizable name and icon (and of course web site); the name must be displayed in the menu bar.\u003c/li\u003e\u003cli\u003eThe window displayed by a shortcut must not display the \"usual\" gadgets, such as the toolbar, bookmark bar, etc.\u003c/li\u003e\u003cli\u003eA shortcut must be robust and maintenance-free with respect to browser updates, etc. (This presumably also means that shortcuts should be designed to be upgradable, at least in some way, if necessary.)\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003eThe following would be nice to have:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eA shortcut should function properly with Exposé and Spaces (e.g., a user should be able to \"pin\" a shortcut to any workspace, in particular to a workspace different from the browser's workspace). [This is not expected to be a problem; see below.]\u003c/li\u003e\u003cli\u003eA shortcut should have fully customized menus, including in particular the main menu. This means, in particular, that many of the normal browser's menus would simply not be present. [This is somewhat difficult, but do-able in the near future.]\u003c/li\u003e\u003cli\u003eA shortcut should optionally be able to share cookies, local storage, cache, etc. with their regular Chromium browser.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Technical-decisions-and-implementation\" /\u003eTechnical decisions and implementation\u003c/h3\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eWe have decided to implement each shortcut as a \"shim app\", that is, a small application bundle which finds and dynamically loads the Chromium framework.\u003c/li\u003e\u003cli\u003eWith this design, a shortcut truly is a first-class application, albeit one with a tiny binary, and minimal binary contact with Chromium.\u003c/li\u003e\u003cli\u003eNearly all nontrivial functionality will be contained in the Chromium framework proper.\u003c/li\u003e\u003cli\u003eAs such, we do not anticipate much of a need to update the shortcut application bundles; however, if necessary, this could be done by code in the Chromium framework.\u003c/li\u003e\u003cli\u003eThe hard technical work for this has already been done.\u003c/li\u003e\u003cli\u003eThe only nontrivial task for the shim app would be to locate Chromium. We plan to do this in several ways (in order of priority): (1) Whenever Chromium runs, it records its location in the defaults system; a shim app can look this up. (2) Look in various standard locations, such as /Applications, ~/Applications, etc. (3) Consult Launch Services or other system databases.\u003c/li\u003e\u003cli\u003eNote that if all the methods fail, the shim app can simply ask the user to run Chromium to re-record its location.\u003c/li\u003e\u003cli\u003eQ. When cookies, etc. aren't shared, where should the profile data be stored?\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e[\u003ci\u003ework in progress, more to come\u003c/i\u003e -Trung]\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Implementation-plan\" /\u003eImplementation plan\u003c/h3\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ePhase 1: Design/code the shim app and basic interface between the shim app and the framework. Put the shim app into the build system. Make the shim app display an appropriate (specifiable) name in the main menu. At completion, one should be able to manually create shortcuts which satisfy the essential requirements. [started]\u003c/li\u003e\u003cli\u003ePhase 2: Design/code the (normal) browser-side code to produce shortcuts (with appropriate URL, name, icon) to be saved in a user-specifiable location (or perhaps leverage drag-and-drop?). It should also have the appropriate behavior when a shortcut is produce from a \"live\" web page. At completion, shortcuts should be fully usable by the average user.\u003c/li\u003e\u003cli\u003ePhase 3: Fix up the main menu, etc., and generally tighten up any other behavior. At completion, shortcuts should be very polished and truly look like a first-class application.\u003c/li\u003e\u003cli\u003ePhase X: Make cookies, local storage, cache, etc. shareable, and make this an optional capability.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e[\u003ci\u003esorry for the mess, work in progress\u003c/i\u003e -Trung]\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOld stuff:\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-This-is-just-a-draft-proposal-at-this-time-to-figure-out-options-and-see-what-might-apply-to-other-platforms.\" /\u003e\u003cspan style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cspan style\u003d\"font-style:italic\"\u003eThis is just a draft proposal at this time, to figure out options, and see what might apply to other platforms.\u003c/span\u003e\u003c/span\u003e\u003c/h3\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Background\" /\u003e\u003cspan style\u003d\"font-size:12px;font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003eBackground\u003c/h3\u003e\r\n\u003cdiv\u003eGears provides an way to create desktop shortcuts to web sites (\u003ca href\u003d\"http://code.google.com/apis/gears/api_desktop.html\"\u003eDesktop.createShortcut()\u003c/a\u003e). Chromium expands on this to try and make a \"custom\" browser for the site. Our ultimate goal for the Mac implementation is to have the shortcut appear to the OS as a first-class application. Its UI consists of a browser displaying the website but with many of the browser features removed (ie-no bookmarks, navigation, etc.). Examples would be \"applications\" such as Gmail, Reader, etc.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Expectations\" /\u003eExpectations\u003c/h3\u003e\r\nThe desired user experience is:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eThe shortcuts should appear to be Applications to the OS (Spotlight, Finder, etc.).\u003c/li\u003e\r\n\u003cli\u003eThe shortcut should work in the Dock like any other application: click to launch/raise, indicates when running, provides a window list, and present in cmd-tab list for quick process switching.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eThe menu bar and window appearance are different from \"normal\" Chromium\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eApp name is related to the website the shortcut is for (created by the user? or taken from the shortcut name?)\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eNo bookmarks or navigation menus/items.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\nThe desired technical details are:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eShare the HTML5 storage so any site/domain storage data is available in both the AppMode and w/in the main browser. ie, offline Gmail is in the same state regardless if the user is using a Gmail \"app\" or w/in Chromium.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eShare the cache so common html/js/images don't have to be re-downloaded, cached by each AppMode the user has.\u003c/li\u003e\r\n\u003cli\u003eMake cookie sharing something that is optional or controlled on a per shortcut basis. This would allow some users to have the Gmail App share its auth cookie with Chromium, but others might chose not to so they could have a Gmail shortcut for one account, and use a different account w/in Chromium.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Possible-Approaches\" /\u003ePossible Approaches\u003c/h3\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Shim-Apps-to-sub-load-Chromium\" /\u003eShim Apps to sub-load Chromium\u003c/h4\u003e\r\nMake each AppMode shortcut a little Cocoa app bundle. The binary itself would be extremely small. When launched, it would find Chromium.app, load it as a bundle, and invoke an exported system to relay the shortcut info. The vended API from w/in Chromium.app would start up Cocoa, WebKit, etc. This would keep the \"binary contact\" between the shortcuts and Chromium as small as possible so they don't have to be updated w/ new versions of Chromium. The shortcut app would effectively be another instance of Chromium in \"browser\" mode, maintaining an independent set of renderers, plugin hosts, etc.\u003cbr /\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Launcher-Apps\" /\u003eLauncher Apps\u003c/h4\u003e\r\nMake each AppMode shortcut a little app that simply launches the Chromium application (if not already running), sends over the shortcut info, and exits.\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Shortcut-Document\" /\u003eShortcut Document\u003c/h4\u003e\r\n\u003cdiv\u003eRather than creating a separate application, create a new document type that the Finder recognizes as a Chromium document to store the site location. When the user double-clicks the a saved shortcut document, the Finder (through LaunchServices) automatically sends a message to Chromium, launching it first if it's not already running. Chromium responds to the open event by creating a new window with AppMode chrome and disabling the navigation menu items when that window is in the foreground. This window will co-exist in the same browser process as other non-AppMode windows, thus can share the profile and data stores.\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Make-A-Full-blown-Copy\" /\u003eMake A Full-blown Copy\u003c/h4\u003e\r\nRather than trying to load and sub-load parts from another application bundle, have the shortcut be a full copy of the Chromium application.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Limitations-Issues\" /\u003eLimitations / Issues\u003c/h3\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-None-of-these-approaches-is-a-obvious-win-they-all-meet-different-parts-of-the-expectations-or-have-different-things-that-would-need-to-be-resolved:\" /\u003e\u003cspan style\u003d\"font-size:12px;font-weight:normal\"\u003eNone of these approaches is a obvious win, they all meet different parts of the expectations or have different things that would need to be resolved:\u003c/span\u003e\u003c/h4\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-top-color:rgb(136,136,136);border-right-color:rgb(136,136,136);border-bottom-color:rgb(136,136,136);border-left-color:rgb(136,136,136);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;text-align:center\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd colspan\u003d\"4\"\u003e\u003cb\u003eUI\u003c/b\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eProposal\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eApps to Spotlight\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eWork as app from Dock\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eAppMode menubar and window\u003c/i\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eShim Apps to sub-load Chromium\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eLauncher Apps\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eShortcut Document\u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003ctd\u003e \u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eMake a Full-blown Copy\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cbr /\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888\" cellspacing\u003d\"0\" style\u003d\"border-collapse:collapse;border-top-color:rgb(136,136,136);border-right-color:rgb(136,136,136);border-bottom-color:rgb(136,136,136);border-left-color:rgb(136,136,136);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;text-align:center\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd colspan\u003d\"4\"\u003e\u003cb\u003eTechnical\u003c/b\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eProposal\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eShare HTML5 Storage\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eShare Cache\u003c/i\u003e\u003c/td\u003e\r\n\u003ctd style\u003d\"width:175px\"\u003e\u003ci\u003eCookie Control\u003c/i\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eShim Apps to sub-load Chromium\u003c/td\u003e\r\n\u003ctd\u003eTBD - Would require the storage layers support multiple processes actively modifying the on disk storage\u003c/td\u003e\r\n\u003ctd\u003eTBD - Same requirement around multiple process support\u003c/td\u003e\r\n\u003ctd\u003eTBD - Private cookie store would be easy, opting to share has the same multiple process issue\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eLauncher Apps\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003eTBD - Might be able to use a different profile for the window to have different cookies\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eShortcut Document\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003e✓\u003c/td\u003e\r\n\u003ctd\u003eTBD - Might be able to use a different profile for the window to have different cookies\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eMake a Full-blown Copy\u003c/td\u003e\r\n\u003ctd\u003eTBD - Would require the storage layers support multiple processes actively modifying the on disk storage\u003c/td\u003e\r\n\u003ctd\u003eTBD - Same requirement around multiple process support\u003c/td\u003e\r\n\u003ctd\u003eTBD - Private cookie store would be easy, opting to share has the same multiple process issue\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Special-Notes\" /\u003eSpecial Notes\u003c/h3\u003e\r\n\u003cp\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eShim Apps to sub-load Chromium\u003c/span\u003e does require a long term contract around the interface used to find, load, and invoke the real browser. If we ever needed changes to the Cocoa info.plist or different arguments, we'd have to find ways to handle this without the AppMode stub being updated (as the running user might not have privledges to rewrite it). \u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"font-weight:bold\"\u003eMake a Full-blown Copy\u003c/span\u003e has a major drawback; the inability to update the shortcut applications. Keystone/Omaha requires a one-to-one mapping from GUID to installed application, and self-generated GUIDs would receive no updates as they don't match the GUID on the server.  So once a copy was made for a short cut, there wouldn't be a way to target it for updates (feature, security, etc).\u003c/p\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Additional-Notes-from-Trung\" /\u003eAdditional Notes from Trung\u003c/h3\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cb\u003eHybrid solutions:\u003c/b\u003e There are a number of possible hybrid solutions. For example, one could make a persistent Launcher App which, instead of quitting immediately after launching, persists and performs tasks such as \"forwarding\" Dock activations to the main browser process. One should also be able to switch out the main menu on the demand, and such an model would allow a better imitation of a full-fledged application. (One could also imagine other hybrids, e.g., a Launcher App which just opens an embedded Shortcut Document. This has certain \u003ci\u003eflexibility\u003c/i\u003e advantages; see below.)\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cb\u003eLauncher/Cop\u003cfont face\u003d\"arial, sans-serif\" size\u003d\"3\"\u003e\u003cspan style\u003d\"border-collapse:collapse;font-size:13px\"\u003ey:\u003cspan style\u003d\"font-weight:normal\"\u003e Another possible hybrid is a Launcher App which simply launches, for each specific App Mode shortcut, a copy of Chromium with special settings/command-line arguments. This would avoid the major drawback of a true copy, yet provide most of the benefits. (It would still have the drawback of making sharing storage/cache/etc. difficult.) This is very similar to a Shim App, but with no binary contact. It would be lightweight on disk space requirements (though lack of cache sharing might make increase disk space usage); memory usage would hopefully be similar to a Shim App, in that perhaps text pages could be shared, and hopefully lighter than that of a Full-blown Copy.\u003c/span\u003e\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cb\u003eFlexibility and upgradeability:\u003c/b\u003e Regardless of model, it is worth considering how App Mode capabilities may be modified/upgraded (possibly changing models) in the future. In general, Shim and Launcher Apps seem most flexible; upgrading a Shortcut Document might be troublesome. A possible upgrade model is as follows: Upon loading, the Shim/Launcher App locates the primary Chromium application bundle and checks if this bundle contains a more up-to-date Shim/Launcher App. If necessary, it can then update itself, and relaunch. (This assumes that the App Mode data is well-segregated inside the Shim/Launcher App's bundle.)\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cb\u003e\"Captivity\":\u003c/b\u003e A problem with a web app posing as a normal application is that web apps are typically not \u003ci\u003ecaptive\u003c/i\u003e, in the sense that there's usually no clear delineation of where the application ends. For example, in a native mail client, clicking on a link will take one outside the mail program. Likewise, it either has calendar functionality built-in, or it doesn't. With a \"Gmail App\", things are not so clear. What should happen if one clicks on \"Calendar\"? If one has a separate \"Calendar App\" set up, perhaps one would like it to launch or switch to that. Perhaps one would view it as integral to the \"Gmail App\". Or perhaps one would prefer that it be opened in a regular browser window. (Worse, one might prefer different things for different links, even within the same \"site\", however sites are delineated. For example, one may want \"Docs\" to be a separate app, but keep \"Calendar\" in the same app.) With web apps, of course, there are also usually many external links. Probably one would usually want to open external links in a regular browser window, but it is not clear how to distinguish between the different cases (open in current app, open in different app, open in a regular browser window).\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003eShortcut Documents, Launcher Apps, and variants skirt this problem by not truly distinguishing between different App Mode windows and the regular browser. The distinction made is very weak: an \"application\" is just a window in the regular browser with a few special properties. It is then very easy to open normal browser windows running with one's normal browsing profile. Depending on the approach, there may be no real distinction between an App Mode window running, e.g., Gmail from one running Calendar or Docs.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003eThe Shim App, etc. approaches which provide more full, separate applications suffer here. For example, if one is in Gmail and one clicks on a link to, say, Flickr, not only does one probably want Flickr to open in a normal browser window (unless one has a Flickr App set up!), but one probably also wants it to open using the profile associated with one's normal browser -- one doesn't typically want to maintain have separate Flickr logins between one's Gmail App and one's normal browser. (On the other hand, one might want distinct Gmail logins!)\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:12px\"\u003e\u003cb\u003eOther considerations:\u003c/b\u003e In addition to making the Dock icon, menus, etc. work, it would be good if an App Mode shortcut worked properly with Spaces. In particular, one can assign a particular space to each application (e.g., one space for the \"Gmail App\" windows and a different space for normal Chromium browser windows). The general lack of API for Spaces means that only Shim Apps, full-blown copies, and perhaps the Launcher/Copy hybrid could work properly with Spaces.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Questions-from-Trung\" /\u003eQuestions from Trung\u003c/h3\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eThe question of \"captivity\" is essentially the following: What should happen when one clicks on a link from within an App?\u003c/li\u003e\u003cli\u003eTechnical problem: When and how does OS X determine what application is being run? (To what extent can this be set at run time?)\u003c/li\u003e\u003cli\u003eTechnical: Is there any way of convincing Spaces that a given window really belongs to a different application?\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/appmode-mac"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1515690148501349015"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1515690148501349015"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1515690148501349015"}],"author":[{"name":{"$t":"Thomas Van Lenten"},"email":{"$t":"thomasvl@chromium.org"}}],"sites$pageName":{"$t":"appmode-mac"},"sites$revision":{"$t":"19"}},{"gd$etag":"\"Xyl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"},"published":{"$t":"2010-02-08T16:41:05.422Z"},"updated":{"$t":"2010-02-11T21:38:54.269Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-11T21:38:54.269Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tab Strip Design (Mac)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThis document describes the design of the tab strip on Mac OS X including tab layout, tab drag and drop, and the tab animations.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Classes\" /\u003eClasses\u003c/h2\u003e\u003cdiv\u003eThe following classes make up the most important pieces of the implementation of the tab strip:\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabContents\" /\u003eTabContents\u003c/h4\u003e\u003cdiv\u003eThe cross-platform representation of the contents of a tab. There is a one-to-one correspondence between open tabs and a \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e object.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabStripModel\" /\u003eTabStripModel\u003c/h4\u003e\u003cdiv\u003eThe cross-platform model for the contents of the tab strip. There is one \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e per Browser object. It contains the logic for manipulating addition and removal of tabs, as well as more complicated features such as \"close all tabs to right\". Individual tabs are referenced by index, [0..count()].\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabView\" /\u003eTabView\u003c/h4\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eNSView\u003c/font\u003e responsible for drawing the curved edges of a tab. Also contains all the logic for dragging a tab within and between windows.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabController\" /\u003eTabController\u003c/h4\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eNSViewController\u003c/font\u003e for managing a single tab in the tab strip. It coordinates a close box, a title and an \"icon view\", a client-specified \u003cfont face\u003d\"'courier new', monospace\"\u003eNSView\u003c/font\u003e that can be changed, for example, to show a favicon when the page is at rest and a spinner view when the page is loading. The default is a \u003cfont face\u003d\"'courier new', monospace\"\u003eNSImageView\u003c/font\u003e.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabContentsController\" /\u003eTabContentsController\u003c/h4\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eNSViewController\u003c/font\u003e for managing the web contents of an individual tab, coordinating the native \u003cfont face\u003d\"'courier new', monospace\"\u003eNSViews\u003c/font\u003e for a specific \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabStripController\" /\u003eTabStripController\u003c/h4\u003e\u003cdiv\u003e\u003cdiv\u003eThe Objective-C controller, Mac specific, for managing the interaction between the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e and the Cocoa \u003cfont face\u003d\"'courier new', monospace\"\u003eTabViews\u003c/font\u003e that comprise the user interface. Handles \u003c/div\u003e\u003cdiv\u003epositioning and layout of the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabViews\u003c/font\u003e as well as the animations related to tab drag and drop and tab opening/closing. The controller is responsible for switching the visible tab to the correct \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e/\u003cfont face\u003d\"'courier new', monospace\"\u003eTabContentsController\u003c/font\u003e based on changes either in the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e or in response to a user clicking in a specific \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e. The controller handles changes from the tab model by registering a C++ observer.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo match the model with the corresponding views, the controller keeps several parallel arrays which are normally in sync with the indices of the TabStripModel, but as described below in the section on animations, they sometimes are not. It is very important to not confuse the two array indexes and always use the conversion methods.\u003c/div\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-TabWindowController\" /\u003eTabWindowController\u003c/h4\u003e\u003cdiv\u003eThe \u003cfont face\u003d\"'courier new', monospace\"\u003eNSWindowController\u003c/font\u003e for a window that participates in dragging a tab between windows. It has the concept of a tab strip and a view that gets switched out when the tab selection changes. The controller also maintains an \"overlay window\" used during tab dragging so that parts of the window frame can be translucent. It should be reusable in other projects as there is nothing browser-specific about the API.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tab-Layout\" /\u003eTab Layout\u003c/h2\u003e\u003cdiv\u003eTab layout is handled primarily by a single method, \u003cfont face\u003d\"'courier new', monospace\"\u003e-layoutTabsWithAnimation:renegerateSubviews:\u003c/font\u003e. This method performs several critical tasks:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003ePositioning, sizing, and animating the tabs, including not using all available space if rapidly closing tabs\u003c/li\u003e\u003cli\u003ePositioning and animating the New Tab Button (NTB), including showing and hiding it based on the status of a drag.\u003c/li\u003e\u003cli\u003eHandling the view z-ordering so tabs appear with a consistent overlap\u003c/li\u003e\u003cli\u003eInserting an empty placeholder space during drag and drop\u003c/li\u003e\u003cli\u003eAnimating a newly inserted tab\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eTab layout can be done both with and without animation. For example, there's no need to animate tabs before the initial layout has completed or to animate the first tab in a window. In general, however, any changes caused by user interaction or model changes are done with animations enabled.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTabs overlap by a small amount (about 20px) which means z-order becomes important. If not paid attention to, switching tabs and bringing them forward over other tabs can cause a haphazard appearance over time as the z-order becomes inconsistent across the tab strip. In order to address this, the subviews (TabViews) are removed and re-inserted into the view hierarchy in the correct z-order based on the \u003cfont face\u003d\"'courier new', monospace\"\u003eregenerateSubviews\u003c/font\u003e parameter. Regenerating the views needs to be done when the tab model or selection changes, but doesn't need to be done when only the size and position of the tabs change (for instance when the window is resized).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn order to size and position tabs correctly, the first order of business is to compute how much space is available which may not be the entire width if the user is quickly closing tabs. When the user closes a tab using the tab's close button, tabs to the right should shift left such that the next tab's close button ends up directly under the mouse. This allows the user to continue clicking rapidly to close a large number of tabs. A requirement for this to work is that the tabs do not change width until the user is done (signified by moving the mouse outside of the tab strip). As a result, during \"rapid closure mode\" the amount of available space for determining the width of tabs must remain consistent and thus the tabs won't change size even though their positions change during re-layout.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe available width is also affected by (zero or more) pinned (fixed-width) tabs, as well as compensating for the amount of overlap between tabs. Finally, space is reserved for both the NTB and the window close/minimize/zoom controls. After space is allocated to pinned tabs, the remaining space is divided evenly among the remaining tabs, ensuring that tabs fit within a min and max width. When tabs get too small, it's the responsibility of the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabController\u003c/font\u003e to handle properly displaying only the elements that fit, such as hiding the title and only displaying the icon. Note that selected tabs have a slightly larger minimum width than unselected tabs, allowing enough room to display the close button.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTab layout is effectively a big for-loop that walks the array of \u003cfont face\u003d\"'courier new', monospace\"\u003eTabControllers\u003c/font\u003e, laying them out in order from left to right with a bit of overlap. The size and positions are set on the corresponding \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e, or its \u003cfont face\u003d\"'courier new', monospace\"\u003eanimator\u003c/font\u003e if animations are requested. In they are, there is also some additional pre-flighting to avoid redundant calls to the animator when the view isn't moving. Once the tabs have been positioned, layout places the NTB at the far right, showing or hiding based on if a drag is in progress.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDuring drag and drop, there's one more component to tab layout: the placeholder. A \"placeholder tab\" is an empty space representing where the tab would go were it to be dropped at the mouse location. Obviously, there can only be one of these at a time. If there is a placeholder tab (see below for how it's instantiated), leave a blank space corresponding to the width of the tab being dragged before moving on to positioning the next tab. Note that this width can be different than the width of tabs in the current window if the dragged tab comes from another window. Even though a wider placeholder might cause tabs at the far right to spill off the edge, it makes for a much improved user experience as the gap can be better associated with the dragged tab.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tab-Animations\" /\u003eTab Animations\u003c/h2\u003e\u003cdiv\u003eThere are 3 causes of animation in the tab strip:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eTabs moving or resizing in response to model changes or the window resizing\u003c/li\u003e\u003cli\u003eA new tab\u003c/li\u003e\u003cli\u003eA closing tab\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eMoving and resizing is described above in the section on layout, handled simply by sending the new frame size and position to the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e's \u003cfont face\u003d\"'courier new', monospace\"\u003eanimator\u003c/font\u003e. In addition, handling a new tab is actually just a special case of layout. When a tab is identified as being new (new tabs are not visible by default), its \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e is made visible and positioned just below the tab strip. Then, as a part of normal layout, its \u003cfont face\u003d\"'courier new', monospace\"\u003eanimator\u003c/font\u003e is told the final location and it \"submarines\" into place.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn general, there is a one-to-one correspondence between \u003cfont face\u003d\"'courier new', monospace\"\u003eTabControllers\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eTabViews\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContentsControllers\u003c/font\u003e, and the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e in the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e. In the steady-state, the indices line up so an index coming from the model is directly mapped to the same index in the parallel arrays holding the views and controllers. This is also true when new tabs are created (even though there is a small period of animation) because the tab is present in the model while the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e is animating into place. As a result, nothing special need be done to handle \"new tab\" animation.\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis all goes out the window with the \"close tab\" animation. The animation kicks off in \u003cfont face\u003d\"'courier new', monospace\"\u003e-tabDetachedWithContents:atIndex:\u003c/font\u003e after receiving the notifiation that the tab has been removed from the model. The simplest solution at this point would be to remove the views and controllers as well, however once the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e is removed from the view list, the tab z-order code takes care of removing it from the tab strip and there will be no animation. That means if there is to be any visible animation, the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e needs to stay around until its animation is complete. In order to maintain consistency among the internal parallel arrays, this means all structures are kept around until the animation completes. At this point, though, the model and our internal structures are out of sync: the indices no longer line up. As a result, there is a concept of a \"model index\" which represents an index valid in the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e. During steady-state, the \"model index\" is just the same index as the parallel arrays (as above), but during tab close animations, it is different, offset by the number of tabs preceding the index which are undergoing tab closing animation. Therefore, the caller needs to be careful to use the available conversion routines when accessing the internal parallel arrays (e.g., \u003cfont face\u003d\"'courier new', monospace\"\u003e-indexFromModelIndex:\u003c/font\u003e). Care also needs to be taken during tab layout to ignore closing tabs in the total width calculations and in individual tab positioning (to avoid moving them right back to where they were).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn order to prevent actions being taken on tabs which are closing, the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e itself gets marked so it no longer will send back its select action or allow itself to be dragged. In addition, drags on the tab strip as a whole are disabled while there are tabs closing.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen the \u003cfont face\u003d\"'courier new', monospace\"\u003eCAAnimation\u003c/font\u003e for the tab close completes, it notifies its delegate, \u003cfont face\u003d\"'courier new', monospace\"\u003eTabCloseAnimationDelegate\u003c/font\u003e. The delegate messages the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripController\u003c/font\u003e to remove the tab from all internal data structures and the indices are once again all back in sync.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tab-Drag-and-Drop\" /\u003eTab Drag and Drop\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Tab-dragging-is-one-of-the-more-complex-aspects-of-the-tab-strip-and-its-related-classes-but-most-of-the-work-is-actually-done-within-TabView-not-the-tab-strip-s-controller.-There-are-three-basic-phases-to-the-dragging-handled-by-TabView-s-mouseDown:-mouse\" /\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eTab dragging is one of the more complex aspects of the tab strip and its related classes, but most of the work is actually done within \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e, not the tab strip's controller. There are three basic phases to the dragging, handled by TabView's \u003cfont face\u003d\"'courier new', monospace\"\u003emouseDown:\u003c/font\u003e, \u003cfont face\u003d\"'courier new', monospace\"\u003emouseDragged:\u003c/font\u003e, and \u003cfont face\u003d\"'courier new', monospace\"\u003emouseUp:\u003c/font\u003e, but the main driver is a loop within \u003cfont face\u003d\"'courier new', monospace\"\u003emouseDown:\u003c/font\u003e that runs until the user releases the mouse button. \u003cfont face\u003d\"'courier new', monospace\"\u003emouseDown:\u003c/font\u003e handles both drags and regular clicks on a \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e. A simple click sends the view's action to its target, which selects the appropriate tab by updating the model. While the mouse button is down but is moving, the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e repeatedly calls \u003cfont face\u003d\"'courier new', monospace\"\u003emouseDragged:\u003c/font\u003e. Once the mouse button is released, it calls \u003cfont face\u003d\"'courier new', monospace\"\u003emouseUp:\u003c/font\u003e to clean up and reset for next time.\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eThe first order of business when dragging a tab is determining if the user wants to move the entire window or if they want to drag one tab among many. The heuristic used here assumes that if there is only one tab in a window and there are no other windows in which this tab can be dropped, dragging the tab acts as if the user is dragging the background title bar. This simply extends the area in which the user can reposition the entire window.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003eIf the user is dragging a tab with the potential to drop it somewhere else, they can either reposition the tab within the same source window, or they can put the tab into a different destination window. Clearly, if there is only one tab in the source window, the former can not be the case, and it is assumed the destination will be in a different window.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal;font-size:13px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003eAssuming there are more than one tab in the source window, the drag begins in the mode of tracking a drag within the same source window. As the user drags the mouse back and forth, the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e instructs the window's \u003cfont face\u003d\"'courier new', monospace\"\u003eTabWindowController\u003c/font\u003e to insert a placeholder for the given tab at the appropriate mouse location. Doing so will force a layout which moves the dragged tab to the given location in the window and the tab will appear to \"follow\" the mouse as it moves back and forth with the other tabs getting out of its way should it overlap them too much. The animation comes for free as a part of the normal layout, described above.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac/dragWithin2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1265923735494/developers/design-documents/tab-strip-mac/dragWithin2.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eIf at any time the mouse leaves a certain boundary above or below the tab strip, the dragging code assumes the user wants to \"tear\" the tab out into its own window. This breaks out of the previous mode and enters the general mode where a tab (now a full-fledged window) can be dropped anywhere on the desktop or into another window. Detaching the tab creates a new \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowser\u003c/font\u003e, complete with its own \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e, containing the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e associated with the original tab. This allow it to maintain all its existing state and render processes (complete with animations!). Creating a new browser creates a new \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserWindowController\u003c/font\u003e and all of the Cocoa objects that make a normal browser window and is a rather heavy-weight process. The source window is no longer the original from where the tab was dragged, but becomes the newly formed window.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn this new mode, the visual appearance of the dragged window changes such that the background of the title bar is translucent but the tab and all the window contents are opaque. If the user moves the tab over a tab strip of a potential destination window, the title bar background disappears entirely to give the appearance that the tab can be part of the destination window. Also, as the user moves the mouse over a potential destination window, it will be brought to the front so its tab strip is not obscured by other windows.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac/translucent.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1265923465721/developers/design-documents/tab-strip-mac/translucent.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis change in visual appearance is handled by the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabWindowController\u003c/font\u003e via an \"overlay window\" which re-parents the views of the tab strip, toolbars, content area, etc into a new (opaque) floating child window while the source window behind it becomes translucent. When the drag completes, the moving of views into the overlay is reversed and everything returns to the actual source window.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen the user releases the mouse, there are three cases to check for:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eUser dropped the tab within the same window without leaving the tab strip\u003c/li\u003e\u003cli\u003eUser dropped the tab in a different window (or possibly the same window but tore it off then put it back)\u003c/li\u003e\u003cli\u003eUser dropped the tab on the desktop\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eIn the first case, there's nothing complicated to do as everything is within a single \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripModel\u003c/font\u003e. When moving between windows, the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e of the dragged source window is added to the destination window's model at the given location. Finally, the last case doesn't require anything to be moved around at all because the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e was already moved into the new window when it was initially torn off. In the latter two cases, the overlay window must be cleaned up and the window appearance put back to normal. The ordering can be tricky with shadows and alpha values.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOne goal of the design of the tab dragging code was for it to be application agnostic. None of the classes involved are browser-specific and the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabView\u003c/font\u003e itself only makes calls to the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabWindowController\u003c/font\u003e of either the source or destination windows. Any handling of the Chromium-defined \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContents\u003c/font\u003e objects are performed by the \u003cfont face\u003d\"'courier new', monospace\"\u003eBrowserWindowController\u003c/font\u003e, which clearly isn't intended to be shared. Hopefully one day these classes can move to GTM so they can be more easily re-used by other applications.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-New-Tab\" /\u003eNew Tab\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003eThe process to create a new tab begins in the model, arriving at the \u003cfont face\u003d\"'courier new', monospace\"\u003eTabStripController\u003c/font\u003e via its C++ observer bridge. First it creates a new \u003cfont face\u003d\"'courier new', monospace\"\u003eTabContentsController\u003c/font\u003e and stores that in an array parallel to the model. Next, it creates a new \u003cfont face\u003d\"'courier new', monospace\"\u003eTabController\u003c/font\u003e and inserts it into a similar parallel array. Note that the act of creating a new tab cancels \"rapid closure mode\", restoring the available width to the full amount. Finally, the controller broadcasts that the number of tabs has changed, then returns. This allows various parts of the user interface (such as the menu bar) to adjust for the new number of tabs in the key window.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTab layout is performed at different times depending on if the tab is created in the foreground or background. If in the background, layout is done immediately so the new tab appears. However, if the tab is created in the foreground, layout is deferred until the models notifies the controller to select the new tab. This is done because tab selection can change the width of (small) tabs and thus layout always needs to be done on tab selection. Waiting for selection avoids laying out the tabs twice in a row.\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eClose Tab\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe process to close a tab is mostly the reverse of the \"new tab\" case, only that it's handled in multiple stages to allow for the animation to complete (as described above). The model notifies the controller via its observer bridge that a tab has been detached. Note that there is a notification that the tab is closing, but it is not used in this implementation. If the window should remain open because there are more tabs remaining, being the tab closing animation which will sync up all the data structures upon completion. If closing the final tab in a window, the window will be going away on its own so don't bother with animations and close the tab directly.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eDetaching also happens in the drag and drop case where a tab is being moved between windows.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4545560635338259273"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"}],"author":[{"name":{"$t":"Mike Pinkerton"},"email":{"$t":"pinkerton@chromium.org"}}],"sites$pageName":{"$t":"tab-strip-mac"},"sites$revision":{"$t":"16"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7654542557923011330"},"published":{"$t":"2010-02-11T21:28:55.481Z"},"updated":{"$t":"2010-02-11T21:28:55.494Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-11T21:28:55.481Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"dragWithin2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7654542557923011330"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac/dragWithin2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7654542557923011330"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654542557923011330"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654542557923011330"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7654542557923011330"}],"author":[{"name":{"$t":"Mike Pinkerton"},"email":{"$t":"pinkerton@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3989534601417836720"},"published":{"$t":"2010-02-11T21:19:12.606Z"},"updated":{"$t":"2010-02-11T21:28:03.110Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-11T21:28:03.101Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"dragWithin.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3989534601417836720"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac/dragWithin.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3989534601417836720"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3989534601417836720"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3989534601417836720"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3989534601417836720"}],"author":[{"name":{"$t":"Mike Pinkerton"},"email":{"$t":"pinkerton@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8388345631449408685"},"published":{"$t":"2010-02-11T21:24:25.713Z"},"updated":{"$t":"2010-02-11T21:24:25.721Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-11T21:24:25.713Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"translucent.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8388345631449408685"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4545560635338259273"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tab-strip-mac/translucent.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8388345631449408685"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8388345631449408685"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8388345631449408685"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8388345631449408685"}],"author":[{"name":{"$t":"Mike Pinkerton"},"email":{"$t":"pinkerton@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3671473485992232616"},"published":{"$t":"2009-11-12T23:00:18.620Z"},"updated":{"$t":"2010-02-03T16:45:19.552Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-16T23:45:55.609Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"ControlFrameTypes"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ctable border\u003d\"1\" bordercolor\u003d\"#888888\" cellspacing\u003d\"0\" style\u003d\"border-color:rgb(136,136,136);border-width:1px;border-collapse:collapse\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style\u003d\"width:158px;height:29px;text-align:center\"\u003e\u003cb\u003eControl Frame\u003c/b\u003e\u003cbr /\u003e\u003c/td\u003e\u003ctd style\u003d\"width:173px;height:29px;text-align:center\"\u003e \u003cb\u003eNumeric Id\u003c/b\u003e\u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:158px;height:16px;text-align:left\"\u003e SYN_STREAM\u003c/td\u003e\u003ctd style\u003d\"width:173px;height:16px;text-align:center\"\u003e1 \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:158px;height:16px;text-align:left\"\u003e SYN_REPLY\u003cbr /\u003e\u003c/td\u003e\u003ctd style\u003d\"width:173px;height:16px;text-align:center\"\u003e2\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:158px;height:16px;text-align:left\"\u003e FIN_STREAM\u003c/td\u003e\u003ctd style\u003d\"width:173px;height:16px;text-align:center\"\u003e3 \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e \u003c/td\u003e\u003ctd\u003e \u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd style\u003d\"width:158px;height:16px;text-align:left\"\u003e NOOP\u003cbr /\u003e\u003c/td\u003e\u003ctd style\u003d\"width:173px;height:16px;text-align:center\"\u003e5 \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e PING\u003c/td\u003e\u003ctd style\u003d\"text-align:center\"\u003e6\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e GOAWAY\u003c/td\u003e\u003ctd style\u003d\"text-align:center\"\u003e7\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e SUBRESOURCE\u003c/td\u003e\u003ctd style\u003d\"text-align:center\"\u003e 8\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4393694214632659194"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3671473485992232616"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3671473485992232616"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3671473485992232616"}],"author":[{}],"sites$pageName":{"$t":"controlframetypes"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"WSl7JmA5\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4393694214632659194"},"published":{"$t":"2009-11-11T18:41:44.302Z"},"updated":{"$t":"2010-02-03T16:45:19.552Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-01T22:36:35.554Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SPDY Protocol - Draft 1"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"background-color:rgb(255,255,255);min-height:150px;padding-bottom:5px\"\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\r\n\u003ctable cellspacing\u003d\"0\" style\u003d\"margin:0px;table-layout:fixed\"\u003e\r\n\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003ctd style\u003d\"padding:10px;vertical-align:top\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:Times New Roman;font-size:16px;line-height:normal\"\u003e\r\n\u003cdiv style\u003d\"margin:6px;padding:0px;font-family:Verdana;font-size:10pt;background-color:rgb(255,255,255);min-height:1100px;line-height:normal\"\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-style:italic\"\u003eMike Belshe (mbelshe at google.com) \u0026amp; Roberto Peon (fenix at google.com)\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003ci\u003e\u003cbr /\u003e\r\n\u003c/i\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003ci\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cfont color\u003d\"#cc0000\"\u003eDRAFT\u003c/font\u003e\u003c/span\u003e\u003c/i\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Overview\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eOverview\u003c/h2\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eOne of the bottlenecks of current HTTP is that it relies solely on multiple connections for concurrency. This causes several problems, including additional round trips for connection setup, slow-start delays, and a constant rationing by the client where it tries to avoid opening too many connections to a single server. HTTP \"pipelining\" doesn't help, as each connection may be blocked on the request at the head of the line; in addition, many proxies apparently have poor support for pipelining. Applications, in their desire to create many connections, create many sub-domains to work around browser per-domain connection throttling.\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eSPDY aims to address this and other application-layer problems associated with modern web applications, while requiring little or no change from the perspective of web application writers.\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eIn a nutshell, SPDY adds a framing layer for multiplexing multiple, concurrent streams across a single TCP connection.  The framing layer is optimized for HTTP-like request-response streams.\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eThe SPDY session offers three basic improvements over HTTP:\u003c/font\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eMultiplexed requests. There is no limit to the number of requests that can be issued concurrently over a single SPDY connection.  Because requests are interleaved on a single channel, the efficiency of TCP is much higher.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003ePrioritized requests. Clients can request certain resources to be delivered first.  This avoids the problem of congesting the network channel with non-critical resources when a high-priority request is pending.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eCompressed headers.  Clients today send a significant amount of redundant data in the form of HTTP headers.  Because a single web page may require 50 or 100 subrequests, this data is significant. Compressing the headers saves a significant amount of latency and bandwidth compared to HTTP.\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"arial, sans-serif\"\u003eNote that for the most part, SPDY attempts to preserve the existing semantics of HTTP features.  All features such as cookies, etags, vary headers, content-encoding negotiations, etc work exactly as they do with HTTP; SPDY only replaces the way the data is written to the network.\u003c/font\u003e\u003c/div\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Definitions\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eDefinitions\u003c/h2\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ci\u003econnection\u003c/i\u003e: A TCP-level connection between two endpoints.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ci\u003eendpoint\u003c/i\u003e: Either the client or server of a connection.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ci\u003esession\u003c/i\u003e: A framed sequence of data chunks. Frames are defined as SPDY frames; see \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1#framing\" style\u003d\"color:rgb(78,125,191);outline-style:none;font-family:arial,sans-serif\"\u003eFraming\u003c/a\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e below.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ci\u003estream\u003c/i\u003e: A bi-directional flow of bytes across a virtual channel within a SPDY session.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Main-differences-from-HTTP\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eMain differences from HTTP\u003c/h2\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eSPDY is intended to be as compatible as possible with current web-based applications. This means that, from the perspective of the server business logic or application API, nothing has changed. To achieve this, all of the application request and response header semantics are preserved.  SPDY introduces a \"session\" which resides between the HTTP application layer and the TCP transport to regulate the flow of data. This \"session\" is akin to an HTTP request-response pair. The following changes represent the differences between SPDY and HTTP:\u003c/div\u003e\r\n\u003ch4 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-The-request\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eThe request\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003ch4 style\u003d\"font-size:10pt;font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-To-initiate-a-new-request-clients-f\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eTo initiate a new request, clients first create a new SPDY session.  Once the session is created, the client can create a new SPDY stream to carry the request.  Part of creating the stream is sending the HTTP header block.  The HTTP header block in SPDY is almost unchanged from today's HTTP header block, with the following differences:\u003c/span\u003e\u003c/h4\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe first line of the request is unfolded into name/value pairs like other HTTP headers.  The names of the first line fields are \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003emethod\u003c/code\u003e, \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eurl\u003c/code\u003e, and \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eversion\u003c/code\u003e.  These keys are required to be present.  The 'url' is the fully-qualified URL, containing protocol, host, port, and path.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eDuplicate header names are not allowed.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eHeader names are all lowercase.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eConnection\u003c/code\u003e and \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eKeep-Alive\u003c/code\u003e headers are no longer valid and are ignored if present.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eClients are assumed to support \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eAccept-Encoding: gzip\u003c/code\u003e.  Clients that do not specify any body encodings receive gzip-encoded data from the server.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eHTTP request headers are compressed.  This is accomplished by compressing all data sent by the client with gzip encoding.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe \"host\" header is ignored.  The host:port portion of the HTTP URL is the definitive host.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUser-agents are expected to support gzip and deflate compression.  Regardless of the Accept-Encoding sent by the user-agent, the server may select gzip or deflate encoding at any time.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003ePOST-specific changes:\u003c/li\u003e\r\n\u003cul\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003ePOST requests are expected to contain a data stream as part of the post; see \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1#dataflow\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eData flow\u003c/a\u003e below.\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eContent-length\u003c/code\u003e is only advisory for length (so that progress meters can work).\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eChunked encoding is no longer valid.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe POST data stream is terminated by a zero-length data frame.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003ch4 style\u003d\"font-size:10pt;font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-The-response\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eThe response\u003c/h4\u003e\r\n\u003ch4 style\u003d\"font-size:10pt;font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-When-responding-to-a-HTTP-request-s\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eWhen responding to a HTTP request, servers will send data frames using the SPDY stream created by the client.  The response is similar to HTTP/1.1 in that it consists of a header block followed by a body. However, there are a few notable changes:\u003c/span\u003e\u003c/h4\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cul style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe response status line is unfolded into name/value pairs like other HTTP headers.  The names of the status line are \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003estatus \u003c/code\u003eand \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eversion\u003c/code\u003e.  These keys are required to be present\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eIf the SPDY reply happens before a SYN_STREAM, then it includes parameters that inform the client regarding the request that would have been made to receive this response, by including \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eurl \u003c/code\u003eand \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003emethod\u003c/code\u003e keys. \u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAll header names must be lowercase.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eConnection\u003c/code\u003e and \u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eKeep-alive\u003c/code\u003e response headers are no longer valid.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont color\u003d\"#006000\" face\u003d\"monospace\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0);font-family:arial,sans-serif\"\u003e\u003ccode style\u003d\"color:rgb(0,96,0)\"\u003eContent-length\u003c/code\u003e is only advisory for length.\u003c/span\u003e\u003c/font\u003e\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eChunked encoding is no longer valid.\u003c/li\u003e\r\n\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eDuplicate header names are not allowed.\u003c/li\u003e\u003c/ul\u003e\r\n\u003ch2 style\u003d\"text-align:left;font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Connections\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eConnections\u003c/h2\u003e\r\n\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eThe first implementation of the SPDY session runs atop TCP, similarly to how HTTP works today. The client is expected to be the TCP connection initiator. Because it runs on TCP, we have a reliable transport. Unlike HTTP, all connections with SPDY are persistent connections. The HTTP connection header does not apply.\u003c/p\u003e\r\n\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eFor best performance, it is expected that clients will not close open connections until the user navigates away from all web pages referencing a connection, or until the server closes the connection. Servers are encouraged to leave connections open for as long as possible, but can terminate idle connections after some amount of inactivity if necessary.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"framing\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eFraming\u003c/a\u003e\u003c/h2\u003e\r\n\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eOnce the TCP connection is established, clients and servers exchange framed messages. There are two types of frames: control frames and data frames.  Frames always have a common header which is 8 bytes.\u003c/p\u003e\r\n\r\n\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eThe first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a version number, a frame type, flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried after the common header. The simple header is designed to make reading and writing of frames easy.\u003c/p\u003e\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eAll integer values, included length, version, and type, are in network byte order.  SPDY does not enforce alignment of types in dynamically sized frames.\u003c/p\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Control-frames-\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eControl frames\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |C| Version(15bits) | Type(16bits) |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Flags (8)  |  Length (24 bits)   |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |               Data               |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\nControl frame fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nControl bit: The 'C' bit is a single bit indicating that this is a control message. For control frames this value is always 1. \u003cbr /\u003e\r\n\u003cbr /\u003e\r\nVersion: The version number of the session protocol (currently 1).\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nType: The type of control frame. Control frames are SYN_STREAM, SYN_REPLY, etc.\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003cdiv\u003eFlags: Flags related to this frame. Flags for control frames and data frames are different.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nLength: An unsigned 24-bit value representing the number of bytes after the length field.\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eData: data associated with this control frame. The format and length of this data is controlled by the control frame type.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eData frames\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  |C|       Stream-ID (31bits)       |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e | Flags (8)  |  Length (24 bits)   |\u003c/font\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  |               Data               |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Courier New,sans-serif\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eData frame fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nControl bit: For data frames this value is always 0.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nStream-ID: A 31-bit value identifying the stream.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFlags: Flags related to this frame. Valid flags are:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003e0x01 \u003d FLAG_FIN - signifies that this frame represents the half-close of this stream. See \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1#streamhalfclose\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eStream half-close\u003c/a\u003e below.\u003c/li\u003e\u003c/ul\u003e\r\nLength: An unsigned 24-bit value representing the number of bytes after the length field. The total size of a data frame is 8 bytes + length. It is valid to have a zero-length data frame.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nData: A variable-length field containing the number of bytes in the payload.\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Hello-message\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Hello-message1\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eHello message\u003c/h3\u003e\r\n\u003c/font\u003e\u003c/h2\u003e\r\n\u003cfont face\u003d\"'Courier New'\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eAfter the connection has been established, SPDY employs an asynchronous Hello sequence where each side informs the other about the communication details it knows about.  Unlike most protocols, this Hello sequence is optional and fully asynchronous.  Because it is asynchronous, it does not add a round-trip latency to the connection startup.  But because it is asynchronous and optional, both sides must be prepared for this message to arrive at any time or not at all.\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003cp\u003eTo initiate a Hello sequence, either side can send a HELLO control frame.  The Hello frame is optional, but if it is to be sent, it must be the first frame sent.  When a Hello message is received, the receiver is not obligated to reply with a Hello message in return.  The message is therefore completely informational.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eHELLO control message:\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e----\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1          \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|       4     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e \u003cfont face\u003d\"'Courier New'\"\u003e | Flags (8)  |  Length (24 bits)   |\u003c/font\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n  |  Unused       |Number of entries |\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003cbr /\u003e\r\n  |          ID/Value Pairs          |\u003cbr /\u003e\r\n  |             ...                  |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eHELLO message fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nControl bit: The control bit is always 1 for this message.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eVersion: The SPDY version number.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eType: The message type for a HELLO message is 4.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cfont\u003eUnused: 16 bits of unused space, reserved for future use.\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\nNumber of entries: A 16-bit value representing the number of ID/value pairs in this message.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nID: A 32-bit ID number. \u003cfont face\u003d\"'Courier New'\" style\u003d\"font-family:arial,sans-serif\"\u003eThe following IDs are valid:\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003e\r\n1 - HELLO_BANDWIDTH_TO_YOU allows the sender to send its expected upload bandwidth on this channel. This\r\nnumber is an estimate. The value should be the integral number of kilobytes per second that the sender predicts\r\nas an expected maximum upload channel capacity.\u003c/li\u003e\r\n\u003cli\u003e\r\n2 - HELLO_BANDWIDTH_FROM_YOU allows the sender to send its expected download bandwidth on this channel. This\r\nnumber is an estimate. The value should be the integral number of kilobytes per second that the sender predicts as\r\nan expected maximum download channel capacity.\u003c/li\u003e\r\n\u003cli\u003e3 - HELLO_ROUND_TRIP_TIME allows the sender to send its expected round-trip-time on this channel. The round trip time is defined as the minimum amount of time to send a control frame from this client to the remote and receive a response. The value is represented in milliseconds.\u003c/li\u003e\r\n\u003cli\u003e\r\n4 - HELLO_MAX_CONCURRENT_STREAMS allows the sender to inform the remote endpoint the maximum number of concurrent\r\nstreams which it will allow. By default there is no limit. For implementors it is recommended that this value be\r\nno smaller than 100.\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/font\u003eValue: A 32-bit value.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cfont\u003e\u003cbr /\u003e\r\n\u003c/font\u003eThe message is intentionally expandable for future information which may improve client-server communications. The sender does not need to send every type of ID/value. It must only send those for which it has accurate values to convey. When multiple ID/value pairs are sent, they should be sent in order of lowest id to highest id.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Streams\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eStreams\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eStreams are independent sequences of bi-directional data cut into frames.  Streams can be created either by the client or the server, can concurrently send data interleaved with other streams, and can be cancelled.  The usage of streams with HTTP is such that a single HTTP request/response occupies a single stream, and the stream is not reused for a second request.  This is because streams can be independently created without incurring a round-trip.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUpon stream initiation, streams allow for each side to transmit a fixed-length list of name/value pairs to the other endpoint.\u003c/div\u003e\r\n\u003ch3 style\u003d\"font-size:12pt\"\u003e\u003ca name\u003d\"TOC-Stream-creation\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eStream creation\u003c/h3\u003e\r\n\u003cp style\u003d\"font-weight:normal\"\u003eA stream is created by sending a control packet with the type set to SYN_STREAM(1).  If the server is initiating the stream, the Stream-ID must be even.  If the client is initiating the stream, the Stream-ID must be odd.  0 is not a valid Stream-ID. Stream-IDs from each side of the connection must increase monotonically as new streams are created.  E.g. Stream 2 may be created after stream 3, but stream 7 must not be created after stream 9.\u003cbr /\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eUpon receipt of a SYN_STREAM frame, the server replies with a SYN_REPLY frame.  The client does not need to wait for a SYN_REPLY before sending any data frames.\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eIf the endpoint receiving a SYN_STREAM does not want to accept the new stream, it can immediately respond with a FIN_STREAM control frame.  Note, however, that the initiating endpoint may have already sent data on the stream as well; this data must be ignored.\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nSYN_STREAM control message:\r\n\u003cdiv style\u003d\"margin:6px;padding:0px;font-family:Verdana;font-size:10pt;background-color:rgb(255,255,255);min-height:1100px;line-height:normal\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e----\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1          \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|       1     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Flags (8)  |  Length (24 bits)   |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |X|          Stream-ID (31bits)    |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Courier New\"\u003e  +----------------------------------+\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  | Pri | Unused    |   NV Entries   |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003cbr /\u003e\r\n  |     Name/value header block      |\u003cbr /\u003e\r\n  |             ...                  |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eSYN_STREAM message fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFlags: Flags related to this frame. Valid flags are:\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e0x01 \u003d FLAG_FIN - signifies that this frame represents the half-close of this stream. \u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif;border-collapse:collapse\"\u003eWhen set, it indicates that the sender will not produce any more data frames in this stream.\u003c/span\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eLength: An unsigned 24 bit value representing the number of bytes after the length field. The total size of a SYN_STREAM frame is 8 bytes + length. The length for this frame must be greater than or equal to 8.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nPriority: A 2-bit priority field. If an endpoint has initiated multiple streams, the priority field represents which streams should be given first precidence. Servers are not required to strictly enforce the priority field, although best-effort is assumed. 0 represents the lowest priority and 3 represents the highest priority. The highest-priority data is that which is most desired by the client.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nUnused: 14 bits of unused space, reserved for future use.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nNV entries: (16 bits) The number of name/value pairs that follow.\u003c/p\u003e\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eThe \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1#nameheaderblock\"\u003eName/value block\u003c/a\u003e is described below.\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eSYN_REPLY control message:\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e \u003c/p\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  \u003cfont face\u003d\"'Courier New'\"\u003e+----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|        1        \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|        2     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Flags (8)  |  Length (24 bits)   |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |X|          Stream-ID (31bits)    |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Courier New\"\u003e  +----------------------------------+\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  | Unused        |    NV entries    |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003cbr /\u003e  |     Name/value header block      |\u003cbr /\u003e  |              ...                 |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eSYN_REPLY message fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFlags: Flags related to this frame. Valid flags are:\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e0x01 \u003d FLAG_FIN - signifies that this frame represents the half-close of this stream. \u003cspan style\u003d\"border-collapse:collapse\"\u003eWhen set, it indicates that the sender will not produce any more data frames in this stream.\u003c/span\u003e.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLength: An unsigned 24-bit value representing the number of bytes after the length field. The total size of a SYN_STREAM frame is 8 bytes + length. The length for this frame must be greater than or equal to 8.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eUnused: 16 bits of unused space, reserved for future use.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eNV entries: (16 bits) The number of name/value pairs that follow.\u003c/span\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eThe \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protoco#nameheaderblock\" style\u003d\"color:rgb(78,125,191);outline-style:none\" rel\u003d\"nofollow\"\u003eName/value block\u003c/a\u003e is described below.\u003c/div\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"nameheaderblock\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eName/value header block format\u003c/a\u003e\u003c/h3\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003eBoth the SYN_STREAM and SYN_REPLY frames contain a Name/value header block.  The header block used by both the request and the response is the same.  It is designed so that headers can be easily appended to the end of a list and also so that it can be easily parsed by receivers.  Each numeric value is 2 bytes.\u003c/font\u003e\u003c/p\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e----\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |     Length of name (int16)       |\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  |           Name (string)          |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  |     Length of value  (int16)     |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;text-align:left\"\u003e  |          Value   (string)        |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003cbr /\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |           (repeats)              |\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eEach header name must have at least one value. The length of each name and value must be greater than zero.  Although sending of names or values of zero length is invalid, receivers of zero-length name or zero-length values must ignore the pair and continue.\u003c/p\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003eDuplicate header names are not allowed.  To send two identically named headers, send a header with two values, where the values are separated by a single NUL (0) byte.  Senders must not send multiple, in-sequence NUL characters.  Receivers of multiple, in-sequence NUL characters must ignore the name/value pair.\u003c/p\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eStrings are utf8 encoded and are not NUL terminated.\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eThe entire contents of the name/value header block is compressed using zlib deflate.  There is a single zlib stream (context) for all name value pairs in one direction on a connection.   SPDY uses a SYNC_FLUSH between frame which uses compression. The stream is initialized with the following dictionary (without line breaks, NULL terminated):\u003c/p\u003e\u003cp style\u003d\"margin:0px 0px 0px 40px;font-family:arial,sans-serif\"\u003eoptionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-\u003cbr /\u003elanguageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi\u003cbr /\u003ef-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser\u003cbr /\u003e-agent10010120020120220320420520630030130230330430530630740040140240340440\u003cbr /\u003e5406407408409410411412413414415416417500501502503504505accept-rangesageeta\u003cbr /\u003eglocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic\u003cbr /\u003eateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran\u003cbr /\u003esfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati\u003cbr /\u003eoncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo\u003cbr /\u003endayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe\u003cbr /\u003epOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic\u003cbr /\u003eation/xhtmltext/plainpublicmax-agecharset\u003diso-8859-1utf-8gzipdeflateHTTP/1\u003cbr /\u003e.1statusversionurl\u003c/p\u003e\u003cp style\u003d\"margin:0px 0px 0px 40px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin:0px 0px 0px 40px;font-family:arial,sans-serif\"\u003e\u003cfont color\u003d\"#FF0000\"\u003eTODO(mbelshe): Remove the NULL termination on the dictionary; not useful.  (thanks CostinM)\u003c/font\u003e\u003c/p\u003e\u003cp style\u003d\"margin:0px 0px 0px 40px;font-family:arial,sans-serif\"\u003e\u003cfont color\u003d\"#FF0000\"\u003eTODO(mbelshe): Remove the empty block (4 bytes) inserted in the stream after a SYNC_FLUSH.  (thanks, CostinM)\u003cbr /\u003e\u003c/font\u003e\u003cbr /\u003e\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003ch2 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"TOC-Stream-data-exchange\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eStream data exchange\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cp style\u003d\"font-family:arial,sans-serif\"\u003eOnce a stream is created, it is used to send arbitrary amounts of data in either direction.  When either side has finished sending data it can send a frame with the FIN_FLAG set. (See \"TCP connection teardown\" below.)\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"streamhalfclose\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eStream half-close\u003c/a\u003e\u003c/h3\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"streamhalfclose\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003c/h3\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"streamhalfclose\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003c/h3\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eWhen one side of the stream sends a control or data frame with the FLAG_FIN flag set, the stream is considered to be half-closed from that side. The sender of the FLAG_FIN is indicating that no further data will be sent from the sender on this stream. When both sides have half-closed, the stream is considered to be closed.\u003c/span\u003e\r\n\u003ch3 style\u003d\"font-family:arial,sans-serif\"\u003e\u003ca name\u003d\"streamhalfclose\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Stream-close\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eStream close\u003c/h3\u003e\r\n\u003cp\u003eThere are 3 ways that streams can be terminated: normal termination, abrupt termination, and TCP connection teardown.\u003c/p\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Normal-termination\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eNormal termination\u003c/h4\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eNormal stream termination occurs when both sides of the stream have half-closed the stream.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Abrupt-termination\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eAbrupt termination\u003c/h4\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eEither the client or server can send a FIN_STREAM control packet at any time.  Upon receipt of the FIN_STREAM, both sides must ignore further data received on the stream and both sides must stop transmitting to the stream.  The FIN_STREAM is intended for abnormal stopping of a stream.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eFIN_STREAM control frame:\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1        \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|      3     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +-------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Flags (8)  |         8        |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  +-------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |X|          Stream-ID (31bits) |\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Courier New\"\u003e  +-------------------------------+\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |          Status code          | \u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Courier New\"\u003e\u003cfont\u003e  +-------------------------------+\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eFIN_STREAM message fields:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nFlags: Flags related to this frame. Valid flags are:\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e0x01 \u003d FLAG_FIN - \u003cspan style\u003d\"border-collapse:collapse\"\u003eWhen set, it indicates that the sender will not produce any more data frames in this stream.\u003c/span\u003e See \"Stream half-close\" above.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLength: An unsigned 24-bit value representing the number of bytes after the length field. For FIN_STREAM control frames, this value is always 8.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eStatus code: (32 bits) An indicator for why the stream is being terminated.\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\" style\u003d\"font-family:arial,sans-serif\"\u003e\u003cfont\u003eThe following status codes are defined:\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/font\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e1 - PROTOCOL_ERROR. This is a generic error, and should only be used if a more specific error is not available. The receiver of this error will likely abort the entire session and possibly return an error to the user.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e2 - INVALID_STREAM should be returned when a frame is received for a stream which is not active. The receiver of this error will likely log a communications error.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e3 - REFUSED_STREAM.  This is error indicates that the stream was refused before any processing has been done on the stream.  For non-indepotent methods this means that request can be retried.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNote:  0 is not a valid status code for a FIN_STREAM.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003eTODO - Define more specific errors.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003ch4 style\u003d\"margin:0px\"\u003e\u003ca name\u003d\"TOC-TCP-connection-teardown\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eTCP connection teardown\u003c/h4\u003e\r\n\u003cbr /\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003eIf the TCP connection is torn down while unterminated streams are active (no FIN_STREAM frames have been sent or received for the stream), then the endpoint must assume that the stream was abnormally interrupted and may be incomplete.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px\"\u003eIf a client or server receives data on a stream which has already been torn down, it must ignore the data received after the teardown.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"dataflow\" style\u003d\"color:rgb(78,125,191);outline-style:none\"\u003eData flow\u003c/a\u003e\u003c/h2\u003e\r\n\u003cspan style\u003d\"font-weight:normal;font-family:arial,sans-serif\"\u003e\u003cfont size\u003d\"2\"\u003eBecause TCP provides a single stream of data on which SPDY multiplexes multiple logical streams, it is important for clients and servers to interleave data messages for concurrent sessions.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/span\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eImplementors should note that sending data in smallish chunks will result in lower end-user latency for a page as this allows the browser to begin parsing metadata early, and, in turn, to finalize the page layout. Sending large chunks yields a small increase in bandwidth efficiency at the cost of slowing down the user experience on pages with many resources.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Other-control-frames\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eOther control frames\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-NOOP\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cb\u003eNOOP\u003c/b\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe NOOP control frame is a no-operation frame.  It can be sent from the client or the server.  Receivers of a NO-OP frame should simply ignore it.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eNOTE: This control frame may ultimately be removed.  It has been implemented for experimentation purposes.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eNOOP control message:\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e \u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e----\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e-\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e---\u003c/font\u003e\u003cfont face\u003d\"'Courier New'\"\u003e+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1          \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|       5     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003cbr /\u003e  +----------------------------------+\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003cfont\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  | 0 (Flags)  |    0 (Length)       |\u003c/font\u003e\u003c/font\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003cbr /\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-family:Verdana;font-weight:normal\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv\u003e\u003cfont face\u003d\"Arial, Verdana, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eControl-bit: The control bit is always 1 for this message.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eVersion: The SPDY version number.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eType: The message type for a NOOP message is 5.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLength: This frame carries no data, so the length is always 0.\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-PING\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cb\u003ePING\u003c/b\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003cp\u003eThe PING control frame is a mechanism for measuring a minimal round-trip time from the sender.  It can be sent from the client or the server.  Receivers of a PING frame should send an identical frame to the sender as soon as possible (if there is other pending data waiting to be sent, PING should take highest priority).  Each ping sent by a sender should use a unique ID.\u003c/p\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eNOTE: This control frame may ultimately be removed.  It has been implemented for experimentation purposes.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003ePING  control message:\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1          \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|       6     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | 0 (flags) |     4 (length)       |\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |            32-bit ID             |\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eControl bit: The control bit is always 1 for this message.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eVersion: The SPDY version number.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eType: The message type for a PING message is 6.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLength: This frame is always 4 bytes long.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eID: A unique ID for this ping.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eNote: If a sender uses all possible PING ids (e.g. has sent all 2^32 possible IDs), it can \"wrap\" and start re-using IDs.\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n\u003cdiv\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-GOAWAY\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003e\u003cb\u003eGOAWAY\u003c/b\u003e\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThe GOAWAY control frame is a mechanism to tell the remote side of the connection that it should no longer use this session for further requests.  It can be sent from the client or the server. Once sent, the sender agrees not to initiate any new streams on this session. Receivers of a GOAWAY frame must not send additional requests on this session, although a new session can be established for new requests.  The purpose of this message is to allow the server to gracefully stop accepting new requests (perhaps for a reboot or maintenance), while still finishing processing of previously established requests.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eThere is an inherent race condition between a client sending requests and the server sending a GOAWAY message.  To deal with this case, the GOAWAY message contains a last-stream identifier indicating the last stream which was accepted in this session.  If the client issued requests for sessions after this stream-id, they were not accepted by the server and should be re-issued later at the client's discretion.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003eNOTE: This control frame may ultimately be removed.  It has been implemented for experimentation purposes.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNOTE: (mnot@mnot.org suggests that mandatory GOAWAY could be useful to ensure graceful closure of sessions.  This would help if the last request on a session was a POST, and the server closes, the client can't know whether the request was sent or not.  Requiring a GOAWAY before closing would notify the client exactly which requests had been processed and which had not.)\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003eGOAWAY control message:\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  \u003cfont face\u003d\"'Courier New'\"\u003e+----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New', sans-serif\"\u003e  |1|       1          \u003c/font\u003e\u003c/span\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|       7     \u003c/font\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e|\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------+\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | 0 (flags) |     4 (length)       |\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cspan style\u003d\"font-family:Verdana\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |       Last-good-stream-ID        |\u003c/div\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e  +----------------------------------|\u003c/font\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eControl bit: The control bit is always 1 for this message.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eVersion: The SPDY version number.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eType: The message type for a GOAWAY message is 7.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLength: This frame is always 4 bytes long.\u003c/span\u003e\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eLast-good-stream-Id: The last stream id which was accepted by the sender of the GOAWAY message.\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cfont size\u003d\"3\"\u003e\u003cb\u003eSUBRESOURCE\u003c/b\u003e\u003c/font\u003e\u003cbr /\u003e\u003cbr /\u003eThe subresource control frame is an optional control\r\nframe to advise the receiver of resources that will be needed.  If the\r\nurl and method in the name value pairs do not match those that are associated with the stream id then this control message must be ignored.\u003cbr /\u003e\u003cbr /\u003eControl frame\u003cbr /\u003e\u003cfont face\u003d\"'Courier New'\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  |C| Version(15bits) |      8       |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Flags (8)  |  Length (24 bits)   |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003cbr /\u003e  |0| Stream id (31 bits)            |\u003cbr /\u003e  |----------------------------------|\u003cbr /\u003e  |  Unused (16 bits) | NV Entries   |\u003cbr /\u003e  |----------------------------------|\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  | Key value pairs                  |\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e  +----------------------------------+\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/font\u003eLength: An unsigned 24 bit value representing the number of bytes after\r\nthe length field. The total size of a SUBRESOURCE frame is 8 bytes +\r\nlength. The length for this frame must be greater than or equal to 8.\u003cbr /\u003e\u003cbr /\u003eStream-id is the stream-id for the stream that the subresources are associated with\u003cbr /\u003e\u003cbr /\u003e\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eNV entries: The number of name/value pairs that follow.\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eThe \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protoco#nameheaderblock\" rel\u003d\"nofollow\"\u003eName/value block\u003c/a\u003e is the same as a SYN_REPLY, but url and method are mandatory fields.\u003c/p\u003e\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\u003c/p\u003e\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003eIf a sender is using the SUBRESOURCE control frame to inform the client of streams that the will be created (\u003cspan\u003e\u003cspan\u003e\u003cspan\u003eX-Associated-Content)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin:0px;font-family:arial,sans-serif\"\u003e (e.g. a server creating a stream to send an image used on a webpage) then the SUBRESOURCE message must be sent before the data frame where the receiver could discover the additional resource.\u003cbr /\u003e\u003c/p\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Server-Push\" /\u003eServer Push\u003c/h2\u003e\u003cdiv\u003eThis section needs much work; it currently documents the prototyped protocol, but is not ready for broad implementation.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eBecause SPDY enables both clients and servers to create streams, a server may decide to initiate a stream to the client.  Generally, this should be done if the server has knowledge that the client will need a resource before the client has requested it.  Servers should use this feature with care, because if the resource is cacheable, and the client already has a cached copy of the resource, this stream may be wasteful.  Further, servers should inform clients of the pending pushed resource as early as possible to avoid races between the server pushing the stream and the client requesting it (based on having discovered need for the resource from other downloaded content).  Not all content is push-able from the server.  Only resources fetched via the HTTP GET method can be server-pushed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eNote:  Race conditions can only be avoided with the client if the client uses a single SPDY session to the server.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eServer Implementation\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eWhen the server intends to push resources to the client, it should append a header, \"X-Associated-Content\" to the SYN_REPLY for the resource which will also contain pushed content.  This SYN_REPLY MUST be sent prior to initiating the server-pushed streams.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eFor each pushed resource listed in the X-Associated-Content header, the server may create streams by sending a SYN_STREAM frame.  This is the same as client-side stream initiation, except for that the server will append a header called \"Path\" which contains the path of the resource requested.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eClient Implementation\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eWhen fetching a resource the client has 3 possibilities:\u003c/div\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003ethe resource is not being pushed\u003c/li\u003e\u003cli\u003ethe resource is being pushed, but the data has not yet arrived\u003c/li\u003e\u003cli\u003ethe resource is being pushed, and the data has started to arrive\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003eWhen a SYN_REPLY frame which contains a X-Associated-Content header is received, the client MUST NOT issue GET requests for those resources and instead wait for the pushed content from the server.  Similarly, if the client would have made a request for a resource but a X-Associated-Content header has been received for that resource, and yet the pushed stream has not arrived, the client MUST wait for the data to be pushed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen a SYN frame is received which contains a path previously specified in an X-Associated-Content header, the client SHOULD buffer the received data from the stream as is appropriate for the client.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eFlaws in this specification:\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eThe syntax of the X-Associated-Content header needs to be redone.\u003c/li\u003e\u003cli\u003eIncorporate the SUBRESOURCE control frame into this specification.\u003c/li\u003e\u003cli\u003eThe \"Path\" header in the SYN_STREAM should be changed to \"Url\" and be a fully qualified path.\u003c/li\u003e\u003cli\u003eNeed to implement flow control on pushes\u003c/li\u003e\u003cli\u003eNeed to specify error case when the client cannot buffer.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Future-work-experiments\" style\u003d\"color:rgb(78,125,191);outline-style:none\" /\u003eFuture work/experiments\u003c/h2\u003e\r\nThe following are thoughts/brainstorms for future work and experiments.\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eCaching\u003cbr /\u003e\r\nSince we're proposing to do almost everything over an encrypted channel, we're making caching either difficult or impossible.\u003cbr /\u003e\r\nWe've had some discussions about having a non-secure, static-only content channel (where the resources are signed, or cryptographic hashes of the insecure content are sent over a secure link), but have made no headway yet...\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eDoS potential\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;margin-left:40px\"\u003eThe potential for DoS of the server (by increasing the amount of state) is no worse than it would be for TCP connections. In fact, since more of the state is managed in userspace, it is easier to detect and react to increases in resource utilization. The client side, however, does have a potential for DoS since the server may now attempt to use client resources which would not normally be considered to be large per stream state.\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin:6px;padding:0px;font-family:Verdana;font-size:10pt;background-color:rgb(255,255,255);min-height:1100px;line-height:normal\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eMore investigation needs to be done about attack modes and remediation responses.\u003c/span\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul style\u003d\"font-family:arial,sans-serif\"\u003e\u003cli\u003eStream capacity.\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eToday, HTTP has no knowledge of approximate client bandwidth, and TCP only slowly and indirectly discovers it as a connection warms up. However, by the time TCP has warmed up, the page is often already completely loaded. To ensure that bandwidth is utilized efficiently, SPDY allows the client to tell the server its approximate bandwidth. The HELLO message is part of this, but measurement, reporting and all of the other infrastructure and behavioral modifications are lacking.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eServer-controlled connection parameters.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px;font-family:arial,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eThe \"server\" -- since either side may be considered a \"server\" in SPDY, \"server\" refers here to the side which receives requests for new sessions -- can inform the other side of reasonable connection or stream limits which should be respected. As with stream capacity, the HELLO message provides a container for signaling this, but no work has yet been done to figure out what values should be set, when, and what behavioral changes should be expected when the value does change.\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:rgb(255,255,255)\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003ePrefetching/server push\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cspan style\u003d\"background-color:rgb(255,255,255)\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cblockquote style\u003d\"border-style:none;border-width:medium;margin:0pt 0pt 0pt 40px;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eIf the client can inform the server (or vice versa) how much bandwidth it is willing to allocate to various activities, then the server can push or prefetch resources without a) impacting the activities that the user wants to perform; or b) being too inefficient. While this approach still has inefficiencies (the server still send sparts of resources that the client already has before the client gets around to sending a FIN to the server), it doesn't seem to be grossly inefficient when coupled with the client telling the server how much slack (bandwidth) it is is willing to give to the server. However, this means that the client must be able to dynamically adjust the slack that it provides for server push or prefetching, for example, if it sees an increase in PING time.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"background-color:rgb(255,255,255)\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eRe-prioritization of streams\u003c/div\u003e\r\n\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cblockquote style\u003d\"border-style:none;border-width:medium;margin:0pt 0pt 0pt 40px;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eUsers often switch between multiple tabs in the browser. When the user switches tasks, the protocol should allow for a change in priority as the user now wants different data at a higher priority. This would likely involve creating priority groups so that the relative priority of resources for a tab can be managed all at once instead of having to make a number of changes proportional to the number of requests (which is 100% likely to be the same or larger!)\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cul\u003e\u003cli\u003eUni-directional (but associated) streams\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eIt may be a mistake to make a connection-analogue in the stream. It is perhaps better to allow each side to make a unidirectional stream, and provide data about which stream it may be associated with. This offers a much easier-to-comprehend association mechanism for server push.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eFlow control\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eEach side can announce how much data or bandwidth it will accept for each class of streams. If this is done, then speculative operations such as server push can soak up a limited amount of the pipe (especially important if the pipe is long and thin). This may allow for the elimination of more complex \"is this already in the cache\" or \"announce what I have in my cache\" schemes which are likely costly and complex.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eUse of gzip compression\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eThe use of gzip compression should be stateful only across headers in the channel. Essentially, separate gzip contexts should be maintained for headers versus data.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eDNS data\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eIt is suboptimal that the browser must discover new hostnames and then look them up in cases where it is fetching new resources controlled by the same entity. For example, there shouldn't be a need to do another DNS lookup for a resource from static.foo.com. when the browser has already resolved xxx.foo.com. In these cases, it would seemingly make sense to send (over the SPDY channel) the DNS data (signed in such a way that the user-agent can verify that it is authoritative).\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eRedirect to a different IP while retaining the HOST header\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eFor large sites or caches, it may be advantageous to supplement DNS frontend load balancing with the ability to send the user to a sibling that is less loaded, but also able to serve the request. This is not possible today with HTTP, as redirects must point to a different name (or use an IP, which amounts to the same thing), so that cookies, etc. are treated differently. This feature would likely be tied to the DNS data feature, or a more interesting verification mechanism would need to exist.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003eNew headers\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eRequest headers:\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eNever been to this site before header.  When the server receives this header, it is used as permission to open multiple, server-initiated streams carrying subresource content. If sent, then the server can freely push all the resources necessary for the page.\u003c/li\u003e\u003c/ul\u003e\r\n\u003cli\u003eResponse\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-size:small\"\u003e\u003cspan style\u003d\"font-size:13px\"\u003eSubresource headers\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003cli\u003eMark Nottingham notes that having the method/uri/version in separate headers, rather than at the front of the block, may make it harder for servers to quickly access this information. Being compressed hurts too.\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n\r\n\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/385872135698932510"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-protocol/spdy-protocol-draft1"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4393694214632659194"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4393694214632659194"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4393694214632659194"}],"author":[{}],"sites$pageName":{"$t":"spdy-protocol-draft1"},"sites$revision":{"$t":"50"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"},"published":{"$t":"2010-01-22T20:59:26.920Z"},"updated":{"$t":"2010-02-02T13:16:49.644Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:22:34.917Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Content Browser"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com:443/a/google.com/chromeos/for-team-members/user-experience/content-browser/06-Files.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\" /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194158429/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003eApplication type:\u003c/b\u003e Panel/Tab\u003c/span\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003eDescription:\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe content browser is a simple hierarchical file browser. Specifically, it is an enhanced version of file:// rendering that allows easier navigation.\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eFunctionality:\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eRead only access\u003c/li\u003e\r\n\u003cli\u003eAttach to email\u003c/li\u003e\r\n\u003cli\u003ePop-out for media content\u003c/li\u003e\r\n\u003cli\u003eFile actions menu\u003c/li\u003e\u003c/ul\u003e\r\nFuture goals\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eOffline access to sync'd content\u003c/li\u003e\r\n\u003cli\u003eBrowsing external file:// and smb:// resources\u003c/li\u003e\r\n\u003cli\u003eRead/Write access\u003c/li\u003e\r\n\u003cli\u003eIntegration with open/save dialog\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eRelated: \u003cspan style\u003d\"font-weight:normal\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/shelf\" style\u003d\"color:rgb(31,56,132)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003eShelf\u003c/a\u003e | \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs\" style\u003d\"color:rgb(46,73,135)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003eOpen/Save\u003c/a\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePanel Style (with menu)\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003eThe pop out menu allows a variety of file manipulation and upload actions.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com:443/a/google.com/chromeos/for-team-members/user-experience/content-browser/ContentBrowserPanel1.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\" /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194161282/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\r\n\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eTab Style (for future versions)\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003eThe full tab view of the content browser will show the files in a columnar hierarchy. These columns can be popped out into panels.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cb\u003e\r\n\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser/Full.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194164289/chromium-os/user-experience/content-browser/Full.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;margin-left:auto;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5388862413548034581"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"content-browser"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8280434440509356258"},"published":{"$t":"2010-01-25T22:37:24.738Z"},"updated":{"$t":"2010-02-02T09:52:50.336Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-02T09:52:50.336Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Resolution Independence"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWe are focusing on two primary resolutions (at 1280@125dpi and 1366@150dpi), but should behave well on standard shipping netbooks.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/resolution-independence/Screen%20shot%202009-10-14%20at%208.47.17%20AM.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459523105/user-experience/resolution-independence/Screen%20shot%202009-10-14%20at%208.47.17%20AM.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003ePrototype: \u003cspan style\u003d\"font-weight:normal\"\u003e(Requires a webkit browser)\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#471264\"\u003e\u003cb\u003e\u003cu\u003e\u003cfont color\u003d\"#000000\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/u\u003e\u003c/b\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003ca href\u003d\"http://ux.chromium.org/demos/dynamicui/index.html#\" style\u003d\"color:rgb(71,18,100);outline-style:none;outline-width:initial;outline-color:initial\"\u003eChrome dynamic UI prototype\u003c/a\u003e\u003c/b\u003e\u003cb\u003e.\u003c/b\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cimg border\u003d\"0\" height\u003d\"133\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1265104331688/user-experience/resolution-independence/Screen%20shot%202010-02-02%20at%2010.51.45%20AM.PNG\" width\u003d\"200\" /\u003e\r\n\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003eFor different DPIs we would support different multipliers:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003e\u0026lt;150\u003c/b\u003e dpi\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUse existing assets\u003c/li\u003e\r\n\u003cli\u003eTabs are 24px tall with 16px icons\u003c/li\u003e\r\n\u003cli\u003eExamples\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e1024x600@10.1 (117dpi)\u003c/li\u003e\r\n\u003cli\u003e\u003cfont\u003e1280x800@12.1 (125dpi)\u003c/font\u003e\u003c/li\u003e\r\n\u003cli\u003e1366x768@11.6  (135dpi)\u003c/li\u003e\r\n\u003cli\u003eAny screens with height \u0026lt;600\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cli\u003e\u003cb\u003e150+\u003c/b\u003e dpi\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUse \u003cb\u003e1.25\u003c/b\u003e Multiplier assets\u003c/li\u003e\r\n\u003cli\u003eTabs are 30px tall with 24px icons\u003c/li\u003e\r\n\u003cli\u003eExamples:\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont\u003e1366x768@10.1 (150dpi)\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003e190+\u003c/b\u003e dpi\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUse \u003cb\u003e1.5 \u003c/b\u003eMultiplier assets\u003c/li\u003e\r\n\u003cli\u003eTabs are 36px tall with 32px icons\u003c/li\u003e\r\n\u003cli\u003eExamples \u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003e1920x1080@11.6 (190dpi Theoretical)\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cb\u003e\u0026gt;220\u003c/b\u003e dpi (or devices magnified by the user)\u003c/li\u003e\r\n\u003cul\u003e\u003cli\u003eUse vector based rendering\u003c/li\u003e\r\n\u003cli\u003eTabs are \u003cb\u003e1/5\u003c/b\u003e inches tall\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\nExceptions:\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e    Devices seen at greater distances use higher multipliers\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/resolution-independence"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8280434440509356258"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8280434440509356258"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8280434440509356258"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"resolution-independence"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1198679021781973889"},"published":{"$t":"2010-02-02T09:52:11.671Z"},"updated":{"$t":"2010-02-02T09:52:11.688Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-02T09:52:11.671Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2010-02-02 at 10.51.45 AM.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1198679021781973889"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8280434440509356258"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/resolution-independence/Screen%20shot%202010-02-02%20at%2010.51.45%20AM.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1198679021781973889"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1198679021781973889"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1198679021781973889"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1198679021781973889"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},"published":{"$t":"2010-01-25T22:36:31.298Z"},"updated":{"$t":"2010-02-02T09:50:52.850Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-02T09:50:52.850Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Form Factors Exploration"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com:443/a/google.com/chromeos/for-team-members/user-experience/form-factors/FormFactors.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\" /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eThis is a concept UI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eWhile its primary focus is netbooks, Chrome OS could eventually scale to a wide variety of devices. Each would have vastly different input methods, available screen space, and processing power. Below is an illustration of the forms we are considering along with notes for each:\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\r\n\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459277189/chromium-os/user-experience/form-factors/Form%20Factors.png\" style\u003d\"display:block;margin-right:auto;margin-left:auto;text-align:center\" /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\" /\u003e\r\n\u003c/div\u003e\r\n\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\r\n\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/netbook.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459282906/chromium-os/user-experience/form-factors/netbook.png\" /\u003e\u003c/a\u003e\u003c/div\u003eNetbook 10-12\"\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eBecause of their small screen resolution, the netbook ui is tailored to one web page on the screen at a time. Interaction is primarily via mouse and keyboard, and the UI is adapted to this, with primary targets distributed along the screen edges. Panels would dock against the bottom of the screen and could be moved to the sides as well.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003eFull Screen, Compact/Classic/Sidebar UI\u003c/li\u003e\r\n\u003cli\u003eOmnibox may autohide on devices with limited vertical height\u003c/li\u003e\r\n\u003cli\u003eDocking panels\u003c/li\u003e\r\n\u003cli\u003eTabs and Windows\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cblockquote style\u003d\"margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\r\n\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Tablet.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459285675/chromium-os/user-experience/form-factors/Tablet.png\" /\u003e\u003c/a\u003e\u003c/div\u003eTablet 5-10\"\u003c/span\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eOn tablets, the UI would be adjusted to handle larger touch targets. Initial explorations have maintained the same basic chrome layout, but enlarged the controls. Icons could be placed above tabs to provide larger, square targets. Panels would be placed along the bottom edge and could be opened with upward dragging motions.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003eFull screen, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui#TOC-Touchscreen-navigation\"\u003eTouch UI\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eDocking panels\u003c/li\u003e\r\n\u003cli\u003eTouch panel UI\u003c/li\u003e\r\n\u003cli\u003eTabs only\u003c/li\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/resolution-independence\"\u003eHigh-res display\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet\"\u003eVisual explorations\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/laptop.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459280485/chromium-os/user-experience/form-factors/laptop.png\" /\u003e\u003c/a\u003e\u003c/div\u003eLaptop 15-17\"\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eOn laptop-sized devices, full screen mode is not suitable for most web pages. At this point we would re-introduce multiple windows on screen, using either overlapping or tiling windowing systems. Panels would now be able to dock to edges \u003ci\u003eor\u003c/i\u003e float freely on the screen.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003eWindowed, Classic UI\u003c/li\u003e\r\n\u003cli\u003eOverlapping or tiled window management\u003c/li\u003e\r\n\u003cli\u003eFloating or docking panels\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\r\n\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Desktop.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459270137/chromium-os/user-experience/form-factors/Desktop.png\" /\u003e\u003c/a\u003e\u003c/div\u003eDesktop 24-30\"\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eThe desktop UI is similar to the laptop UI, but benefits more from freely positioned windows and access points near the cursor. Other potential enhancements include magnetic windows/panels that can be moved around with each other to create workspaces. \u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003eWindowed, Classic UI\u003c/li\u003e\r\n\u003cli\u003eOverlapping window management\u003c/li\u003e\r\n\u003cli\u003eFloating or docking panels\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/font\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\r\n\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Display.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459274566/chromium-os/user-experience/form-factors/Display.png\" /\u003e\u003c/a\u003e\u003c/div\u003eDisplay 40-60\"\u003c/span\u003e\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003eOn large displays or projector screens, the design needs are very similar to those of the netbook: full screen content, autohiding chrome, large targets. Complex window management is even less important, and it may be sufficient to have no windows, only zoomable tabs.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/blockquote\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\r\n\u003cul\u003e\u003cli\u003eFull screen display\u003c/li\u003e\r\n\u003cli\u003eAuto-hiding Omnibox\u003c/li\u003e\r\n\u003cli\u003eDocking panels\u003c/li\u003e\r\n\u003cli\u003eSplit screen\u003c/li\u003e\r\n\u003cli\u003eTabs only\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cbr /\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2969023883833218864"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"form-factors"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},"published":{"$t":"2010-01-25T22:39:40.349Z"},"updated":{"$t":"2010-02-02T09:03:20.387Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-02-02T09:03:20.387Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tablet"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eThis is a concept UI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis page contains visual explorations of how a Chrome OS tablet UI might look in hardware. Some possibilites they explore include: \u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/Tablet.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459359840/chromium-os/user-experience/form-factors/tablet/Tablet.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eKeyboard interaction with the screen: anchored, split, attached to focus.\u003c/li\u003e\u003cli\u003eLaunchers as an overlay, providing touch or search as means to access web sites.\u003c/li\u003e\u003cli\u003eContextual actions triggered via dwell.\u003c/li\u003e\u003cli\u003eZooming UI for multiple tabs\u003c/li\u003e\u003cli\u003eTabs presented along the side of the screen (see \u003ca href\u003d\"http://www.chromium.org/chromium-os/user-experience/window-ui\" style\u003d\"color:rgb(31,56,132)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003eSide tabs\u003c/a\u003e)\u003c/li\u003e\u003cli\u003eCreating multiple browsers on screen using a launcher\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-UI-Concepts\" /\u003eUI Concepts\u003c/h2\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.100.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459363389/chromium-os/user-experience/form-factors/tablet/tablet2.100.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.105.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459366244/chromium-os/user-experience/form-factors/tablet/tablet2.105.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.106.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459368877/chromium-os/user-experience/form-factors/tablet/tablet2.106.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.107.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459372101/chromium-os/user-experience/form-factors/tablet/tablet2.107.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.108.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459376241/chromium-os/user-experience/form-factors/tablet/tablet2.108.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.141.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459382175/chromium-os/user-experience/form-factors/tablet/tablet2.141.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.150.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459386656/chromium-os/user-experience/form-factors/tablet/tablet2.150.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eVideo Concepts\u003c/span\u003e\u003c/div\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cblockquote style\u003d\"margin:0 0 0 40px;border:none;padding:0px\"\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4?attredirects\u003d0\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264459954784/chromium-os/user-experience/form-factors/tablet/video_still.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003ePlease see attached video at the bottom of this page.\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/344234083161413472"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"tablet"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4905057106632739352"},"published":{"$t":"2010-01-27T16:51:01.921Z"},"updated":{"$t":"2010-01-27T16:51:01.935Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-27T16:51:01.921Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"An_Argument_For_Changing_TCP_Slow_Start.pdf"},"summary":{},"content":{"type":"application/pdf","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4905057106632739352"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"application/pdf","href":"https://sites.google.com/a/chromium.org/dev/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4905057106632739352"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4905057106632739352"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4905057106632739352"},{"rel":"edit-media","type":"application/pdf","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4905057106632739352"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2559345046891092594"},"published":{"$t":"2010-01-25T22:56:34.536Z"},"updated":{"$t":"2010-01-25T22:58:10.892Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:56:34.536Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"gestures_concept.mp4"},"summary":{},"content":{"type":"video/mp4","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2559345046891092594"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7585833746764352064"},{"rel":"alternate","type":"video/mp4","href":"https://sites.google.com/a/chromium.org/dev/user-experience/multitouch/gestures_concept.mp4"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2559345046891092594"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2559345046891092594"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2559345046891092594"},{"rel":"edit-media","type":"video/mp4","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2559345046891092594"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6837687429765196703"},"published":{"$t":"2010-01-25T22:49:42.164Z"},"updated":{"$t":"2010-01-25T22:58:10.892Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:49:42.164Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"GesturesImages.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6837687429765196703"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7585833746764352064"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/multitouch/GesturesImages.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6837687429765196703"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6837687429765196703"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6837687429765196703"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6837687429765196703"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7347216522651896132"},"published":{"$t":"2010-01-25T22:52:34.772Z"},"updated":{"$t":"2010-01-25T22:52:34.784Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:52:34.772Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_still.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7347216522651896132"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/video_still.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7347216522651896132"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7347216522651896132"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7347216522651896132"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7347216522651896132"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1404336170885132208"},"published":{"$t":"2010-01-25T22:49:52.367Z"},"updated":{"$t":"2010-01-25T22:49:52.375Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:49:52.367Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet_concept.mp4"},"summary":{},"content":{"type":"video/mp4","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1404336170885132208"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"video/mp4","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1404336170885132208"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1404336170885132208"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1404336170885132208"},{"rel":"edit-media","type":"video/mp4","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1404336170885132208"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3393985114158469976"},"published":{"$t":"2010-01-25T22:45:23.092Z"},"updated":{"$t":"2010-01-25T22:45:23.105Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:45:23.092Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2009-10-14 at 8.47.17 AM.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3393985114158469976"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8280434440509356258"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/resolution-independence/Screen%20shot%202009-10-14%20at%208.47.17%20AM.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3393985114158469976"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3393985114158469976"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3393985114158469976"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3393985114158469976"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4530708235403367543"},"published":{"$t":"2010-01-25T22:43:06.642Z"},"updated":{"$t":"2010-01-25T22:43:06.656Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:43:06.642Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.150.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4530708235403367543"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.150.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4530708235403367543"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4530708235403367543"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4530708235403367543"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4530708235403367543"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4798573385960440370"},"published":{"$t":"2010-01-25T22:43:02.155Z"},"updated":{"$t":"2010-01-25T22:43:02.175Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:43:02.155Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.141.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4798573385960440370"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.141.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4798573385960440370"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4798573385960440370"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4798573385960440370"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4798573385960440370"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9079702810138822230"},"published":{"$t":"2010-01-25T22:42:59.609Z"},"updated":{"$t":"2010-01-25T22:42:59.632Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:59.609Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.109.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9079702810138822230"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.109.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9079702810138822230"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9079702810138822230"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9079702810138822230"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9079702810138822230"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2119779880588562090"},"published":{"$t":"2010-01-25T22:42:55.649Z"},"updated":{"$t":"2010-01-25T22:42:56.241Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:55.649Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.108.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2119779880588562090"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.108.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2119779880588562090"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2119779880588562090"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2119779880588562090"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2119779880588562090"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4607424989202693743"},"published":{"$t":"2010-01-25T22:42:52.090Z"},"updated":{"$t":"2010-01-25T22:42:52.101Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:52.090Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.107.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4607424989202693743"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.107.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4607424989202693743"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4607424989202693743"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4607424989202693743"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4607424989202693743"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5424575555359806304"},"published":{"$t":"2010-01-25T22:42:48.867Z"},"updated":{"$t":"2010-01-25T22:42:48.877Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:48.867Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.106.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5424575555359806304"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.106.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5424575555359806304"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5424575555359806304"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5424575555359806304"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5424575555359806304"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6658882275411827300"},"published":{"$t":"2010-01-25T22:42:46.236Z"},"updated":{"$t":"2010-01-25T22:42:46.244Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:46.236Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.105.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6658882275411827300"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.105.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6658882275411827300"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6658882275411827300"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6658882275411827300"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6658882275411827300"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3232117788259146513"},"published":{"$t":"2010-01-25T22:42:43.383Z"},"updated":{"$t":"2010-01-25T22:42:43.389Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:43.383Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tablet2.100.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3232117788259146513"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/tablet2.100.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3232117788259146513"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3232117788259146513"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3232117788259146513"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3232117788259146513"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9034539184753039020"},"published":{"$t":"2010-01-25T22:42:39.827Z"},"updated":{"$t":"2010-01-25T22:42:39.840Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:42:39.827Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Tablet.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9034539184753039020"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/344234083161413472"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/tablet/Tablet.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9034539184753039020"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9034539184753039020"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9034539184753039020"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9034539184753039020"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4656976882146654530"},"published":{"$t":"2010-01-25T22:41:25.669Z"},"updated":{"$t":"2010-01-25T22:41:25.675Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:25.669Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Tablet.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4656976882146654530"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Tablet.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4656976882146654530"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4656976882146654530"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4656976882146654530"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4656976882146654530"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1475497087539139961"},"published":{"$t":"2010-01-25T22:41:22.900Z"},"updated":{"$t":"2010-01-25T22:41:22.906Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:22.900Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"netbook.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1475497087539139961"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/netbook.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1475497087539139961"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1475497087539139961"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1475497087539139961"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1475497087539139961"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/639734555665959928"},"published":{"$t":"2010-01-25T22:41:20.479Z"},"updated":{"$t":"2010-01-25T22:41:20.485Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:20.479Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"laptop.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/639734555665959928"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/laptop.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/639734555665959928"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/639734555665959928"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/639734555665959928"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/639734555665959928"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5995631339920522643"},"published":{"$t":"2010-01-25T22:41:17.177Z"},"updated":{"$t":"2010-01-25T22:41:17.189Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:17.177Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Form Factors.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5995631339920522643"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Form%20Factors.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5995631339920522643"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5995631339920522643"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5995631339920522643"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5995631339920522643"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5485059866059120843"},"published":{"$t":"2010-01-25T22:41:14.556Z"},"updated":{"$t":"2010-01-25T22:41:14.566Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:14.556Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Display.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5485059866059120843"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Display.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5485059866059120843"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5485059866059120843"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5485059866059120843"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5485059866059120843"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3991559065678240090"},"published":{"$t":"2010-01-25T22:41:10.130Z"},"updated":{"$t":"2010-01-25T22:41:10.137Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-25T22:41:10.130Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Desktop.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3991559065678240090"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2969023883833218864"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/form-factors/Desktop.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3991559065678240090"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3991559065678240090"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3991559065678240090"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3991559065678240090"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6887736758684802863"},"published":{"$t":"2010-01-22T21:00:38.779Z"},"updated":{"$t":"2010-01-22T21:22:18.807Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:22:18.807Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Shelf"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194593041/chromium-os/user-experience/shelf/Shelf.png\" style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\" /\u003eApplication type:\u003c/b\u003e Panel\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cfont color\u003d\"#2E4987\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003eDescription:\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eThe shelf is an on demand target for downloading and uploading. It acts as a temporary resting place for files that have been accessed, and for content being uploaded to websites. It uses the same display format as the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser\" style\u003d\"color:rgb(46,73,135)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003econtent browser\u003c/a\u003e and has similar actions available.\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eFunctionality:\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eSurfaces as a source in \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs\"\u003eopen/save dialog boxes\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eSurfaces as a source in \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser\"\u003econtent browser\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eAppears when content is dragged into the panel bar\u003c/li\u003e\r\n\u003cli\u003eAllows simple actions to be initiated from each item\u003c/li\u003e\r\n\u003cli\u003eReplaces the standard download shelf in Chrome.\u003c/li\u003e\r\n\u003cli\u003eBack button goes up to show other sources\u003c/li\u003e\u003c/ul\u003e\r\nFuture goals\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eSync to cloud\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/shelf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6887736758684802863"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6887736758684802863"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6887736758684802863"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"shelf"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/621028355830888313"},"published":{"$t":"2010-01-22T21:00:17.221Z"},"updated":{"$t":"2010-01-22T21:22:02.960Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:22:02.960Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Open/Save Dialogs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:inline!important;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cb\u003eApplication type:\u003c/b\u003e Sheet/Dialog\u003c/span\u003e\u003c/div\u003e\r\n\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003c/b\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003eDescription: \u003c/b\u003eAllows a location to be specified for a download action. This defaults to the shelf, but a modifier or contextual menu can be used to choose an alternate location.\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eFunctionality:\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003eShows the same sources as the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser\" style\u003d\"color:rgb(46,73,135)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003econtent browser\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eSurfaces \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/shelf\" style\u003d\"color:rgb(46,73,135)!important;outline-style:none;outline-width:initial;outline-color:initial\"\u003eshelf\u003c/a\u003e as a source\u003c/li\u003e\r\n\u003cli\u003eCould be floating, or attached to tab bar\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Open\" /\u003eOpen\u003c/h3\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194270239/chromium-os/user-experience/opensave-dialogs/Open.png\" /\u003e\u003c/span\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-2\" /\u003e\u003cbr /\u003e\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Save\" /\u003eSave\u003c/h3\u003e\r\n\u003cul\u003e\u003cli\u003eAdds a text field for name\u003c/li\u003e\u003cli\u003eShows the to-be-created file\u003c/li\u003e\r\n\u003cli\u003eWe should start downloading to get the preferred name headers and resolve all redirects\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs/Save.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264194268265/chromium-os/user-experience/opensave-dialogs/Save.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/621028355830888313"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/621028355830888313"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/621028355830888313"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"opensave-dialogs"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2802160385795489432"},"published":{"$t":"2010-01-22T21:14:18.615Z"},"updated":{"$t":"2010-01-22T21:14:18.622Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:14:18.615Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"TouchUI.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2802160385795489432"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/TouchUI.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2802160385795489432"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2802160385795489432"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2802160385795489432"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2802160385795489432"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2502389047340065637"},"published":{"$t":"2010-01-22T21:14:07.122Z"},"updated":{"$t":"2010-01-22T21:14:07.127Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:14:07.122Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"TouchNav.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2502389047340065637"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/TouchNav.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2502389047340065637"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2502389047340065637"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2502389047340065637"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2502389047340065637"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/240607630972319388"},"published":{"$t":"2010-01-22T21:09:53.036Z"},"updated":{"$t":"2010-01-22T21:09:53.041Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:09:53.036Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Shelf.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/240607630972319388"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6887736758684802863"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/shelf/Shelf.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/240607630972319388"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/240607630972319388"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/240607630972319388"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/240607630972319388"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8862332342231683749"},"published":{"$t":"2010-01-22T21:04:30.231Z"},"updated":{"$t":"2010-01-22T21:04:30.239Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:04:30.231Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Open.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8862332342231683749"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/621028355830888313"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs/Open.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8862332342231683749"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8862332342231683749"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8862332342231683749"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8862332342231683749"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4281036983355772708"},"published":{"$t":"2010-01-22T21:04:28.259Z"},"updated":{"$t":"2010-01-22T21:04:28.265Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:04:28.259Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Save.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4281036983355772708"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/621028355830888313"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/opensave-dialogs/Save.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4281036983355772708"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4281036983355772708"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4281036983355772708"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4281036983355772708"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5744980942544831707"},"published":{"$t":"2010-01-22T21:02:44.283Z"},"updated":{"$t":"2010-01-22T21:02:44.289Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:02:44.283Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Full.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5744980942544831707"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser/Full.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5744980942544831707"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5744980942544831707"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5744980942544831707"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5744980942544831707"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1254919146012818547"},"published":{"$t":"2010-01-22T21:02:41.275Z"},"updated":{"$t":"2010-01-22T21:02:41.282Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:02:41.275Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ContentBrowserPanel2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1254919146012818547"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1254919146012818547"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1254919146012818547"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1254919146012818547"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1254919146012818547"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7443113222610021486"},"published":{"$t":"2010-01-22T21:02:38.422Z"},"updated":{"$t":"2010-01-22T21:02:38.429Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-22T21:02:38.422Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ContentBrowserPanel1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7443113222610021486"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5388862413548034581"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7443113222610021486"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7443113222610021486"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7443113222610021486"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7443113222610021486"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1747680242044268097"},"published":{"$t":"2010-01-21T22:14:41.851Z"},"updated":{"$t":"2010-01-21T22:48:49.341Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:48:49.341Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Notifications"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Helvetica,sans-serif;line-height:16px\"\u003e\r\n\r\n\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\r\n\u003cdiv\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif;line-height:normal\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eChrome OS Notifications\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/notifications/Notifications.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264114129321/user-experience/notifications/Notifications.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eThe notifications panel is used for all OS and website notifications\u003c/span\u003e\u003c/div\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eFunctionality:\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cul\u003e\u003cli\u003ePops up along the bottom for any new notifications\u003c/li\u003e\r\n\u003cli\u003eSlides down after a delay\u003c/li\u003e\r\n\u003cli\u003eCan be closed to hide all notifications\u003c/li\u003e\r\n\u003cli\u003eCan be opened from the apps list\u003c/li\u003e\r\n\u003cli\u003eSticky notifications (like the low battery notification) do not slide down unless the user clicks on the titlebar\u003c/li\u003e\u003c/ul\u003e\r\nFuture goals\u003cbr /\u003e\r\n\u003cul\u003e\u003cli\u003eWe may eventually anchor this panel in a special location on the screen, but for now it behaves as a standard panel, opening to the left of any existing panels.\u003c/li\u003e\r\n\u003cli\u003eNotifications should be able to badge application icons (like browser actions).\u003c/li\u003e\r\n\u003cli\u003eBetter support for notification actions (links along the bottom).\u003c/li\u003e\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/notifications"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1747680242044268097"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1747680242044268097"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1747680242044268097"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"notifications"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2899832399371118486"},"published":{"$t":"2010-01-21T22:16:04.722Z"},"updated":{"$t":"2010-01-21T22:48:49.321Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:16:04.722Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Notifications.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2899832399371118486"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1747680242044268097"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/notifications/Notifications.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2899832399371118486"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2899832399371118486"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2899832399371118486"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2899832399371118486"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8420428567244089345"},"published":{"$t":"2010-01-21T22:21:03.522Z"},"updated":{"$t":"2010-01-21T22:43:17.610Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:43:17.609Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"System Status Icons"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb\u003e\r\n\u003cdiv style\u003d\"text-align:left\"\u003e\u003cspan style\u003d\"font-weight:800\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/system-status-icons/Screen%20shot%202009-12-01%20at%2012.23.56%20PM.PNG.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264112524427/chromium-os/user-experience/system-status-icons/Screen%20shot%202009-12-01%20at%2012.23.56%20PM.PNG.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\r\n\u003cdiv\u003e\u003cb\u003ePower\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003eDisplays battery/charging status\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\nNetwork\u003c/b\u003e\r\n\u003cdiv\u003eDisplays active network interface/status. Combines wireless/wired/cellular connections. Provides access to network \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings\"\u003esettings\u003c/a\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/system-status-icons/NetworkMenu.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113598802/chromium-os/user-experience/system-status-icons/NetworkMenu.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cbr /\u003e\r\n\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eTime\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003eDisplays the time in 12/24 hour formats. May provide access to a clock app.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eInput Method\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input\"\u003eDesign Doc\u003c/a\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eAudio Muted\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eTBD\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003eAlarm Enabled\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eTBD\u003c/div\u003e\r\n\u003cdiv\u003e\u003cb\u003e\u003cbr /\u003e\r\n\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/system-status-icons"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8420428567244089345"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8420428567244089345"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8420428567244089345"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"system-status-icons"},"sites$revision":{"$t":"5"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},"published":{"$t":"2010-01-21T22:30:13.833Z"},"updated":{"$t":"2010-01-21T22:43:08.668Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:34:22.706Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Settings"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-System\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eSystem\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Network\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eNetwork\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Browser\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eBrowser\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Personal-Stuff\"\u003e\u003cstrong\u003e4 \u003c/strong\u003ePersonal Stuff\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Under-the-Hood\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eUnder the Hood\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eChrome OS settings extend the standard chrome settings with new system and network tabs.\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-System\" /\u003eSystem\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eProvides access to most general settings from input devices to displays and sound.\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/1-General.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"250\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113101536/chromium-os/user-experience/settings/1-General.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Network\" /\u003eNetwork\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eNetwork settings has a basic top level ui for the interface types, with options dialogs that provide deeper customization\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/2-Internet.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"250\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113104853/chromium-os/user-experience/settings/2-Internet.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Browser\" /\u003eBrowser\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eAs in Chrome\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/3-Browser.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"250\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113133535/chromium-os/user-experience/settings/3-Browser.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Personal-Stuff\" /\u003ePersonal Stuff\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eAs in Chrome\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/4-PersonalStuff.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"250\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113136352/chromium-os/user-experience/settings/4-PersonalStuff.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Under-the-Hood\" /\u003eUnder the Hood\u003c/h3\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003eAs in Chrome\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/5-UnderTheHood.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" height\u003d\"250\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1264113139415/chromium-os/user-experience/settings/5-UnderTheHood.png\" width\u003d\"400\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8265016941296067526"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$pageName":{"$t":"settings"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2976021466441133514"},"published":{"$t":"2010-01-21T22:39:58.793Z"},"updated":{"$t":"2010-01-21T22:39:58.802Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:39:58.793Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NetworkMenu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2976021466441133514"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8420428567244089345"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/system-status-icons/NetworkMenu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2976021466441133514"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2976021466441133514"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2976021466441133514"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2976021466441133514"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/944868813708477027"},"published":{"$t":"2010-01-21T22:32:19.408Z"},"updated":{"$t":"2010-01-21T22:32:19.415Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:32:19.408Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"5-UnderTheHood.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/944868813708477027"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/5-UnderTheHood.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/944868813708477027"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/944868813708477027"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/944868813708477027"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/944868813708477027"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8998891020749313195"},"published":{"$t":"2010-01-21T22:32:16.343Z"},"updated":{"$t":"2010-01-21T22:32:16.352Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:32:16.343Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"4-PersonalStuff.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8998891020749313195"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/4-PersonalStuff.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8998891020749313195"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8998891020749313195"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8998891020749313195"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8998891020749313195"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2078481219543734559"},"published":{"$t":"2010-01-21T22:32:13.528Z"},"updated":{"$t":"2010-01-21T22:32:13.535Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:32:13.528Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"3-Browser.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2078481219543734559"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/3-Browser.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2078481219543734559"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2078481219543734559"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2078481219543734559"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2078481219543734559"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6082155858229522842"},"published":{"$t":"2010-01-21T22:31:44.845Z"},"updated":{"$t":"2010-01-21T22:31:44.853Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:31:44.845Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"2-Internet.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6082155858229522842"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/2-Internet.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6082155858229522842"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6082155858229522842"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6082155858229522842"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6082155858229522842"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2049434997846847135"},"published":{"$t":"2010-01-21T22:31:41.528Z"},"updated":{"$t":"2010-01-21T22:31:41.536Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:31:41.528Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"1-General.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2049434997846847135"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8265016941296067526"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/settings/1-General.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2049434997846847135"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2049434997846847135"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2049434997846847135"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2049434997846847135"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1836758596693023402"},"published":{"$t":"2010-01-21T22:22:04.416Z"},"updated":{"$t":"2010-01-21T22:22:04.427Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-21T22:22:04.416Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Screen shot 2009-12-01 at 12.23.56 PM.PNG.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1836758596693023402"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8420428567244089345"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/system-status-icons/Screen%20shot%202009-12-01%20at%2012.23.56%20PM.PNG.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1836758596693023402"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1836758596693023402"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1836758596693023402"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1836758596693023402"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6843991089382478056"},"published":{"$t":"2010-01-07T00:20:04.952Z"},"updated":{"$t":"2010-01-07T00:20:04.963Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2010-01-07T00:20:04.952Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"s0hDprW1DevZ8KuyE5lsKIg_903.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6843991089382478056"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4723945718499501890"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/s0hDprW1DevZ8KuyE5lsKIg_903.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6843991089382478056"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6843991089382478056"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6843991089382478056"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6843991089382478056"}],"author":[{"name":{"$t":"Randall Spangler"},"email":{"$t":"rspangler@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5131015040046295044"},"published":{"$t":"2009-11-19T17:04:10.159Z"},"updated":{"$t":"2009-12-30T23:37:10.743Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-20T22:13:39.453Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Access Points"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:Arial,Verdana,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-left:auto\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-left:auto\"\u003e\u003cspan style\u003d\"font-family:trebuchet ms,Verdana,sans-serif\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-text\"\u003e\u003cdiv class\u003d\"sites-embed-content-textbox\"\u003e\u003chtml xmlns:jot\u003d\"http://www.google.com/ns/jotspot/srvtmpl/\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cb\u003eUI under development. Designs are subject to change.\u003c/b\u003e\u003c/div\u003e\u003cdiv style\u003d\"text-align:center;background-color:rgb(255,204,51)\"\u003e\u003cspan style\u003d\"font-size:x-small\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e \u003c/div\u003e\u003c/html\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-left:auto\"\u003e\u003cfont face\u003d\"\u0026amp;apos;trebuchet ms\u0026amp;apos;, Verdana, sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-left:auto\"\u003e\r\n\u003cdiv style\u003d\"display:inline;float:right;margin-top:5px;margin-right:10px;margin-bottom:5px;margin-left:10px\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650251507/chromium-os/user-experience/access-points/apppng\" /\u003e\u003c/div\u003e\r\nThe apps menu is the primary access point in Chromium OS. It is available via an icon in the upper left, and provides access to universal search, document and tab creation, bookmarks, and other OS tools. Its primary functions may include:\u003c/div\u003e\r\n\u003cdiv style\u003d\"text-align:left;display:block;margin-left:auto\"\u003e\r\n\u003cul\u003e\u003cli\u003eSearch Box\u003c/li\u003e\r\n\u003cli\u003eTab creation\u003c/li\u003e\r\n\u003cli\u003eDocument Templates\u003c/li\u003e\r\n\u003cli\u003eNew Tab / Window\u003c/li\u003e\r\n\u003cli\u003eBookmarks\u003c/li\u003e\r\n\u003cli\u003eHistory\u003c/li\u003e\r\n\u003cli\u003eDownloads\u003c/li\u003e\r\n\u003cli\u003eOptions\u003c/li\u003e\r\n\u003cli\u003eNotifications\u003c/li\u003e\r\n\u003cli\u003eSign out / Shut down\u003cbr /\u003e\r\n\u003c/li\u003e\u003c/ul\u003e\r\n\u003cdiv\u003eWe are exploring a variety of different form factors for this access point: standard pull down menus, a full-screen tab, and partial-screen overlays.\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/access-points"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5131015040046295044"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5131015040046295044"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5131015040046295044"}],"author":[{}],"sites$pageName":{"$t":"access-points"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},"published":{"$t":"2009-11-19T17:03:03.364Z"},"updated":{"$t":"2009-12-30T23:26:01.933Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-30T23:26:01.932Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"File System/Autoupdate Supplements"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\u003cdiv class\u003d\"sites-embed-align-right-wrapping-on\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Reinstallation\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eReinstallation\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Firmware-updating\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eFirmware updating\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Bit-rot-evasion-corruption-on-the-h\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eBit rot evasion (corruption on the hard drive)\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Stacking-updates\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eStacking updates\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Forced-reboot\"\u003e\u003cstrong\u003e5 \u003c/strong\u003eForced reboot\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\r\n\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eThis document provides a set of brief Chromium OS design supplements, covering areas related to the file system and autoupdates.\r\n\u003c/div\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Reinstallation\" /\u003eReinstallation\u003c/h2\u003e\r\nReinstallation\r\nrequires a recovery image (on a USB drive or SD card) to be attached to the system. When\r\nthe system boots, the user may force reinstallation by forcing the firmware into recovery mode by pressing a recovery button. The exact details of how the firmware accomplishes this are outside\r\nthe scope of this document.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe recovery image performs the actions described in the following diagram:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_image.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650184594/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Firmware-updating\" /\u003eFirmware updating\u003c/h2\u003e\r\nThe firmware discussed in this document references a firmware designed by Google for Chromium OS-based devices. We recommend that devices that support the Google firmware use that firmware; that lets them take advantage of the boot time, security, and recovery features discussed in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery\"\u003eFirmware Boot and Recovery\u003c/a\u003e and \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot\"\u003eVerified Boot\u003c/a\u003e documents. The firmware is covered in more detail in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery\"\u003eFirmware Boot and Recovery\u003c/a\u003e document, but here is how it will work from the autoupdate perspective.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nWe\r\nplan to generally update the firmware after successful boot of a new\r\nimage that contains new firmware to install, but we will be able to\r\nforce installation of new firmware before an update is applied if\r\nnecessary.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe firmware contains a stub that\r\ncan boot into either of two on-chip boot loaders (A or B). The stub\r\nfirst tries to boot from A. If A's checksum fails, it boots B. If B's\r\nchecksum also fails, it goes into recovery mode.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nThe firmware updater is a userspace program that runs on system boot. It performs the following actions:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updater.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650186816/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Bit-rot-evasion-corruption-on-the-h\" /\u003eBit rot evasion (corruption on the hard drive)\u003c/h2\u003e\r\nNote: it's unclear how much we expect to be impacted by drive corruption.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIn\r\nthis scheme, we take advantage of the fact that we could have two\r\nidentical system partitions.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nNote that this is an early design that may change over time based on feedback.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eWe use the extra bits in\r\nthe partition table as follows. Note that we have 8 bits in each byte\r\nreserved for the bootable flag. This gives us 7 unused bits per\r\npartition for the boot loader.\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bits.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650185721/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\r\n\u003c/div\u003e\r\n\r\n\r\n\u003cdiv\u003e\r\n\u003cdl\u003e\r\n\u003cdt\u003e0x80\u003c/dt\u003e\r\n\u003cdd\u003eBootable flag: this partition can be booted. This bit being set\r\nimplies that it's a good partition to boot from; it's been vetted.\u003c/dd\u003e\r\n\u003cdt\u003e0x40\u003c/dt\u003e\r\n\u003cdd\u003eTryboot flag: this partition, which must be bootable, should be booted \u003ci\u003ethis\u003c/i\u003e time, in the event of multiple bootable partitions being found.\u003c/dd\u003e\r\n\u003cdt\u003e0x20-0x04\u003c/dt\u003e\r\n\u003cdd\u003eUnused.\u003c/dd\u003e\r\n\u003cdt\u003e0x02-0x01\u003c/dt\u003e\r\n\u003cdd\u003eAttempt boot counter, also known as the \"remaining_attempts\" flag. This takes precedence over bootable/tryboot. For more information, see the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate\"\u003eFile System/Autoupdate\u003c/a\u003e document.\u003cbr /\u003e\r\n\u003c/dd\u003e\r\n\u003c/dl\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eThe boot loader flow is then:\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flow.png?attredirects\u003d0\" imageanchor\u003d\"1\" rel\u003d\"nofollow\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1258650187850/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\nOpen issue:\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e We could use a third system partition. This comes at a cost of space, but lets us \u003c/span\u003e\u003ci\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ealways\u003c/span\u003e\u003c/i\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e\r\nhave a backup partition ready, even midway through an autoupdate. If a\r\nsystem partition is 200MB, we might do this. If it's 1 GB, we might\r\nnot want to.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Stacking-updates\" /\u003eStacking updates\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eUpdates will be stackable. In other words:\u003c/div\u003e\r\n\u003cbr style\u003d\"font-family:arial,sans-serif\" /\u003e\r\n\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eUpdates\r\ncan be applied, one after another as they come out, without a reboot.\r\nSo, for example, if you boot into version n, then update the other partition to n+1 but\r\ndon't reboot, you're still running n. Then, if n+2 comes out, we will\r\nupdate from n+1 to n+2 in the other partition, while remaining booted into n.\u003c/span\u003e\r\n\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Forced-reboot\" /\u003eForced reboot\u003c/h2\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003eWe will be able to force a reboot should we need to apply an emergency security update.\u003c/div\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3366051319303255070"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3657132930477363515"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"}],"author":[{}],"sites$pageName":{"$t":"filesystem-autoupdate-supplements"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6817819092304299467"},"published":{"$t":"2009-12-17T15:44:02.376Z"},"updated":{"$t":"2009-12-17T15:44:02.390Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-17T15:44:02.376Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6817819092304299467"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6817819092304299467"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6817819092304299467"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6817819092304299467"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6817819092304299467"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5920721339961431319"},"published":{"$t":"2009-12-09T15:47:54.329Z"},"updated":{"$t":"2009-12-17T15:42:32.694Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-17T15:42:32.688Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5920721339961431319"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5920721339961431319"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5920721339961431319"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5920721339961431319"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5920721339961431319"}],"author":[{}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/431112717401498430"},"published":{"$t":"2009-12-17T15:31:23.578Z"},"updated":{"$t":"2009-12-17T15:31:23.594Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-17T15:31:23.578Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"top_tool_bar_w_console.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/431112717401498430"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/top_tool_bar_w_console.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/431112717401498430"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/431112717401498430"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/431112717401498430"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/431112717401498430"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"XCl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8064543510417766927"},"published":{"$t":"2009-11-19T23:30:11.179Z"},"updated":{"$t":"2009-12-09T23:16:27.726Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T23:16:27.726Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8064543510417766927"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8064543510417766927"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8064543510417766927"}],"author":[{}],"sites$revision":{"$t":"15"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Lenovo Ideapad S10"},{"index":"B","name":"Wifi","$t":"?"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Need to replace wifi card"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id\u003d12F0696583E04D86B9B79B0FEC01C087\u0026current-category-id\u003d02695ADDF94544E5A11D24AEBC064493\u0026menu-id\u003dproducts"}]},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7511802911509034312"},"published":{"$t":"2009-11-25T19:27:16.781Z"},"updated":{"$t":"2009-12-09T23:16:12.952Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T23:16:12.952Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7511802911509034312"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7511802911509034312"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7511802911509034312"}],"author":[{}],"sites$revision":{"$t":"6"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Lenovo IdeaPad S12"},{"index":"B","name":"Wifi","$t":"?"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Need to replace WiFi card, need to select Intel Integrated graphics models only (NVidia and VIA graphics not supported)"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id\u003d12F0696583E04D86B9B79B0FEC01C087\u0026current-category-id\u003d8EE56652C33D4452A778393130C14F42"}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6451220579095478628"},"published":{"$t":"2009-12-09T15:51:19.714Z"},"updated":{"$t":"2009-12-09T15:51:19.728Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:51:19.714Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_dirxml.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6451220579095478628"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_dirxml.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6451220579095478628"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6451220579095478628"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6451220579095478628"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6451220579095478628"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3232150523010492460"},"published":{"$t":"2009-12-09T15:50:54.983Z"},"updated":{"$t":"2009-12-09T15:50:55.048Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:50:54.983Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_dir.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3232150523010492460"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_dir.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3232150523010492460"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3232150523010492460"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3232150523010492460"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3232150523010492460"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2592028321830041397"},"published":{"$t":"2009-12-09T15:49:25.414Z"},"updated":{"$t":"2009-12-09T15:49:25.423Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:49:25.414Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_inspect.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2592028321830041397"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_inspect.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2592028321830041397"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2592028321830041397"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2592028321830041397"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2592028321830041397"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5074530221433437465"},"published":{"$t":"2009-12-09T15:49:04.603Z"},"updated":{"$t":"2009-12-09T15:49:04.613Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:49:04.603Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_dollar_one.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5074530221433437465"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_dollar_one.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5074530221433437465"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5074530221433437465"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5074530221433437465"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5074530221433437465"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5140263478975543323"},"published":{"$t":"2009-12-09T15:48:40.026Z"},"updated":{"$t":"2009-12-09T15:48:40.047Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:48:40.026Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_dollar_zero.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5140263478975543323"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_dollar_zero.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5140263478975543323"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5140263478975543323"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5140263478975543323"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5140263478975543323"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9180235513470299253"},"published":{"$t":"2009-12-09T15:48:18.934Z"},"updated":{"$t":"2009-12-09T15:48:18.945Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-09T15:48:18.934Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"console_id.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9180235513470299253"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/console_id.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9180235513470299253"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9180235513470299253"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9180235513470299253"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9180235513470299253"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3163523842953778164"},"published":{"$t":"2009-12-01T22:37:03.938Z"},"updated":{"$t":"2009-12-06T15:45:44.452Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-06T15:45:44.452Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3163523842953778164"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3163523842953778164"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3163523842953778164"}],"author":[{}],"sites$revision":{"$t":"3"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Samsung NC10"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Wifi: Atheros AR50007EG, Ethernet: Marvell Yukon 88E8040"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":""}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7482448210666691800"},"published":{"$t":"2009-12-05T04:08:06.260Z"},"updated":{"$t":"2009-12-05T04:08:06.260Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-05T04:08:06.260Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7482448210666691800"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7482448210666691800"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7482448210666691800"}],"author":[{}],"sites$revision":{"$t":"1"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Fujitsu Lifebook T5010"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":""},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":""}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4378585549865187266"},"published":{"$t":"2009-12-05T04:06:54.923Z"},"updated":{"$t":"2009-12-05T04:06:54.923Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-05T04:06:54.923Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4378585549865187266"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4378585549865187266"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4378585549865187266"}],"author":[{}],"sites$revision":{"$t":"1"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Fujitsu Lifebook A6030"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":""},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":""}]},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9116515873108376859"},"published":{"$t":"2009-11-19T23:35:25.813Z"},"updated":{"$t":"2009-12-05T04:06:13.714Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-05T04:06:13.714Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9116515873108376859"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9116515873108376859"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9116515873108376859"}],"author":[{}],"sites$revision":{"$t":"8"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Dell Mini 10V"},{"index":"B","name":"Wifi","$t":"No"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Need to replace wifi card - both Atheros and Intel verified to work"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"https://ecomm2.dell.com/dellstore/basket.aspx?c\u003dus\u0026cs\u003d19\u0026l\u003den\u0026s\u003ddhs\u0026itemtype\u003dCFG"}]},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1787945148521530871"},"published":{"$t":"2009-12-04T20:08:42.378Z"},"updated":{"$t":"2009-12-04T22:42:39.523Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-04T22:42:39.517Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_stack_chrome.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1787945148521530871"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4092538734283380888"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/video/video_stack_chrome.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1787945148521530871"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1787945148521530871"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1787945148521530871"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1787945148521530871"}],"author":[{"name":{"$t":"Andrew Scherkus"},"email":{"$t":"scherkus@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5046113533912119267"},"published":{"$t":"2009-12-03T03:08:42.413Z"},"updated":{"$t":"2009-12-04T22:42:20.019Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-04T22:42:20.012Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_stack_chrome.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5046113533912119267"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4092538734283380888"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/video/video_stack_chrome.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5046113533912119267"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5046113533912119267"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5046113533912119267"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5046113533912119267"}],"author":[{"name":{"$t":"Andrew Scherkus"},"email":{"$t":"scherkus@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8481068282478029485"},"published":{"$t":"2009-12-04T20:08:34.007Z"},"updated":{"$t":"2009-12-04T20:08:34.019Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-04T20:08:34.007Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_stack_arch.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8481068282478029485"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4092538734283380888"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/video/video_stack_arch.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8481068282478029485"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8481068282478029485"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8481068282478029485"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8481068282478029485"}],"author":[{"name":{"$t":"Andrew Scherkus"},"email":{"$t":"scherkus@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3357058265378714867"},"published":{"$t":"2009-12-03T09:36:31.145Z"},"updated":{"$t":"2009-12-03T09:36:31.155Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T09:36:31.145Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"candidate_window.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3357058265378714867"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/candidate_window.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3357058265378714867"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3357058265378714867"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3357058265378714867"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3357058265378714867"}],"author":[{"name":{"$t":"Satoru Takabayashi"},"email":{"$t":"satorux@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4571651006947158213"},"published":{"$t":"2009-12-03T07:11:26.135Z"},"updated":{"$t":"2009-12-03T09:33:26.497Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T07:11:26.135Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"input.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4571651006947158213"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/input.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4571651006947158213"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4571651006947158213"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4571651006947158213"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4571651006947158213"}],"author":[{"name":{"$t":"Satoru Takabayashi"},"email":{"$t":"satorux@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/755573838574224450"},"published":{"$t":"2009-12-03T09:11:23.398Z"},"updated":{"$t":"2009-12-03T09:33:26.496Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T09:11:23.398Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"candidate_window_demo.swf"},"summary":{},"content":{"type":"application/x-shockwave-flash","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/755573838574224450"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"application/x-shockwave-flash","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/candidate_window_demo.swf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/755573838574224450"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/755573838574224450"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/755573838574224450"},{"rel":"edit-media","type":"application/x-shockwave-flash","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/755573838574224450"}],"author":[{"name":{"$t":"Satoru Takabayashi"},"email":{"$t":"satorux@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/756205534213783436"},"published":{"$t":"2009-12-03T08:17:56.984Z"},"updated":{"$t":"2009-12-03T09:33:26.496Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T08:17:56.984Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"basic-architecture2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/756205534213783436"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/756205534213783436"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/756205534213783436"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/756205534213783436"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/756205534213783436"}],"author":[{"name":{"$t":"Satoru Takabayashi"},"email":{"$t":"satorux@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4296665485732417331"},"published":{"$t":"2009-12-03T07:10:50.658Z"},"updated":{"$t":"2009-12-03T09:33:26.496Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T07:10:50.658Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"basic-architecture.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4296665485732417331"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/727174332690514409"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/text-input/basic-architecture.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4296665485732417331"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4296665485732417331"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4296665485732417331"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4296665485732417331"}],"author":[{"name":{"$t":"Satoru Takabayashi"},"email":{"$t":"satorux@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3632071621096566649"},"published":{"$t":"2009-12-03T00:00:24.552Z"},"updated":{"$t":"2009-12-03T00:00:24.559Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-03T00:00:24.552Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_stack_arch.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3632071621096566649"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4092538734283380888"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/video/video_stack_arch.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3632071621096566649"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3632071621096566649"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3632071621096566649"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3632071621096566649"}],"author":[{"name":{"$t":"Andrew Scherkus"},"email":{"$t":"scherkus@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"Wil7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3285492092948180999"},"published":{"$t":"2009-11-19T17:03:50.073Z"},"updated":{"$t":"2009-12-01T18:45:58.629Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-01T18:45:58.628Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3285492092948180999"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3285492092948180999"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3285492092948180999"}],"author":[{}],"sites$revision":{"$t":"13"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"HP Mini 5101"},{"index":"B","name":"Wifi","$t":"No"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Make sure to specify Intel wireless module when customizing."},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://h71016.www7.hp.com/MiddleFrame.asp?page\u003dconfig\u0026ProductLineId\u003d539\u0026FamilyId\u003d3066\u0026BaseId\u003d31126\u0026oi\u003dE9CED\u0026BEID\u003d19701\u0026SBLID\u003d"}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3160531018188671780"},"published":{"$t":"2009-12-01T04:30:16.340Z"},"updated":{"$t":"2009-12-01T04:30:16.340Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-12-01T04:30:16.340Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3160531018188671780"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3160531018188671780"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3160531018188671780"}],"author":[{}],"sites$revision":{"$t":"1"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Sony VAIO W Series VPCW121AX/W"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":""},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId\u003d10551\u0026storeId\u003d10151\u0026langId\u003d-1\u0026productId\u003d8198552921665974276"}]},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/563442339637477781"},"published":{"$t":"2009-11-30T23:38:16.251Z"},"updated":{"$t":"2009-11-30T23:38:16.259Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:38:16.251Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"exclude_selected_function.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/563442339637477781"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/exclude_selected_function.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/563442339637477781"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/563442339637477781"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/563442339637477781"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/563442339637477781"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6327691538605400237"},"published":{"$t":"2009-11-30T23:38:02.747Z"},"updated":{"$t":"2009-11-30T23:38:02.765Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:38:02.747Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"focus_selected_function.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6327691538605400237"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/focus_selected_function.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6327691538605400237"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6327691538605400237"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6327691538605400237"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6327691538605400237"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4864181838632138833"},"published":{"$t":"2009-11-30T23:36:53.971Z"},"updated":{"$t":"2009-11-30T23:36:53.982Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:36:53.971Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"storage_sticky_note.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4864181838632138833"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/storage_sticky_note.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4864181838632138833"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4864181838632138833"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4864181838632138833"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4864181838632138833"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7326076971894506502"},"published":{"$t":"2009-11-30T23:36:40.992Z"},"updated":{"$t":"2009-11-30T23:36:41.009Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:36:40.992Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"storage_panel_sql_query.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7326076971894506502"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/storage_panel_sql_query.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7326076971894506502"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7326076971894506502"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7326076971894506502"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7326076971894506502"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5918510093670154063"},"published":{"$t":"2009-11-30T23:36:29.175Z"},"updated":{"$t":"2009-11-30T23:36:29.183Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:36:29.175Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"storage_panel_database.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5918510093670154063"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/storage_panel_database.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5918510093670154063"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5918510093670154063"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5918510093670154063"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5918510093670154063"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/200573932351111476"},"published":{"$t":"2009-11-30T23:36:16.930Z"},"updated":{"$t":"2009-11-30T23:36:16.946Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:36:16.930Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"storage_panel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/200573932351111476"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/storage_panel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/200573932351111476"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/200573932351111476"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/200573932351111476"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/200573932351111476"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5425474493217918754"},"published":{"$t":"2009-11-30T23:36:05.504Z"},"updated":{"$t":"2009-11-30T23:36:05.537Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:36:05.504Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"storage_cookie.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5425474493217918754"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/storage_cookie.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5425474493217918754"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5425474493217918754"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5425474493217918754"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5425474493217918754"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8970990444425711242"},"published":{"$t":"2009-11-30T23:35:32.639Z"},"updated":{"$t":"2009-11-30T23:35:32.663Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:35:32.639Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"two_profiles.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8970990444425711242"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/two_profiles.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8970990444425711242"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8970990444425711242"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8970990444425711242"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8970990444425711242"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2696187259855355195"},"published":{"$t":"2009-11-30T23:35:15.105Z"},"updated":{"$t":"2009-11-30T23:35:15.119Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:35:15.105Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"timeline_slider_right.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2696187259855355195"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/timeline_slider_right.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2696187259855355195"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2696187259855355195"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2696187259855355195"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2696187259855355195"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8143615559233836656"},"published":{"$t":"2009-11-30T23:35:01.466Z"},"updated":{"$t":"2009-11-30T23:35:01.475Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:35:01.466Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"timeline_records.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8143615559233836656"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/timeline_records.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8143615559233836656"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8143615559233836656"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8143615559233836656"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8143615559233836656"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6356202317361674068"},"published":{"$t":"2009-11-30T23:34:48.086Z"},"updated":{"$t":"2009-11-30T23:34:48.101Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:34:48.086Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"timeline_panel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6356202317361674068"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/timeline_panel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6356202317361674068"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6356202317361674068"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6356202317361674068"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6356202317361674068"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3153137115470730554"},"published":{"$t":"2009-11-30T23:34:16.656Z"},"updated":{"$t":"2009-11-30T23:34:16.666Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:34:16.656Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"profiling_search.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3153137115470730554"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/profiling_search.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3153137115470730554"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3153137115470730554"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3153137115470730554"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3153137115470730554"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6019113936339913118"},"published":{"$t":"2009-11-30T23:34:03.749Z"},"updated":{"$t":"2009-11-30T23:34:03.760Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:34:03.749Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"profiling_cpu_1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6019113936339913118"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/profiling_cpu_1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6019113936339913118"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6019113936339913118"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6019113936339913118"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6019113936339913118"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6328866887432767372"},"published":{"$t":"2009-11-30T23:33:50.075Z"},"updated":{"$t":"2009-11-30T23:33:50.084Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:33:50.075Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"profiles_panel_1.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6328866887432767372"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/profiles_panel_1.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6328866887432767372"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6328866887432767372"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6328866887432767372"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6328866887432767372"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6145980418264381985"},"published":{"$t":"2009-11-30T23:33:35.387Z"},"updated":{"$t":"2009-11-30T23:33:35.453Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:33:35.387Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"page_menu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6145980418264381985"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/page_menu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6145980418264381985"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6145980418264381985"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6145980418264381985"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6145980418264381985"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5691481773901649973"},"published":{"$t":"2009-11-30T23:33:21.144Z"},"updated":{"$t":"2009-11-30T23:33:21.155Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:33:21.144Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"heap_snapshot_drill_down.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5691481773901649973"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_drill_down.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5691481773901649973"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5691481773901649973"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5691481773901649973"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5691481773901649973"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3272095544258091980"},"published":{"$t":"2009-11-30T23:33:07.681Z"},"updated":{"$t":"2009-11-30T23:33:07.717Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:33:07.681Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"heap_snapshot_compare.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3272095544258091980"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_compare.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3272095544258091980"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3272095544258091980"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3272095544258091980"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3272095544258091980"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4447423266719044243"},"published":{"$t":"2009-11-30T23:32:53.164Z"},"updated":{"$t":"2009-11-30T23:32:53.188Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:32:53.164Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"heap_snapshot.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4447423266719044243"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/heap_snapshot.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4447423266719044243"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4447423266719044243"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4447423266719044243"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4447423266719044243"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1944597533423900697"},"published":{"$t":"2009-11-30T23:21:53.813Z"},"updated":{"$t":"2009-11-30T23:21:53.820Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:21:53.813Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_style_edit.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1944597533423900697"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_style_edit.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1944597533423900697"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1944597533423900697"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1944597533423900697"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1944597533423900697"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6012743504880087519"},"published":{"$t":"2009-11-30T23:21:38.453Z"},"updated":{"$t":"2009-11-30T23:21:38.462Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:21:38.453Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_style_checkboxes.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6012743504880087519"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_style_checkboxes.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6012743504880087519"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6012743504880087519"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6012743504880087519"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6012743504880087519"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7485733106175623618"},"published":{"$t":"2009-11-30T23:21:23.445Z"},"updated":{"$t":"2009-11-30T23:21:23.453Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:21:23.445Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_search.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7485733106175623618"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_search.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7485733106175623618"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7485733106175623618"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7485733106175623618"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7485733106175623618"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4954937662636959882"},"published":{"$t":"2009-11-30T23:21:08.979Z"},"updated":{"$t":"2009-11-30T23:21:08.988Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:21:08.979Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_properties_paner.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4954937662636959882"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_properties_paner.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4954937662636959882"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4954937662636959882"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4954937662636959882"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4954937662636959882"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4764689561300249646"},"published":{"$t":"2009-11-30T23:20:53.657Z"},"updated":{"$t":"2009-11-30T23:20:53.666Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:20:53.657Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_panel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4764689561300249646"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_panel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4764689561300249646"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4764689561300249646"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4764689561300249646"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4764689561300249646"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6001361498144911683"},"published":{"$t":"2009-11-30T23:20:40.771Z"},"updated":{"$t":"2009-11-30T23:20:40.787Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:20:40.771Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_p.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6001361498144911683"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_p.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6001361498144911683"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6001361498144911683"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6001361498144911683"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6001361498144911683"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1381779482956674013"},"published":{"$t":"2009-11-30T23:20:27.677Z"},"updated":{"$t":"2009-11-30T23:20:27.693Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:20:27.677Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_metrics.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1381779482956674013"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_metrics.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1381779482956674013"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1381779482956674013"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1381779482956674013"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1381779482956674013"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4628263554295590157"},"published":{"$t":"2009-11-30T23:20:13.674Z"},"updated":{"$t":"2009-11-30T23:20:13.683Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:20:13.674Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_hover.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4628263554295590157"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_hover.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4628263554295590157"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4628263554295590157"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4628263554295590157"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4628263554295590157"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4768622274236207998"},"published":{"$t":"2009-11-30T23:20:01.351Z"},"updated":{"$t":"2009-11-30T23:20:01.391Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:20:01.351Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_event_listeners_gear.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4768622274236207998"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_event_listeners_gear.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4768622274236207998"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4768622274236207998"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4768622274236207998"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4768622274236207998"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7184730858817786393"},"published":{"$t":"2009-11-30T23:19:48.498Z"},"updated":{"$t":"2009-11-30T23:19:48.508Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:19:48.498Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"elements_css_syntax_highlighting.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7184730858817786393"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/elements_css_syntax_highlighting.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7184730858817786393"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7184730858817786393"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7184730858817786393"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7184730858817786393"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3364063939007802569"},"published":{"$t":"2009-11-30T23:19:14.323Z"},"updated":{"$t":"2009-11-30T23:19:14.333Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:19:14.323Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"dev_tools_window_bottom.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3364063939007802569"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_bottom.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3364063939007802569"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3364063939007802569"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3364063939007802569"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3364063939007802569"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1854843855290238706"},"published":{"$t":"2009-11-30T23:19:01.307Z"},"updated":{"$t":"2009-11-30T23:19:01.326Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T23:19:01.307Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"dev_tools_window_top.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1854843855290238706"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_top.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1854843855290238706"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1854843855290238706"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1854843855290238706"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1854843855290238706"}],"author":[{"name":{"$t":"Pavel Feldman"},"email":{"$t":"pfeldman@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1090709744472692100"},"published":{"$t":"2009-11-30T20:15:35.579Z"},"updated":{"$t":"2009-11-30T20:15:35.590Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T20:15:35.579Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"scripts_panel_2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1090709744472692100"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/scripts_panel_2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1090709744472692100"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1090709744472692100"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1090709744472692100"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1090709744472692100"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3375005751534454535"},"published":{"$t":"2009-11-30T16:59:01.328Z"},"updated":{"$t":"2009-11-30T16:59:01.344Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T16:59:01.328Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"scripts_breakpoints_2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3375005751534454535"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints_2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3375005751534454535"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3375005751534454535"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3375005751534454535"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3375005751534454535"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/401486750311208796"},"published":{"$t":"2009-11-30T16:19:54.033Z"},"updated":{"$t":"2009-11-30T16:19:54.043Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T16:19:54.033Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"scripts_paused.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/401486750311208796"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/scripts_paused.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/401486750311208796"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/401486750311208796"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/401486750311208796"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/401486750311208796"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8765193548581679320"},"published":{"$t":"2009-11-30T16:19:26.248Z"},"updated":{"$t":"2009-11-30T16:19:26.263Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T16:19:26.248Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"scripts_breakpoints.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8765193548581679320"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8765193548581679320"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8765193548581679320"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8765193548581679320"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8765193548581679320"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6901614190096230529"},"published":{"$t":"2009-11-30T16:18:55.397Z"},"updated":{"$t":"2009-11-30T16:18:55.409Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T16:18:55.397Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"scripts_panel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6901614190096230529"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/scripts_panel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6901614190096230529"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6901614190096230529"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6901614190096230529"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6901614190096230529"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5662123336553032886"},"published":{"$t":"2009-11-30T12:21:38.082Z"},"updated":{"$t":"2009-11-30T12:21:38.090Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:21:38.082Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_enable_window.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5662123336553032886"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_enable_window.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5662123336553032886"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5662123336553032886"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5662123336553032886"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5662123336553032886"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2563905536893781496"},"published":{"$t":"2009-11-30T12:20:10.205Z"},"updated":{"$t":"2009-11-30T12:20:10.213Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:20:10.205Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_panel.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2563905536893781496"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_panel.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2563905536893781496"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2563905536893781496"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2563905536893781496"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2563905536893781496"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2328598316327332116"},"published":{"$t":"2009-11-30T12:19:32.561Z"},"updated":{"$t":"2009-11-30T12:19:32.571Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:19:32.561Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_sort_by.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2328598316327332116"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_sort_by.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2328598316327332116"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2328598316327332116"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2328598316327332116"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2328598316327332116"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1969347013731175156"},"published":{"$t":"2009-11-30T12:19:00.588Z"},"updated":{"$t":"2009-11-30T12:19:00.597Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:19:00.588Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_size.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1969347013731175156"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_size.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1969347013731175156"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1969347013731175156"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1969347013731175156"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1969347013731175156"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7538361713130223792"},"published":{"$t":"2009-11-30T12:18:30.613Z"},"updated":{"$t":"2009-11-30T12:18:30.632Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:18:30.613Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_click_sidebar.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7538361713130223792"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_click_sidebar.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7538361713130223792"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7538361713130223792"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7538361713130223792"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7538361713130223792"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4299481919701071329"},"published":{"$t":"2009-11-30T12:18:06.767Z"},"updated":{"$t":"2009-11-30T12:18:06.776Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-30T12:18:06.767Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resources_drag_drop.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4299481919701071329"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5927185027152397695"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/google-chrome-developer-tools-tutorial/resources_drag_drop.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4299481919701071329"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4299481919701071329"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4299481919701071329"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4299481919701071329"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3636192457870462231"},"published":{"$t":"2009-11-27T15:42:46.657Z"},"updated":{"$t":"2009-11-27T15:42:46.657Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-27T15:42:46.657Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3636192457870462231"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3636192457870462231"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3636192457870462231"}],"author":[{"name":{"$t":"Dan Erat"},"email":{"$t":"derat@chromium.org"}}],"sites$revision":{"$t":"1"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Toshiba Satellite A205-S5000"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"memory card reader doesn't work; acted laggy until sleep/resume was done"},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://www.amazon.com/Toshiba-Satellite-A205-S5000-Celeron-1-86GHz/dp/B001NJOIC8/"}]},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/962298827594997488"},"published":{"$t":"2009-11-24T18:15:12.826Z"},"updated":{"$t":"2009-11-25T18:12:19.914Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-25T18:12:19.914Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/962298827594997488"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/962298827594997488"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/962298827594997488"}],"author":[{}],"sites$revision":{"$t":"4"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Toshiba mini NB200/5 10.1 inch Netbook w/ fullsize keyboard"},{"index":"B","name":"Wifi","$t":"OK"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":"Intel GMA 950 graphics and 802.11b/g (Atheros LAN)"},{"index":"G","name":"Contact","$t":"http://laptops.toshiba.com/mini"},{"index":"H","name":"Buy Link","$t":"http://www.toshibadirect.com/td/b2c/laptops.to?catagory\u003dNetbook"}]},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5289623959299349821"},"published":{"$t":"2009-11-23T08:11:10.819Z"},"updated":{"$t":"2009-11-25T18:11:06.186Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-25T18:11:06.186Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5289623959299349821"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5289623959299349821"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5289623959299349821"}],"author":[{"email":{"$t":"gauravsh@chromium.org"}}],"sites$revision":{"$t":"3"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Asus Eee PC 1000/w SSD"},{"index":"B","name":"Wifi","$t":""},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":""},{"index":"G","name":"Contact","$t":""},{"index":"H","name":"Buy Link","$t":"http://www.amazon.com/10-Inch-Netbook-Processor-Storage-Battery/dp/B001BY97IU"}]},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/843116970643738496"},"published":{"$t":"2009-11-20T18:39:12.788Z"},"updated":{"$t":"2009-11-25T18:10:00.739Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-25T18:10:00.738Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#listitem","label":"listitem"}],"title":{"$t":""},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/843116970643738496"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/843116970643738496"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/843116970643738496"}],"author":[{}],"sites$revision":{"$t":"5"},"gs$field":[{"index":"A","name":"Brand \u0026 Model Number","$t":"Diskless Workstations LTSP Term 1520"},{"index":"B","name":"Wifi","$t":"N/A"},{"index":"C","name":"Ethernet","$t":"on"},{"index":"D","name":"Trackpad","$t":"on"},{"index":"E","name":"Suspend/Resume","$t":"on"},{"index":"F","name":"Comments \u0026 Caveats","$t":""},{"index":"G","name":"Contact","$t":"info@DisklessWorkstations.com "},{"index":"H","name":"Buy Link","$t":"http://www.DisklessWorkstations.com/cgi-bin/prod/200118.html"}]},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8202983362022695834"},"published":{"$t":"2009-11-24T08:30:51.665Z"},"updated":{"$t":"2009-11-24T08:34:43.822Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-24T08:34:43.814Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"payload.txt"},"summary":{},"content":{"type":"text/plain","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8202983362022695834"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/380426731291280413"},{"rel":"alternate","type":"text/plain","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/extensions/payload.txt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8202983362022695834"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8202983362022695834"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8202983362022695834"},{"rel":"edit-media","type":"text/plain","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8202983362022695834"}],"author":[{"name":{"$t":"Aaron Boodman"},"email":{"$t":"aa@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/441128063238778077"},"published":{"$t":"2009-11-24T08:31:07.422Z"},"updated":{"$t":"2009-11-24T08:31:07.430Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-24T08:31:07.422Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"img.txt"},"summary":{},"content":{"type":"text/plain","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/441128063238778077"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/380426731291280413"},{"rel":"alternate","type":"text/plain","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/extensions/img.txt"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/441128063238778077"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/441128063238778077"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/441128063238778077"},{"rel":"edit-media","type":"text/plain","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/441128063238778077"}],"author":[{"name":{"$t":"Aaron Boodman"},"email":{"$t":"aa@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/356474599699298797"},"published":{"$t":"2009-11-24T01:32:25.554Z"},"updated":{"$t":"2009-11-24T01:32:25.562Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-24T01:32:25.554Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ChromeOS Compatibility list-20091121-A.xlsx"},"summary":{},"content":{"type":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/356474599699298797"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"alternate","type":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/getting-dev-hardware/dev-hardware-list/ChromeOSCompatibilitylist-20091121-A.xlsx"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/356474599699298797"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/356474599699298797"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/356474599699298797"},{"rel":"edit-media","type":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/356474599699298797"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2705394333619112163"},"published":{"$t":"2009-11-20T16:55:33.119Z"},"updated":{"$t":"2009-11-20T16:55:33.126Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-20T16:55:33.119Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"icon-checkmark.gif"},"summary":{},"content":{"type":"image/gif","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2705394333619112163"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7582987878577786924"},{"rel":"alternate","type":"image/gif","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2705394333619112163"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2705394333619112163"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2705394333619112163"},{"rel":"edit-media","type":"image/gif","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2705394333619112163"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3470919327854062754"},"published":{"$t":"2009-11-19T17:50:06.176Z"},"updated":{"$t":"2009-11-19T17:50:06.187Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:50:06.176Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome-24.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3470919327854062754"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1201972082741324563"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-projects/chrome-24.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3470919327854062754"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3470919327854062754"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3470919327854062754"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3470919327854062754"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/519675575235967181"},"published":{"$t":"2009-11-19T17:32:59.388Z"},"updated":{"$t":"2009-11-19T17:32:59.399Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:32:59.388Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Concept2.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/519675575235967181"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/Concept2.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/519675575235967181"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/519675575235967181"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/519675575235967181"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/519675575235967181"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4727592155526521224"},"published":{"$t":"2009-11-19T17:20:56.532Z"},"updated":{"$t":"2009-11-19T17:20:56.545Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:20:56.532Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"sdres_0002_Panels.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4727592155526521224"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/sdres_0002_Panels.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4727592155526521224"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4727592155526521224"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4727592155526521224"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4727592155526521224"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8595429516029475474"},"published":{"$t":"2009-11-19T17:20:37.959Z"},"updated":{"$t":"2009-11-19T17:20:37.968Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:20:37.959Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"sdres_0001_App-Menu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8595429516029475474"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/sdres_0001_App-Menu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8595429516029475474"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8595429516029475474"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8595429516029475474"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8595429516029475474"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2685499829316549992"},"published":{"$t":"2009-11-19T17:20:23.839Z"},"updated":{"$t":"2009-11-19T17:20:23.854Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:20:23.839Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"sdres_0000_Basic.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2685499829316549992"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/sdres_0000_Basic.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2685499829316549992"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2685499829316549992"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2685499829316549992"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2685499829316549992"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1661493315973792875"},"published":{"$t":"2009-11-19T17:18:50.909Z"},"updated":{"$t":"2009-11-19T17:18:50.920Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:18:50.909Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Concept.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1661493315973792875"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/Concept.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1661493315973792875"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1661493315973792875"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1661493315973792875"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1661493315973792875"}],"author":[{"email":{"$t":"alcor@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7376067574621745019"},"published":{"$t":"2009-11-19T17:04:24.986Z"},"updated":{"$t":"2009-11-19T17:04:25.289Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:24.986Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"nav.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7376067574621745019"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/navpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7376067574621745019"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7376067574621745019"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7376067574621745019"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7376067574621745019"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7980020492707942412"},"published":{"$t":"2009-11-19T17:04:23.585Z"},"updated":{"$t":"2009-11-19T17:04:23.867Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:23.585Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"compact_nav.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7980020492707942412"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/compact_navpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7980020492707942412"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7980020492707942412"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7980020492707942412"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7980020492707942412"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7489121715828429060"},"published":{"$t":"2009-11-19T17:04:22.372Z"},"updated":{"$t":"2009-11-19T17:04:22.525Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:22.372Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"side_nav.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7489121715828429060"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597852870855786417"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/window-ui/side_navpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7489121715828429060"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7489121715828429060"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7489121715828429060"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7489121715828429060"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1790175947849339220"},"published":{"$t":"2009-11-19T17:04:17.814Z"},"updated":{"$t":"2009-11-19T17:04:18.115Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:17.814Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tab_strips.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1790175947849339220"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3892058624054432172"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/tab-ui/tab_stripspng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1790175947849339220"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1790175947849339220"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1790175947849339220"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1790175947849339220"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2343469125758015764"},"published":{"$t":"2009-11-19T17:04:15.179Z"},"updated":{"$t":"2009-11-19T17:04:15.468Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:15.179Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Panels.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2343469125758015764"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/panelspng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2343469125758015764"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2343469125758015764"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2343469125758015764"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2343469125758015764"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8091400329780752482"},"published":{"$t":"2009-11-19T17:04:13.788Z"},"updated":{"$t":"2009-11-19T17:04:14.152Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:13.788Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"WindowStyles.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8091400329780752482"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7914512944038662870"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/panels/windowstylespng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8091400329780752482"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8091400329780752482"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8091400329780752482"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8091400329780752482"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6766707542874166123"},"published":{"$t":"2009-11-19T17:04:11.234Z"},"updated":{"$t":"2009-11-19T17:04:11.507Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:11.234Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"app.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6766707542874166123"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5131015040046295044"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/access-points/apppng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6766707542874166123"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6766707542874166123"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6766707542874166123"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6766707542874166123"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/319929047560807119"},"published":{"$t":"2009-11-19T17:04:08.959Z"},"updated":{"$t":"2009-11-19T17:04:09.090Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:08.959Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"video_placeholder.PNG"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/319929047560807119"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/video_placeholderpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/319929047560807119"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/319929047560807119"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/319929047560807119"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/319929047560807119"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3091105593218702705"},"published":{"$t":"2009-11-19T17:04:07.176Z"},"updated":{"$t":"2009-11-19T17:04:07.471Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:07.176Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"a.jpg"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3091105593218702705"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/ajpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3091105593218702705"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3091105593218702705"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3091105593218702705"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3091105593218702705"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6055461658145459067"},"published":{"$t":"2009-11-19T17:04:05.963Z"},"updated":{"$t":"2009-11-19T17:04:06.225Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:05.963Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"b.jpg"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6055461658145459067"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/bjpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6055461658145459067"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6055461658145459067"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6055461658145459067"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6055461658145459067"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1041285373931919335"},"published":{"$t":"2009-11-19T17:04:04.802Z"},"updated":{"$t":"2009-11-19T17:04:04.921Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:04.802Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"c.jpg"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1041285373931919335"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/cjpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1041285373931919335"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1041285373931919335"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1041285373931919335"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1041285373931919335"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1090161659651704689"},"published":{"$t":"2009-11-19T17:04:03.599Z"},"updated":{"$t":"2009-11-19T17:04:03.785Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:04:03.599Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"d.jpg"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1090161659651704689"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5368512348015071375"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/user-experience/djpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1090161659651704689"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1090161659651704689"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1090161659651704689"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1090161659651704689"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/760957815494596630"},"published":{"$t":"2009-11-19T17:03:44.944Z"},"updated":{"$t":"2009-11-19T17:03:45.205Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:44.944Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"diag2.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/760957815494596630"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2748326519206818094"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/verified-boot/diag2png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/760957815494596630"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/760957815494596630"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/760957815494596630"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/760957815494596630"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5881663908783944699"},"published":{"$t":"2009-11-19T17:03:35.778Z"},"updated":{"$t":"2009-11-19T17:03:35.944Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:35.778Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"repo-arch.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5881663908783944699"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1241086401598414282"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/source-code-management/repo-archpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5881663908783944699"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5881663908783944699"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5881663908783944699"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5881663908783944699"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8515620245720647653"},"published":{"$t":"2009-11-19T17:03:32.480Z"},"updated":{"$t":"2009-11-19T17:03:32.610Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:32.480Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8515620245720647653"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6185759639537789873"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/software-architecture/chromepng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8515620245720647653"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8515620245720647653"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8515620245720647653"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8515620245720647653"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6822101175278664305"},"published":{"$t":"2009-11-19T17:03:31.249Z"},"updated":{"$t":"2009-11-19T17:03:31.434Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:31.249Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"firmware.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6822101175278664305"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6185759639537789873"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/software-architecture/firmwarepng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6822101175278664305"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6822101175278664305"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6822101175278664305"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6822101175278664305"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8532876140033217798"},"published":{"$t":"2009-11-19T17:03:30.170Z"},"updated":{"$t":"2009-11-19T17:03:30.340Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:30.170Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"overview.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8532876140033217798"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6185759639537789873"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/software-architecture/overviewpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8532876140033217798"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8532876140033217798"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8532876140033217798"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8532876140033217798"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6324460493402788170"},"published":{"$t":"2009-11-19T17:03:28.814Z"},"updated":{"$t":"2009-11-19T17:03:29.176Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:28.814Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"system.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6324460493402788170"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6185759639537789873"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/software-architecture/systempng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6324460493402788170"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6324460493402788170"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6324460493402788170"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6324460493402788170"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1719700996074423988"},"published":{"$t":"2009-11-19T17:03:23.787Z"},"updated":{"$t":"2009-11-19T17:03:24.117Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:23.787Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Disk Encryption Benchmarks- ecryptfs%2Bext3 1008HA.pdf"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1719700996074423988"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8754615608142383673"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--ecryptfs2bext3-1008hapdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1719700996074423988"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1719700996074423988"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1719700996074423988"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1719700996074423988"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6961460948296805717"},"published":{"$t":"2009-11-19T17:03:21.509Z"},"updated":{"$t":"2009-11-19T17:03:21.979Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:21.509Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Disk Encryption Benchmarks- No Encryption.pdf"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6961460948296805717"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8754615608142383673"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--no-encryptionpdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6961460948296805717"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6961460948296805717"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6961460948296805717"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6961460948296805717"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6764159366853774550"},"published":{"$t":"2009-11-19T17:03:19.152Z"},"updated":{"$t":"2009-11-19T17:03:19.518Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:19.152Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Disk Encryption on Chrome OS- dmcrypt%2Bext4%2B1008HA.pdf"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6764159366853774550"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8754615608142383673"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-on-chrome-os--dmcrypt2bext42b1008hapdf"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6764159366853774550"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6764159366853774550"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6764159366853774550"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6764159366853774550"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8133336589968751358"},"published":{"$t":"2009-11-19T17:03:14.696Z"},"updated":{"$t":"2009-11-19T17:03:15.034Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:14.696Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resize_partition.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8133336589968751358"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2056377352324839431"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/partition-resizing/resize_partitionpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8133336589968751358"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8133336589968751358"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8133336589968751358"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8133336589968751358"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9183891994239619993"},"published":{"$t":"2009-11-19T17:03:11.546Z"},"updated":{"$t":"2009-11-19T17:03:11.714Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:11.546Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"eeprom-map.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9183891994239619993"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4723945718499501890"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-mappng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9183891994239619993"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9183891994239619993"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9183891994239619993"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9183891994239619993"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7343600623515782007"},"published":{"$t":"2009-11-19T17:03:10.224Z"},"updated":{"$t":"2009-11-19T17:03:10.511Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:10.224Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flowchart1.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7343600623515782007"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4723945718499501890"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/flowchart1png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7343600623515782007"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7343600623515782007"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7343600623515782007"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7343600623515782007"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3464579231853384084"},"published":{"$t":"2009-11-19T17:03:07.489Z"},"updated":{"$t":"2009-11-19T17:03:07.850Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:07.489Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"bootloader_flow.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3464579231853384084"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3464579231853384084"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3464579231853384084"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3464579231853384084"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3464579231853384084"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4692705195701349262"},"published":{"$t":"2009-11-19T17:03:06.656Z"},"updated":{"$t":"2009-11-19T17:03:06.816Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:06.656Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"firmware_updater.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4692705195701349262"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4692705195701349262"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4692705195701349262"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4692705195701349262"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4692705195701349262"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7983058759270987590"},"published":{"$t":"2009-11-19T17:03:05.502Z"},"updated":{"$t":"2009-11-19T17:03:05.721Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:05.502Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"partition_extra_bits.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7983058759270987590"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7983058759270987590"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7983058759270987590"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7983058759270987590"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7983058759270987590"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9169142280635601187"},"published":{"$t":"2009-11-19T17:03:04.242Z"},"updated":{"$t":"2009-11-19T17:03:04.594Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:03:04.242Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"recovery_image.png"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9169142280635601187"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3657132930477363515"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9169142280635601187"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9169142280635601187"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9169142280635601187"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9169142280635601187"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/696321153972069675"},"published":{"$t":"2009-11-19T17:02:48.427Z"},"updated":{"$t":"2009-11-19T17:02:48.772Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-19T17:02:48.427Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"comp2.jpg"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/696321153972069675"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/593897542665142458"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/chromium-os/comp2jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/696321153972069675"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/696321153972069675"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/696321153972069675"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/696321153972069675"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/692377068607392811"},"published":{"$t":"2009-11-17T20:39:15.419Z"},"updated":{"$t":"2009-11-17T20:39:15.439Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-17T20:39:15.419Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"soarjOjSeS5hoFYvjtAnxCg.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/692377068607392811"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6936503372791019790"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/692377068607392811"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/692377068607392811"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/692377068607392811"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/692377068607392811"}],"author":[{"name":{"$t":"Kara Moscoe"},"email":{"$t":"kmoscoe@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},"published":{"$t":"2009-11-11T19:36:15.241Z"},"updated":{"$t":"2009-11-12T17:27:15.426Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-12T17:27:15.425Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"SPDY data"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv\u003eOverall network efficiency of SPDY compared to HTTP.  A lot of the speed benefits of flip come from simply using the network more efficiently.  Using fewer connections means fewer packets.  Using more compression, means fewer bytes.  Due to multiplexing, SPDY turns HTTPs many virtually half-duplex channels into a single, full duplex channel.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen used loading our top-25 web pages, SPDY sent 40% fewer packets and 15% fewer bytes than the same pages loaded over HTTP.\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-bytes.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1257969878296/spdy/spdy-data/spdy-bytes.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHere is a graph of SPDY and HTTP, measuring the top-25 web pages as the packet loss rate varies.  Packet loss is an area ripe for more research; generally we believe global worldwide packet loss is ~1 to 1.5%.  Some areas are better, and some areas are worse.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-pktloss.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1257971273065/spdy/spdy-data/spdy-pktloss.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003eHere is a graph of SPDY and HTTP average page load times as the RTT (round-trip time) varies.  RTT can be as low as 5-10ms for high speed networks, or 500ms for some mobile or distant networks.  Satellite links, known for their high throughput, still have high latency, and can have RTTs of 150ms or more.  Generally, a 20ms RTT is great, 50ms RTT is not too shabby, and a 115ms RTT is about average.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-rtt2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1257971351763/spdy/spdy-data/spdy-rtt2.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5048080902362104097"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/142284858767509005"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"}],"author":[{}],"sites$pageName":{"$t":"spdy-data"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7548916159477434555"},"published":{"$t":"2009-11-11T22:18:20.510Z"},"updated":{"$t":"2009-11-11T22:18:20.517Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T22:18:20.510Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"spdy_design_and_features_layers.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7548916159477434555"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6936503372791019790"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-whitepaper/spdy_design_and_features_layers.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7548916159477434555"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7548916159477434555"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7548916159477434555"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7548916159477434555"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6707792333767964309"},"published":{"$t":"2009-11-11T20:29:11.750Z"},"updated":{"$t":"2009-11-11T20:29:11.763Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T20:29:11.750Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"spdy-rtt2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6707792333767964309"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-rtt2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6707792333767964309"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6707792333767964309"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6707792333767964309"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6707792333767964309"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDkpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4569561575613812375"},"published":{"$t":"2009-11-11T19:46:39.266Z"},"updated":{"$t":"2009-11-11T20:28:52.978Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T20:28:52.973Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"spdy-rtt.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4569561575613812375"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-rtt.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4569561575613812375"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4569561575613812375"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4569561575613812375"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4569561575613812375"}],"author":[{}],"sites$revision":{"$t":"5"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6413185194312042327"},"published":{"$t":"2009-11-11T19:43:34.011Z"},"updated":{"$t":"2009-11-11T20:27:53.065Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T20:27:53.059Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"spdy-pktloss.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6413185194312042327"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-pktloss.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6413185194312042327"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6413185194312042327"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6413185194312042327"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6413185194312042327"}],"author":[{}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4453271499458219271"},"published":{"$t":"2009-11-11T19:40:56.199Z"},"updated":{"$t":"2009-11-11T20:04:38.296Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T20:04:38.291Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"spdy-bytes.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4453271499458219271"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/142284858767509005"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/spdy/spdy-data/spdy-bytes.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4453271499458219271"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4453271499458219271"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4453271499458219271"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4453271499458219271"}],"author":[{}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5918751042011977830"},"published":{"$t":"2009-10-20T19:26:22.953Z"},"updated":{"$t":"2009-11-11T18:23:34.975Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-11T18:23:34.975Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Network Speed Experiments"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);line-height:20px\"\u003eWe're currently experimenting with improving the way clients and servers communicate.  Our primary goal is to reduce page load time for end users.  This page contains information about some of those experiments.\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eNotes\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eThe web has evolved almost entirely out of experiments.  The experiments that worked have stuck.  For example, did you know that while the web globally in use by 1994, yet HTTP as a protocol was not formally standardized until 1996?  Chromium network experiments are intended to follow a similar pattern.  Start with designs that make sense, measure prototypes in the lab, measure prototypes in the real world, and iterate.  Only if the experiment works will we continue with that work.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eOur experiments will always be open source.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eWe will always work with standards bodies where appropriate.\u003c/li\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003eAll experiments are designed to benefit the web at large, never for a single vendor or site.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eExperiments\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli style\u003d\"list-style-position:outside;list-style-type:square\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/spdy\"\u003eSPDY - a low-latency protocol for the web.\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/network-speed-experiments"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5918751042011977830"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5918751042011977830"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5918751042011977830"}],"author":[{}],"sites$pageName":{"$t":"network-speed-experiments"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5669664026333274943"},"published":{"$t":"2009-11-05T18:01:00.493Z"},"updated":{"$t":"2009-11-05T18:01:00.505Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-05T18:01:00.493Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"feed-icon16x16.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5669664026333274943"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/feed-icon16x16.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5669664026333274943"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5669664026333274943"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5669664026333274943"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5669664026333274943"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3323165644441150740"},"published":{"$t":"2009-11-05T17:55:28.460Z"},"updated":{"$t":"2009-11-05T17:55:28.472Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-11-05T17:55:28.460Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"page_menu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3323165644441150740"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/940723966058185127"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/devtools/page_menu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3323165644441150740"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3323165644441150740"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3323165644441150740"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3323165644441150740"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3000393748807839342"},"published":{"$t":"2009-10-20T19:27:49.684Z"},"updated":{"$t":"2009-10-20T20:14:05.136Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-10-20T20:14:05.136Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"X-Subresources"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"color:rgb(68,68,68);line-height:20px\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Andrew-Oates-aoates-google.com-Bryan-McQuade-bmcquade-google.com-Mike-Belshe-mbelshe-google.com-\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal;line-height:normal\"\u003eAndrew Oates \u0026lt;\u003ca href\u003d\"mailto:aoates@google.com\"\u003e\u003cfont color\u003d\"#444444\"\u003eaoates@google.com\u003c/font\u003e\u003c/a\u003e\u0026gt;, Bryan McQuade \u0026lt;\u003ca href\u003d\"mailto:bmcquade@google.com\"\u003e\u003cfont color\u003d\"#444444\"\u003ebmcquade@google.com\u003c/font\u003e\u003c/a\u003e\u0026gt;, Mike Belshe \u0026lt;\u003ca href\u003d\"mailto:mbelshe@google.com\"\u003e\u003cfont color\u003d\"#444444\"\u003embelshe@google.com\u003c/font\u003e\u003c/a\u003e\u0026gt;\u003c/span\u003e\u003c/font\u003e\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-Problem\" /\u003e\u003cfont size\u003d\"3\"\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal;line-height:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003eThe Problem\u003c/h2\u003eA typical modern webpage fetches many external resources.  www.cnn.com, for example, loads 150+ external resources on a fresh page load. The browser has no way of knowing which resources will be required for a page until it reaches the tags that reference them, or until a script sends off the request dynamically.  The more time it takes for the browser to discover that it will need a resource, the more time it will take to download the entire page.\u003c/span\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003eIn older browsers, this problem was exacerbated by the fact that the browsers would block when downloading external JavaScript resources.  Blocking on JavaScript downloads delayed the time to discover additional subresources needed in the page.  Recent browsers (IE8+, Safari 4+, Chrome2+, FF3.5+) can download scripts in parallel, which mitigates this particular part of the problem.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003eWe've also seen traces from real world web pages, where the top of the page is loaded with several kilobytes (even after compression) of inline CSS and JavaScript.  If you had 20KB of such information at the top of the page, and downloaded the page over a slow network (such as a 256Kbps cell phone), it could request those resources as much as 600ms earlier than it otherwise could!  Now, the observant reader may notice that if the network is fully utilized there is no point in adding additional resources to the download, as they will compete for bandwidth and slow each resource down.  However, such networks usually have large RTT in addition to low bandwidth.  The time to get requests to the server can be 200+ms.  Although the bandwidth may not be immediately available, getting the RTTs started in parallel provides an advantage.  Further, servers that use this experiment can intelligently schedule the responses (potentially even across connections) to avoid such contention issues.\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003eEvidence suggests that we can improve page load times for some sites if the server can inform the client of subresources earlier than it does today.  \u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Challenges\" /\u003e\u003cfont color\u003d\"#444444\"\u003eChallenges\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eWhen downloading additional resources sooner, we need to ensure that the downloading of those resources does not defer the downloading of primary content.  For example, the browser may be critically blocked on the downloading of the main HTML or the main CSS file.  If we inform the client of low-priority images earlier, we should make sure that downloading them will not delay the higher priority resources.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-Experiment\" /\u003e\u003cfont color\u003d\"#444444\"\u003eThe Experiment\u003c/font\u003e\u003c/h2\u003e\u003ch1\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003cfont color\u003d\"#444444\"\u003e\u003ca name\u003d\"TOC-The-Solution\" style\u003d\"text-decoration:underline\" /\u003e\u003c/font\u003e\u003c/h1\u003e\u003cfont color\u003d\"#444444\"\u003eIf browser's knew what subresources they would need for a given page, they could kick off the requests at the start of the page load, and wouldn't have to block on fetching javascript files (only on execution).  This experiment proposes a new HTTP header, \"X-Subresources\" which can inform the client of subresources that may be needed when downloading a resource much earlier than when the client would otherwise discover the resource.  The browser can optionally use this header to download content sooner than it otherwise would have done so.\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cspan style\u003d\"line-height:20px\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Other-Solutions\" /\u003eOther Solutions\u003c/h2\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cspan style\u003d\"line-height:20px\"\u003eMany alternative approaches to this problem exist.  One simple one would be to consider putting this information into the HTML content (perhaps as LINK headers) as opposed to putting it into the HTTP headers.  There are advantages to this approach, because having the server know about subresources for a given content page can be difficult to discover or manage.  This approach would inform the browser of the subresources marginally later, but probably not significantly later.  We haven't rejected this approach, and it may be a good idea to support as well.  The reason we chose the HTTP header is because we'd like the origin server to be able to discover these optimizations on-the-fly without intervention from the content author.  Content authors often do not know about the \"tricks\" to optimally load a web page, and giving servers the tools so that they can perform these changes automatically, we hope this feature is more useful.  We could, of course, have servers modify the content being issued to the client on-the-fly, but this can be more difficult to do efficiently.  All in all, we hope the solution we've chosen is a good starting point for this experiment.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Informal-Specification\" /\u003e\u003cfont color\u003d\"#444444\"\u003eInformal Specification\u003c/font\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;color:rgb(68,68,68);font-weight:bold\"\u003eClient-side\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eIf a client wishes to receive subresource notification headers, it should include a X-subresource header on the appropriate requests:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e   \u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e   X-Subresource: enabled\u003c/font\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eWhen a client receives a response with the X-subresource header, it should decode the value, and generate requests for the URIs listed in the header.  If multiple subresources are listed, it should fetch them in the order that is listed.\u003cbr /\u003e\u003c/font\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Server-side\" /\u003e\u003cfont color\u003d\"#444444\"\u003eServer-side\u003c/font\u003e\u003c/h3\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eWhen a server receives a request with an appropriate X-subresource header, it may generate a list of subresources to be used by the requested page. It could do this by scraping the HTML, consulting a database, etc. It should then return this list as a X-subresource header to the client as part of the HTTP response header block.\u003cbr /\u003e\u003cbr /\u003eThe server must not use X-Subresource headers for resources which are not cacheable, or whose lifetime might expire before the end of the current page load.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Header-Format\" /\u003eHeader Format\u003c/h4\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eThe X-subresource header has the following format:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003eheader-value ::\u003d type ; resource [; type; resource]\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003etype ::\u003d text\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"color:rgb(68,68,68)\"\u003eresource ::\u003d URI \u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003eEach resource consists of a type and a URI.   The type is the mime-type of the URI, such as \"text/html\", \"image/gif\", etc.  The URI is a standard HTTP URI.\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003eFor example:\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont color\u003d\"#444444\"\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e   X-subresource: text/css; http://www.foo.com/styles/foo.css; image/gif;/images/img1.gif\u003cbr /\u003e\u003c/font\u003e\u003c/font\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/x-subresources"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3000393748807839342"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3000393748807839342"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3000393748807839342"}],"author":[{}],"sites$pageName":{"$t":"x-subresources"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5153557688383760058"},"published":{"$t":"2009-08-27T21:18:21.551Z"},"updated":{"$t":"2009-10-19T20:45:51.852Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-10-19T20:45:51.852Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Desktop Notifications"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cb\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-weight:normal\"\u003eSee also: \u003c/span\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/desktop-notifications/api-specification\"\u003eAPI Specification\u003c/a\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e for notifications\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003eDesign for desktop notifications\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eThe Desktop Notifications API allows script to request a small toast to appear on the desktop of the user.  The contents of the toast can either be specified as iconUrl/title/text strings, or as a URL to a remote resource which contains the contents of the toast.\u003cbr /\u003e\u003cbr /\u003eIn Chromium/WebKit, the API is provided to scripts in WebCore by injecting into WebKit (via the Chrome/ChromeClient objects) an implementation of a NotificationPresenter interface, which contains methods to show and cancel toasts, as well as to check and request permission to show toasts.  These calls flow via IPC from the renderer process to the browser process, where the toasts are actually created on the screen using a small HtmlView.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eEvent feedback\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eSeveral events flow in the opposite direction: when a notification is displayed (it may not be immediate if the screen is cluttered), closed, or encounters an error, an event is fired which can be listened for by javascript.  These events are detected in the browser process and flow back to the renderer instance which owns the notification object.  Tracking is done by notification-id counters in each renderer process, and a map within the browser process which associates a toast on the screen with the corresponding renderer-process-id and notification-id.  Since the renderer process chooses the id, the IPC involved can be asynchronous.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eLifetime considerations\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eIf a page which is showing a desktop notification is closed, the toast should not be automatically removed from the screen. However, as the javascript Notification object has gone out of scope, Chromium must not attempt to invoke events on it.  The NotificationPresenter interface supports this via a notificationObjectDestroyed() method which must be called from WebCore when a Notification object is destroyed.  \u003cbr /\u003e\u003cbr /\u003eFor this reason, the renderer process's NotificationPresenter keeps a map of its notification-id values to Notification object pointers; if a Notification pointer goes out of scope, the NotificationPresenter is called and removes that pointer from the map.  If the browser subsequently calls with an event on that id it will be ignored.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIf a renderer process crashes, the notifications will persist in the browser process and on the screen, but events intended to reach that renderer process will be filtered out in the browser when normal process-lookup fails.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003ePermissions\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eDesktop notification permission is assigned on an origin basis.  Chromium stores two PrefLists in the user's profile to accomplish this: OriginsAllowed and OriginsDenied.  A script may request permission on a given origin through a JS API which is routed through the NotificationPresenter interface, into the browser process via IPC, and results in an InfoBar offering \"Allow\" or \"Deny\".  The origin is then stored in the correct PrefList.  \u003cbr /\u003e\u003cbr /\u003eWhen a notification is to be shown, permission must first be checked: this is handled in the same way, invoking the NotificationPresenter in the renderer, jumping via synchronous IPC to the browser, checking the PrefLists and returning.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eWorkers' notifications\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eThe same API is available to worker processes and mirrors the behavior for renderers, with IPC messages using a \"worker\" flag for correct routing of event feedback.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eMac/Linux integration\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eOn Mac and Linux, we considered to use 3rd party notification libraries, but have determined that having a unified HTML-capable interface is a better course, so Chrome will render HTML notifications on these platforms as well.\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eDeployment plan\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003ePresently the desktop notifications API will be disabled by default, but can be enabled with the command-line switch --enable-desktop-notifications.\u003cbr /\u003e\u003cbr /\u003e\u003ci\u003eBrowser Process Object Flow\u003c/i\u003e\u003cbr /\u003e\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /\u003eRenderViewHost \u003cbr /\u003e   v  (receives IPC from renderer)\u003cbr /\u003e   v\u003cbr /\u003eDesktopNotificationService \u003cbr /\u003e   v  (object owned by ProfileImpl which handles requests for notifications, also \"upcasts\" text notification to HTML based on template)\u003cbr /\u003e   v\u003cbr /\u003e   v  posts a task\u003cbr /\u003e   v\u003cbr /\u003eNotificationUIManager\u003cbr /\u003e   v   (global object owned by BrowserProcess which manages the space on the desktop for notification balloons)\u003cbr /\u003e   v\u003cbr /\u003eBalloonCollection \u003cbr /\u003e   v   (set of balloons on the screen, handles animations as balloons are added and removed)\u003cbr /\u003e   v\u003cbr /\u003eBalloon \u003cbr /\u003e   (mini window, draws notification chrome and contains HTML contents view, receives \"dismiss\" click from the user)\u003cbr /\u003e\u003cbr /\u003e\u003ci\u003eRenderer Process Object Flow\u003c/i\u003e\u003cbr /\u003e\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003cbr /\u003eCalling from JavaScript to create a notification:\u003cbr /\u003eNotificationCenter object in WebCore \u003cbr /\u003e   v   (returned by DOMWindow::webkitNotifications()).\u003cbr /\u003e   v\u003cbr /\u003e   v  V8 bindings \u003cbr /\u003e   v\u003cbr /\u003eWebKit::NotificationPresenterImpl\u003cbr /\u003e   v  (WebKit API object which adapts between WebCore::NotificationPresenter interface and matching WebKit API interface)\u003cbr /\u003e   v\u003cbr /\u003eRendererNotificationPresenter \u003cbr /\u003e       (implements WebKit::WebNotificationPresenter interface, object owned by WebViewDelegate implementation; sends IPC messages to browser, allocates IDs, stores map of ID-\u0026gt;Notification objects)\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003eCalling back into JavaScript to relay notification events:\u003cbr /\u003eRendererNotificationPresenter \u003cbr /\u003e   v   (receives IPC message from browser process regarding an event)\u003cbr /\u003e   v\u003cbr /\u003e   v (post task onto main thread: lookup in notification-id-\u0026gt;Notification object map, discard if invalid)\u003cbr /\u003e   v\u003cbr /\u003eWebKit::WebNotification (PIMPL wrapper in WebKit API for WebCore::Notification object)\u003cbr /\u003e   v\u003cbr /\u003e   v (invoke event listener)\u003cbr /\u003e   v\u003cbr /\u003eNotification in WebCore\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/desktop-notifications"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5153557688383760058"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5153557688383760058"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5153557688383760058"}],"author":[{}],"sites$pageName":{"$t":"desktop-notifications"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4496333864281002979"},"published":{"$t":"2009-10-05T22:45:48.717Z"},"updated":{"$t":"2009-10-05T23:15:30.320Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-10-05T23:15:30.319Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"A Generic theme for the Test Shell"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eWhen running layout tests, we'd like to minimize the differences we get between platforms, so that we don't have to maintain a large number of different baselines. The best example of this is on Windows, where different versions of Windows can render form controls and other widgets differently depending on your desktop settings (classic mode vs. XP theme vs. Vista theme vs. Aero, etc.).\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn order to solve this problem, we've \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome?view\u003drev\u0026amp;revision\u003d26161\"\u003eimplemented a generic set of widgets\u003c/a\u003e for the test shell (in \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/test_shell_webthemecontrol.cc\"\u003etest_shell_webthemecontrols.{cc,h}\u003c/a\u003e and \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/test_shell_webthemeengine.cc\"\u003etest_shell_webthemeengine.{cc,h}\u003c/a\u003e ), and the test shell uses those instead of the native controls. The downside to this, of course, is that we won't catch any regressions in the native widget mapping code. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe new generic widgets are rendered using \u003ca href\u003d\"http://code.google.com/p/skia/\"\u003eSkia\u003c/a\u003e and are designed explicitly for testability (rather than aesthetic concerns). Each widget is drawn differently depending on which state the control is in (disabled, readonly, active, hovered, etc.), and each widget is drawn differently from each other (e.g., the upper part of the scroll bar and the lower part of the scroll bar are distinctly different). This is different from what you might do when design real widgets for users, because you might actually want different widgets to look the same. In this case, we'd rather catch programmatic errors like passing the wrong widget ID or the wrong state in.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis image gives you an idea of what all of the \"generic\" controls look like:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1254783060624/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAs you can see, it's none too pretty, but it's quite clear what's what. Some of the things to look for:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003eEach control state (normal, disabled, read only, hovered, etc.) is rendered in a different background color. Controls that are active in one form or another (have the keyboard focus, are hovered over, or are part of a larger control that has a different part active) also get triangles marked in one of the four corners of the widget. \u003c/li\u003e\u003cli\u003eWidgets that have \"directionality\" (e.g., scroll bar top vs. scroll bar bottom) have a square marked in the corresponding edge of the control (you can see this on the scroll bars in the image above).\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis code is currently windows-specific, only because it implements the \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/win/WebThemeEngine.h\"\u003eWebThemeEngine\u003c/a\u003e interface (as found in \u003ca href\u003d\"http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/win/\"\u003esrc/webkit/api/win \u003c/a\u003e). We could certainly genericize this further and use the same theme on other platforms (Mac, Win), with the same tradeoff (we would test less of the actual production code).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/generic-theme-for-test-shell"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4496333864281002979"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4496333864281002979"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4496333864281002979"}],"author":[{"name":{"$t":"Dirk Pranke"},"email":{"$t":"dpranke@chromium.org"}}],"sites$pageName":{"$t":"generic-theme-for-test-shell"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6895058654269475270"},"published":{"$t":"2009-10-05T22:51:00.617Z"},"updated":{"$t":"2009-10-05T22:51:00.624Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-10-05T22:51:00.617Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"test_shell_generic_theme.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6895058654269475270"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4496333864281002979"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6895058654269475270"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6895058654269475270"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6895058654269475270"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6895058654269475270"}],"author":[{"name":{"$t":"Dirk Pranke"},"email":{"$t":"dpranke@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5137691542363579954"},"published":{"$t":"2009-06-17T19:30:14.542Z"},"updated":{"$t":"2009-09-09T23:09:00.885Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-09-09T23:09:00.884Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Themes"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eIf you want to write a theme, please see the documentation at:\u003cbr /\u003e\u003cbr /\u003e\u003ca href\u003d\"http://code.google.com/chrome/extensions/themes.html\"\u003ehttp://code.google.com/chrome/extensions/themes.html\u003c/a\u003e \u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Implementation\" /\u003eImplementation\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003eThemes are installed and packaged as extensions - once installed, the theme specification is copied into your browser preferences, allowing users to override individual theme choices. This theme data is loaded and managed by browser_theme_provider.cc (which also handles telling everyone to repaint when a theme is applied).\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Theme-provider\" /\u003eTheme provider\u003c/h4\u003e\u003cp\u003eThe theme provider has the following interface:\u003c/p\u003e\u003cp\u003eGetBitmapNamed(int id)\u003c/p\u003e\u003cp\u003eThis wraps ResourceBundle::GetBitmapNamed and provides themed images if they exist, falling back to the default ResourceBundle images otherwise.\u003c/p\u003e\u003cp\u003eGetColor(int id)\u003c/p\u003e\u003cp\u003eReturns an SkColor with the specified ID (see the list of ids in browser_theme_provider.h)\u003c/p\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Views-Implementation\" /\u003eViews Implementation\u003c/h4\u003e\u003cdiv\u003eAll views have access to a theme provider through their GetThemeProvider() method - this returns the root widget's theme provider. In browser-ui land, the theme provider hangs off the profile, and the root widget is profile aware.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn some cases, the root widget is not profile aware, and so you will have to inject the theme provider into the view. An example of this is tab_renderer.cc, which doesn't have access to the profile while in its dragged state.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/themes"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5137691542363579954"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5137691542363579954"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5137691542363579954"}],"author":[{}],"sites$pageName":{"$t":"themes"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"USl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6245232480212362152"},"published":{"$t":"2009-08-20T18:01:26.519Z"},"updated":{"$t":"2009-08-21T05:18:06.710Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-21T05:18:06.710Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Common Terms \u0026 Technobabble"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"font-size:large\"\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:13px\"\u003e\u003cdiv\u003eMoved to the \u003ca href\u003d\"http://code.google.com/p/chromium/wiki/Glossary\"\u003ewiki\u003c/a\u003e.\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/span\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/common-terms--techno-babble"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6245232480212362152"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6245232480212362152"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6245232480212362152"}],"author":[{"name":{"$t":"Albert Wong"},"email":{"$t":"ajwong@chromium.org"}}],"sites$pageName":{"$t":"common-terms--techno-babble"},"sites$revision":{"$t":"18"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/597161987136605394"},"published":{"$t":"2009-08-20T22:56:00.039Z"},"updated":{"$t":"2009-08-20T22:56:00.051Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-08-20T22:56:00.039Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"corruption.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/597161987136605394"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6245232480212362152"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/common-terms--techno-babble/corruption.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/597161987136605394"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597161987136605394"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/597161987136605394"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/597161987136605394"}],"author":[{"name":{"$t":"Andrew Scherkus"},"email":{"$t":"scherkus@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"WCl7JmA_\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1901819722745671851"},"published":{"$t":"2009-07-16T17:57:37.966Z"},"updated":{"$t":"2009-07-20T19:21:16.024Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-07-20T19:21:16.024Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Adaptive spell checking for multilingual users"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-The-existing-spell-checking-system-has-all-the-features-that-most-modern-browsers-have.-It-can-suggest-words-can-add-custom-words-supports-27-languages-and-counting-can-install-spellcheck-dictionaries-without-user-intervention-can-change-spell-check-langua\" /\u003e\u003cspan style\u003d\"font-weight:normal\"\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe existing spell checking system has all the features that most modern browsers have. It can suggest words, can add custom words, supports 27 languages (and counting), can install spellcheck dictionaries without user intervention, can change spell check languages on the 'fly', has 'new' words incorporated in many languages (\u003ca href\u003d\"http://blog.chromium.org/2009/02/spell-check-dictionary-improvements.html\" target\u003d\"_blank\"\u003eblog\u003c/a\u003e\u003c/span\u003e\u003c/font\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e), and is generally known to be stable and useful, without being intrusive. As a slightly more advanced feature, \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/automaticspellingcorrection\" style\u003d\"color:rgb(71,18,100);outline-style:none;outline-width:initial;outline-color:initial\" target\u003d\"_blank\"\u003eautomatic spelling correction\u003c/a\u003e was added, as an experiment (under a command line flag). It has been moderately successful, albeit with some small nuances which need to be fixed before it can be fully incorporated as a feature. \u003c/span\u003e\u003c/font\u003e\u003c/span\u003e\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:times new roman,serif;font-size:medium\"\u003eAt this stage, improvements to spell checking have to go beyond what every other browser provides. One important aspect of spell checking is the fact that many users are multi lingual. They would like to see spell check support which would enable them to switch between their chosen languages of communication through the browser smoothly, expecting the spell checking system to adapt to their usage automatically, in real time. This would require the SpellChecker to automatically detect the intended language of use as the user is typing, and switch to it smoothly and non-intrusively.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eUsage\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThis feature has to be designed such that the user involvement is minimum. The user should be able to simply start typing in a text box (email, comment, doc etc) and the spell checking system keeps pace to update itself to the language the user is typing in. The user should be oblivious to the change of spellcheck language in terms of performance while typing, and should be able to mix multiple languages in a single text box to get the corresponding spell checking done automatically. The suggestions to misspelled words should be presented intuitively without cluttering up the context menu. \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eWhen the user mixes multiple languages together,the SpellChecker detects that the user is using multiple languages, and starts supporting the languages \u003ci\u003esimultaneously\u003c/i\u003e. This means that, when the user types in a word, it is marked misspelled if it is misspelled in all the languages. Only two concurrent languages will be supported. If a new, third language is detected for use, remove the one which was least recently used.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eOn right click on the misspelled word, the context menu shows sub context-menus on the top, corresponding to the two languages, and the sub context-menus themselves show the suggestions for the corresponding language.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eDesign principle\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:times new roman,serif;font-size:medium\"\u003eThanks to prior work done to support this features, Chromium already includes a rich set of features to enable this advanced feature. The following features will be used:\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eLanguage detection\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe Compact Language Detection (CLD) library was initially written for Google Toolbar. It was ripped off from its dependency with toolbar, and was added to Chromium recently. CLD is fully integrated with Chromium, and does not require any communications with any server. It requires a very low sampling size - most of the times it can detect the language from a single sentence. It is not very resource intensive, and returns the language fast if the input is kept sparse. It returns unknown for languages which it cannot detect.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eSpellChecker support\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:times new roman,serif;font-size:medium\"\u003eThe SpellChecker supports the ability to be changed on the fly. Currently, the SpellChecker can handle one language at a time. It has to be upgraded to handle multiple languages simultaneously, and should have the ability to quickly change these languages on the fly. When this feature is enabled, given a word to check for spelling and suggestions, it will do so for the languages it is supporting, and will generate suggestions for these languages simultaneously.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:16px;font-weight:bold\"\u003eUI Support\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe UI has to be updated in several places to support this feature.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:times new roman,serif;font-size:medium\"\u003e\u003ci\u003eContext menu suggestions\u003c/i\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe context menu over a text area currently shows suggestions in a single language. It has to be updated so that it can now support sub context-menus to show suggestions for different languages simultaneously. \u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003ci\u003eSub context menu in Context menu for spell check options\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe context menu for a text area has a dedicated Spell Check options sub menu to select language of the SpellChecker. Only one language can be selected through context menu radio buttons at this time. When the auto detect language feature is turned on, this has to now enable check boxes, which means that the languages which have been detected so far will be shown, and two of them will be enabled (by check boxes).\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThe spell checking system has to remember the languages typed by the user. Thus, suppose the user types in English, French and German in a session. In a new session, when the user starts using a text box, the SpellChecker will be set to a default one, and these three languages will show up in the sub context menu, with only the default one selected.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003ci\u003eLanguages Options Menu\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eThere should be quick settings to turn this feature ON/OFF from the Language Options menu.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003ci\u003eNote\u003c/i\u003e: The Options menu for Languages is undergoing a change where the user can simply set the languages used, and not bother explicitly about accept languages, spell check languages and Chromium UI languages. The change in spellcheck language will be reflected in the languages that the user uses. If the language is not set by the user, it is added as a new language detected to be used by the User.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003eLimitations and possible drawbacks\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eWhile this feature itself is exciting, past experience has revealed that such features can be intrusive and counter intuitive for certain edge cases. Some edge cases are the following:\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003ci\u003eUser mixes multiple languages in a single sentence: \u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eSometimes, users, when constructing informal emails, mix words from the different languages they know. Of course, the fact that multiple languages will be supported simultaneously is the end solution - but how does one detect these languages?\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003ci\u003eHow to decide the default language to start with\u003c/i\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003eSelecting the default language to start with during spell checking can be tricky. Right now, the following heuristics will be used to select the default language of the SpellChecker - the language of the web page if the text box is empty - otherwise, the language of the words in the text box if it is pre-populated.\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont size\u003d\"6\"\u003e\u003cspan style\u003d\"font-size:20px\"\u003e\u003cb\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium;font-weight:normal\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:20px;font-weight:bold\"\u003eTesting\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-family:times new roman,serif;font-size:medium\"\u003eThe spell check tests have to be upgraded so that they are aware of the SpellChecker's ability to spell in multiple languages simultaneously. Automated tests have to be designed to check the ability of the SpellChecker to change language on the fly adaptively with the language of the text being spell checked..\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'times new roman', serif\"\u003e\u003cspan style\u003d\"font-size:medium\"\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003c/span\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/advancedspellchecker"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1901819722745671851"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1901819722745671851"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1901819722745671851"}],"author":[{}],"sites$pageName":{"$t":"advancedspellchecker"},"sites$revision":{"$t":"31"}},{"gd$etag":"\"WCl7JmA-\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4211721991638756347"},"published":{"$t":"2009-01-07T03:13:10.692Z"},"updated":{"$t":"2009-07-06T18:22:58.538Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-07-06T18:22:58.536Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Test Cases"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-two-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Guidelines\" /\u003eGuidelines\u003c/h3\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-family:arial\"\u003ePlease make sure that you are on the dev channel. We have recently refreshed the dev channel, so you will have to sign up for the dev channel once again. Instructions for joining the dev channel are here: \u003ca href\u003d\"http://dev.chromium.org/getting-involved/dev-channel/\"\u003ehttp://dev.chromium.org/getting-involved/dev-channel/\u003c/a\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;white-space:pre-wrap\"\u003eMake sure you are running the latest version. You can find information about Google Chrome versions here: \u003ca href\u003d\"http://dev.chromium.org/getting-involved/dev-channel/release-notes\"\u003ehttp://dev.chromium.org/getting-involved/dev-channel/release-notes\u003c/a\u003e.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;white-space:pre-wrap\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eIMPORTANT\u003c/span\u003e: Before you begin testing, please \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/creating-and-using-profiles\"\u003eset up a new profile\u003c/a\u003e. We strongly suggest that you use a separate profile folder for testing purposes so that the testing does not tamper with your existing profile and also to ensure all the volunteers are starting with a similar setup.\u003c/span\u003e\u003c/li\u003e\u003col\u003e\u003cli\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eYou can clear the profile between tests, as described in the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/creating-and-using-profiles\"\u003eprofile page\u003c/a\u003e.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"white-space:pre-wrap\"\u003eW\u003cspan style\u003d\"font-size:13px;white-space:normal;line-height:16px\"\u003ehen you are done testing, you can edit the shortcut again to go back to your original profile.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;font-family:arial;white-space:pre-wrap\"\u003ePlease go through as many test cases as possible. Detailed description about the test cases is provided in the column on the left. Each test case should be answered with a 'Pass' or 'Fail'\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;font-family:arial;white-space:pre-wrap\"\u003ePlease try and associate a failing test case with a bug. It could be an existing bug or a new issue. Please refer to bug reporting guidelines here: \u003ca href\u003d\"http://dev.chromium.org/for-testers/bug-reporting-guidelines\"\u003ehttp://dev.chromium.org/for-testers/bug-reporting-guidelines\u003c/a\u003e. Use the 'Other' response field in the test cases to include the bug numbers.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;font-family:arial;white-space:pre-wrap\"\u003ePlease do not use this form to send us feature requests or information about unrelated crashes or bugs. Please file them directly on \u003ca href\u003d\"http://crbug.com\"\u003ehttp://crbug.com\u003c/a\u003e where they will be looked at along with other bugs.\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv\u003e\u003cspan style\u003d\"border-collapse:separate;white-space:pre-wrap\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Test-cases\" /\u003eTest cases\u003c/h3\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Test-case:-Default-Browser-admin-user-\" /\u003e\u003cspan style\u003d\"font-size:14px\"\u003eTest case: Default Browser (admin user)\u003c/span\u003e\u003c/h3\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: Make sure you are logged in with administrative privileges and Google Chrome is not your default browser. \u003c/li\u003e\r\n\u003cli\u003eGo to \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Basic\u003c/span\u003e and click on 'Make Google Chrome my default browser'. \u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: Go to Start -\u0026gt; Run and type and valid URL like 'http://www.google.com' in the run dialog. When you hit enter, it should be opened in a new Google Chrome window.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cdiv\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Default-Browser-non-admin-user-\" /\u003e\u003cspan style\u003d\"font-size:14px;font-weight:bold\"\u003eTest case: Default Browser (non-admin user)\u003c/span\u003e\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: Make sure you are logged in without administrative privileges (limited user) and Google Chrome is not your default browser. \u003c/li\u003e\r\n\u003cli\u003eGo to \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Basic\u003c/span\u003e and click on 'Make Google Chrome my default browser'. \u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: Go to Start -\u0026gt; Run and type and valid URL like 'http://www.google.com' in the run dialog. When you hit enter, it should be opened in a new Google Chrome window.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Clear-Browsing-Data-time-range-1-day-\" /\u003eTest case: Clear Browsing Data (time range 1-day)\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditons/setup\u003c/span\u003e: Start with a fresh Chrome profile. Browse to a few websites. Log on to your email account and choose to save passwords. Download a few files. This will help populate your cache, cookies, download history, etc.\u003c/li\u003e\r\n\u003cli\u003eGo to \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Clear browsing data\u003c/span\u003e. Select all check boxes on the dialog, leave the time period as 'Last day' and click on 'Clear browsing data'.\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: All your recent browsing history should be cleared. Your history (Ctrl + H) and downloads (Ctrl + J) pages should not show up any entries for the current day. Your saved passwords under \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Minor Tweaks -\u0026gt; Show saved passwords\u003c/span\u003e should be empty. There should be no cookies present under \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Under the Hood -\u0026gt; Show cookies\u003c/span\u003e.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Clear-Browsing-Data-specific-data-types---cookies-\" /\u003eTest case: Clear Browsing Data (specific data types - cookies)\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: Start with a fresh Chrome profile. Visit some websites such as http://www.nytimes.com, http://www.cnn.com, etc. Log on to an email account (e.g. your GMail account). Go to \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Under the Hood -\u0026gt; Show cookies \u003c/span\u003eand verify that cookies have been stored\u003cspan style\u003d\"color:rgb(56,118,29)\"\u003e.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003eGo to \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Clear browsing data\u003c/span\u003e. Select only the checkbox labeled cookies and click on 'Clear browsing data'.\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: There should be no cookies present under \u003cspan style\u003d\"color:rgb(56,118,29)\"\u003eChrome Menu -\u0026gt; Options -\u0026gt; Under the Hood -\u0026gt; Show cookies\u003c/span\u003e.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/div\u003e\r\n\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Find-in-Page-matches-inside-html-pages-edit-boxes-unicode-text-\" /\u003eTest case: Find in Page (matches inside html pages, edit boxes, unicode text)\u003c/h4\u003e\r\n\u003cdiv\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: None.\u003c/li\u003e\r\n\u003cli\u003eNavigate to a simple page such as \u003ca href\u003d\"http://dev.chromium.org/\"\u003ehttp://dev.chromium.org/\u003c/a\u003e. Hit 'Ctrl + F' Search for the word 'chromium'. \u003c/li\u003e\r\n\u003cli\u003eNext, go to a website that has a text edit boxes (e.g. compose a message in GMail). Type the following text in that box: '\u003cspan style\u003d\"font-family:arial;font-size:13px;white-space:pre-wrap\"\u003ethe quick brown fox quickly jumps over the lazy dog\u003c/span\u003e'. Hit Ctrl + F and enter the search text 'QUICK'.\u003c/li\u003e\r\n\u003cli\u003eFinally go to http://news.sina.com. Bring up the find in page dialog and search for: \u003cspan style\u003d\"border-collapse:separate;font-size:13px\"\u003e北美首頁.\u003c/span\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003cspan style\u003d\"border-collapse:separate;font-size:13px\"\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: In each of the cases mentioned above, the search should highlight every single occurrence of the search term in \u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003eYellow\u003c/span\u003e. The search box should show a count of the occurrences as well as the the occurrence it has currently focused on which is highlighted in \u003cspan style\u003d\"background-color:rgb(255,153,0)\"\u003eOrange\u003c/span\u003e. You should be able to toggle between each of the highlighted search terms by clicking on the arrow icons in the find dialog or by using the keyboard (F3 and Shift+F3).\u003c/span\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Tab-dragging-screen-edges-\" /\u003eTest case: Tab dragging (screen edges)\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003ePre-conditions/setup\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e: None.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eWhen you drag a tab to certain positions on the monitor, a docking icon will appear.  Release the mouse over the docking icon to have the tab snap to the docking position instead of being dropped at the same size as the original window. \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003eVerification\u003c/span\u003e\u003c/span\u003e\u003cspan style\u003d\"font-family:arial,sans-serif\"\u003e:\u003c/span\u003e\u003c/li\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial\"\u003eMonitor top: make the dropped tab maximized.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial\"\u003eMonitor left/right: make the dropped tab full-height and half-width, aligned with the monitor edge.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial\"\u003eMonitor bottom: make the dropped tab full-width and half-height, aligned with the bottom of the monitor.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial\"\u003eBrowser-window left/right: fit the browser window and the dropped tab side-by-side across the screen.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-family:arial\"\u003eBrowser-window bottom: fit the browser window and the dropped tab top-to-bottom across the screen.\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Profiles-open-a-tab-in-new-profile-create-a-new-profile-\" /\u003eTest case: Profiles (open a tab in new profile, create a new profile)\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: Start with a clean profile. Browse to a few websites. Log on to your email account and choose to save passwords. Download a few files. This will help populate your cache, cookies, download history, etc in your current profile.\u003c/li\u003e\u003cli\u003eGo to Chrome Menu -\u0026gt; Options -\u0026gt; New window in profile -\u0026gt; \u0026lt;New Profile\u0026gt;. Create a new profile and name it (e.g. 'work'). Leave the 'Create desktop shortcut...' box checked.\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: There should be a new shortcut on your desktop called 'Google Chrome for work' (or whatever profile name you choose). If you double click on that shortcut, it should launch a new instance of Google Chrome. This new instance should have an empty new tab page. The history should be empty and there should be no cookies present.\u003c/li\u003e\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Auto-scroll\" /\u003eTest case: Auto scroll\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-conditions/setup\u003c/span\u003e: None.\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: On pages that have vertical and/or horizontal scroll bars, if you press the mouse scroll wheel (middle-click) auto-scroll should be enabled and the webpage should scroll as you move your mouse. \u003c/li\u003e\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Downloads-download-various-types-of-file-\" /\u003eTest case: Downloads (download various types of file)\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-condition/setup\u003c/span\u003e: Start with a clean profile.\u003c/li\u003e\u003cli\u003eDownload different types of files (various types of file formats and sizes). \u003cspan style\u003d\"font-style:italic\"\u003eNote: please download files only from sources you trust.\u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: The files should get successfully downloaded to the download location, which by default should be My Documents\\Downloads. The download history page (Ctrl + J) should list all the downloads.\u003c/li\u003e\u003c/ul\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Test-case:-Downloads-change-download-location-\" /\u003eTest case: Downloads (change download location)\u003c/h4\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003ePre-condition/setup\u003c/span\u003e: Start with a clean profile.\u003c/li\u003e\u003cli\u003eGo to Chrome Menu -\u0026gt; Options -\u0026gt; Minor Tweaks and change the download location to some other folder on your computer. \u003c/li\u003e\u003cli\u003e\u003cspan style\u003d\"font-weight:bold\"\u003eVerification\u003c/span\u003e: All subsequent downloads should get downloaded to the new download location.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-2\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-on sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-object-title\" style\u003d\"display:none;\"\u003eGoogle Spreadsheet\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-spreadsheet-form\"\u003e\u003ciframe src\u003d\"http://docs.google.com/spreadsheet/embeddedform?bc\u003dtransparent\u0026amp;f\u003dArial%252C%2BVerdana%252C%2Bsans-serif\u0026amp;hl\u003den\u0026amp;htc\u003d%25230066cc\u0026amp;key\u003dpm6QfFrOj1vbeM7LDd9SVXw\u0026amp;lc\u003d%25230066cc\u0026amp;pli\u003d1\u0026amp;tc\u003d%2523000000\u0026amp;ttl\u003d0\" width\u003d\"100%\" height\u003d\"1328\" title\u003d\"Google Spreadsheet\" allowtransparency\u003d\"true\" frameborder\u003d\"0\" marginheight\u003d\"0\" marginwidth\u003d\"0\" id\u003d\"394543567\"\u003e \u003c/iframe\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/test-cases"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4211721991638756347"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4211721991638756347"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4211721991638756347"}],"author":[{}],"sites$pageName":{"$t":"test-cases"},"sites$revision":{"$t":"21"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1182074771787813635"},"published":{"$t":"2008-11-04T01:26:23.161Z"},"updated":{"$t":"2009-06-01T18:22:16.868Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-11-04T01:26:23.161Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"page_cycler_plot.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1182074771787813635"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1111123889964029428"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1182074771787813635"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1182074771787813635"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1182074771787813635"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1182074771787813635"}],"author":[{"name":{"$t":"Pam Greene"},"email":{"$t":"pam@chromium.org"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"WSl7JmA9\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7349908298048005296"},"published":{"$t":"2009-03-24T20:43:52.768Z"},"updated":{"$t":"2009-06-01T17:58:01.251Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-06-01T17:58:01.251Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Automatic Spelling Correction"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate;font-family:Times New Roman;font-size:16px\"\u003e\u003cdiv style\u003d\"margin-top:6px;margin-right:6px;margin-bottom:6px;margin-left:6px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;font-family:Verdana;font-size:10pt;background-color:rgb(255,255,255);min-height:1100px;line-height:normal\"\u003e\u003ch1 style\u003d\"text-align:left;font-size:18pt\"\u003e\u003ca name\u003d\"TOC-A-new-feature-to-add-to-Chrome-would-be-automatic-spelling-correction.-In-this-feature-common-misspelled-words-will-be-replaced-immediately-with-the-correct-word-on-the-fly-while-typing.-For-example-words-such-as-the-typed-as-teh-more-typed-as-moer-will-be\" /\u003e\u003cspan style\u003d\"font-size:13px;font-weight:normal\"\u003e\u003cspan style\u003d\"font-family:Arial;font-size:22px;font-weight:bold;white-space:pre\"\u003e\u003cspan style\u003d\"font-family:Verdana;font-size:13px;font-weight:normal;white-space:normal\"\u003eA new feature to add to Chrome would be automatic spelling correction. In this feature, common misspelled words will be replaced immediately with the correct word, on the fly, while typing. For example, words such as \"the\" typed as \"teh\", \"more\" typed as \"moer\", will be replaced with \"the\" and \"more\" respectively.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/h1\u003e\u003cdiv\u003eA natural apprehension is that spellings can be auto corrected without the user wanting it to happen. In this particular implementation, the algorithm for changing the word is kept stringent, so that cases with ambiguity are not dealt with at all, thus reducing false positives. Further, this feature can be turned OFF for usage in text box which requires technical words not necessarily in the dictionary. Selective use of this feature will probably make daily browser activities, such as typing an email, a better and faster experience.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eA somewhat detailed design is presented below.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Infrastructure-Support\" /\u003eInfrastructure Support\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThis would require adding support to Webkit. The TypingCommand class (TypingCommand.cpp) supports a method markMisspellingsAfterTyping. This takes a look at the selection that results after typing and determines whether spellcheck is required. This method will ask the markMisspellingsAfterTypingToPosition method in Editor (Editor.cpp) to provide the integer positions: firstMisspelledCharOffset and firstMisspelledCharCount. These positions will be required to generate the exact subrange within the Editor object which is to be replaced with the auto correct word after typing. Invariably, this would select the word immediately after typing and entering space, or other word breaking character (such as $, @, \u0026amp; etc for WebKit). \u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOnce the subrange to replace has been determined, a new method in the editor client (editorclient.h and editor_client_impl.cc), called getAutoCorrectSuggestionForMisspelledWord, will be asked to provide the autocorrect word. If it can provide one, then replace the subrange with that word - otherwise, do nothing. Meanwhile, getAutoCorrectSuggestionForMisspelledWord will eventually ask the SpellChecker to provide it with the auto correct word, by using the WebViewDelegate from EditorClientImpl. All the threading issues are automatically taken care of by following the same path as that while determining whether a word is misspelled in the Editor.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eNote that if this feature is turned off from the UI, the getAutoCorrectSuggestionForMisspelledWord will fast-return an empty string.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Auto-correct-word-determination-algorithm-in-SpellChecker\" /\u003eAuto correct word determination algorithm in SpellChecker\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe autocorrection algorithm resides in the SpellChecker Object in method GetAutoCorrectWord. This method can contain a wide range of simple to sophisticated algorithms for auto spell check.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAs a starter, I propose to use the simplest algorithm - that of swapping adjacent characters and checking to see if only \u003ci\u003eone\u003c/i\u003e word is spelled correctly. This is a very common case, as we tend to often type in one character before the other while typing (at the very time of writing this sentence, I spelled \"while\" as \"hwile\"!). As an example, consider the word \"more\". Swapping adjacent characters would result in the following - \"omre\", \"mroe\", \"moer\", \"more\". Obviously, only \"more\" is not misspelled. So, if the user types \"omre\", \"mroe\" or \"moer\", it will be replaced with \"more\" as the auto suggest word.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eAs an anti-example, consider the (misspelled) word \"noen\". This will \u003ci\u003enot \u003c/i\u003ebe auto corrected, because swapping adjacent characters will result in \"neon\", as well as \"none\". Both are legitimate word - the user, thus, might have as well meant either.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eOnce this basic algorithm is in place, I will devote my time over the next few months to develop more sophisticated algorithms, with your help, to make this feature a coveted one, unseen in other browsers so far.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Chrome-UI-Support\" /\u003eChrome UI Support\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eFor now, the only UI support required is the ability to turn this feature on/off. This can be done as a check box below the \"Allow spellcheck\" checkbox in Languages options menu. It can also appear in the sub context menu for spellcheck options in a text box.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eObviously, more UI support will be eventually required. For example, users might not want to have some words auto corrected - they can add those words from a context menu command - such as perhaps \"Stop autocorrecting this word\". Also, a UI element should appear below the autocorrected word when the cursor, or mouse, if moved over it, to convey to the user that autocorrection has been done.\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Unit-Testing\" /\u003eUnit Testing\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThis infrastructure needs to have unit tests for the GetAutoCorrectWord method in SpellChecker.\u003c/div\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/automaticspellingcorrection"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7349908298048005296"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7349908298048005296"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7349908298048005296"}],"author":[{}],"sites$pageName":{"$t":"automaticspellingcorrection"},"sites$revision":{"$t":"10"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7872916742826661508"},"published":{"$t":"2009-04-22T18:55:31.362Z"},"updated":{"$t":"2009-04-22T20:15:28.676Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-04-22T20:15:28.676Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Printing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv\u003e\u003cspan style\u003d\"border-collapse:separate;font-family:Verdana;font-size:13px\"\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe printing is initiated by the yellow boxes; either by user intents or by script.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe actual printer spooling is done in the print worker thread.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe renderer thread is blocking the whole time, which could lead to deadlock where:\u003c/li\u003e\u003cul style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe renderer sends a sync message to the browser UI thread (which implicitly requires a round trip to the I/O thread)\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe browser thread displays a PrintDlgEx() dialog box for instance\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe tab client area (e.g. the HTML display area) receives a invalidation; requiring it to regenerate the display.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e(or) A windowed plugin receives a WM_PAINT window message.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThe windowed plugin calls NPAPI_ExecuteJavascript()\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eThis calls synchronously the renderer.\u003c/li\u003e\u003cli style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eBut the renderer is not processing messages anymore -\u0026gt; \u003cb\u003eDeadlock\u003c/b\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/ul\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"margin-top:0px;margin-bottom:0px\"\u003eBecause of this, there is work going on to not block the Renderer Thread by duplicating the WebViewImpl/WebFrameImpl and use the \"inert\" duplicate frame for the printing. This removes all the sync messages requirements.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed sites-embed-full-width\" style\u003d\"width:100%;\"\u003e\u003cdiv class\u003d\"sites-embed-object-title\" style\u003d\"display:none;\"\u003ePrint threading\u003c/div\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-writely\"\u003e\u003ciframe src\u003d\"http://docs.google.com/View?docid\u003ddgzjmf8g_13gc729dh\u0026amp;hgd\u003d1\" width\u003d\"100%\" height\u003d\"1200\" title\u003d\"Print threading\" frameborder\u003d\"0\" /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/printing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7872916742826661508"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7872916742826661508"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7872916742826661508"}],"author":[{"name":{"$t":"Marc-Antoine Ruel"},"email":{"$t":"maruel@chromium.org"}}],"sites$pageName":{"$t":"printing"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},"published":{"$t":"2008-12-17T00:16:39.329Z"},"updated":{"$t":"2009-04-16T04:23:48.048Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T00:57:15.457Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Bookmarklets"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eMany sites  implement sharing/saving features through \u003ca href\u003d\"http://www.bookmarklets.com/about/\" title\u003d\"bookmarklets\" rel\u003d\"nofollow\"\u003ebookmarklets\u003c/a\u003e.\r\nExamples include Delicious, Facebook, Digg, and Google Reader. However,\r\nbookmarklets are hard to install, since they require dragging a link to\r\nthe bookmarks bar. The following proposal builds on bookmarklets to\r\nenable simple sharing of pages in Chrome.\u003cbr /\u003e\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Basic-state\" /\u003e\u003cb\u003eBasic state\u003c/b\u003e\u003c/h2\u003eWe move the star to the right-side of the Omnibox, and add a drop-down menu:\u003cb\u003e\u003cbr /\u003e\u003c/b\u003e\u003cdiv style\u003d\"padding:1em 0pt;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/default.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229474823561/user-experience/bookmarklets/default.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e... that contains a list of bookmarklets:\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/menu.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229474893893/user-experience/bookmarklets/menu.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003eIn this case, the \"Email this page\" action is basically a mailto: link with the\r\nsubject and content prefilled.\u003cspan style\u003d\"background-color:rgb(215,255,255)\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Installing-bookmarklets\" /\u003eInstalling bookmarklets\u003c/h3\u003eJust like in other browsers, users can install a bookmarklet by dragging it onto a drop-target (in this case, the drop-down arrows). This dragging action will be interpreted as an implicit permission to install the bookmarklet, and thus won't require a permissions dialog.\u003cb\u003e\u003cbr /\u003e\u003cbr /\u003e\u003c/b\u003eHowever, to make it easier to install bookmarklets, developers can also add \u003cspan style\u003d\"font-family:courier new,monospace\"\u003erel\u003d\"bookmarklet\"\u003c/span\u003e to their bookmarklet \u0026lt;a\u0026gt; tags. This won't affect their behavior in other browsers. However, when the user clicks on such a link in Chrome, they will be presented with the following permissions dialog (exact copy TBD):\u003cbr /\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/install_dialog.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229474945507/user-experience/bookmarklets/install_dialog.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Managing-bookmarklets\" /\u003e\u003cb\u003eManaging bookmarklets\u003c/b\u003e\u003c/h3\u003eBookmarklets can be managed by right-clicking on them in the drop-down menu:\u003cbr /\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/menu_context.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229475216799/user-experience/bookmarklets/menu_context.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003eWe may also provide an option to promote bookmarklets to the top level, in which case they will appear next to the star. Only bookmarklets with a favicon can be promoted in this way.\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5226039815607163543"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"}],"author":[{}],"sites$pageName":{"$t":"bookmarklets"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1230668930454145040"},"published":{"$t":"2009-04-15T22:18:34.540Z"},"updated":{"$t":"2009-04-15T22:24:18.937Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-04-15T22:24:18.937Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tabtastic 2 Requirements"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThis page is a collection of requirements for the third generation Chrome tabstrip implementation.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003elive tab contents during dragging\u003c/li\u003e\u003cli\u003efull size dragged representations\u003c/li\u003e\u003cli\u003eframe fade transition during detach/attach\u003c/li\u003e\u003cli\u003edragged representation places tab at relevant position in tabstrip (from jar)\u003c/li\u003e\u003cli\u003eability to resume drag in tabstrip after attach\u003c/li\u003e\u003cli\u003eability to resume drag in tabstrip after move from overflow UI\u003c/li\u003e\u003cli\u003eoverflow UI capability\u003c/li\u003e\u003cli\u003emultiselect for drag and close\u003c/li\u003e\u003cli\u003eindependent continuous animations (View::GetAnimator)\u003c/li\u003e\u003cli\u003egeneric TabStrip baseclass that does not deal with TabContentses\u003c/li\u003e\u003cli\u003eBrowserTabStrip subclass that interacts with TabStripModel (and knows about TabContentses)\u003c/li\u003e\u003cli\u003etesting for Layout\u003c/li\u003e\u003cli\u003egeneral testable interface (View-Controller separation)\u003c/li\u003e\u003cli\u003etests for drag and drop using testable interface\u003c/li\u003e\u003cli\u003ewindows 7 integration for drag and drop targets at screen edges in lieu of the current Dock system that we use on Vista and below.\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eP2s/3s:\u003c/div\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003epinned tabs\u003c/li\u003e\u003cli\u003etab coloring\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003eImplementing a system capable of supporting all of this will require some tweaks to TabStripModel and a replacement of the existing Tab/TabRenderer/TabStrip/etc system.\u003c/div\u003e\u003cdiv\u003eWe should avoid adding new features/capabilities to the current tabstrip until this system is implemented\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/tabtastic-2-requirements"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1230668930454145040"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1230668930454145040"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1230668930454145040"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$pageName":{"$t":"tabtastic-2-requirements"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8451529599588576089"},"published":{"$t":"2009-03-22T20:53:52.143Z"},"updated":{"$t":"2009-03-22T20:53:52.155Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-22T20:53:52.143Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"layers.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8451529599588576089"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8992477738053034276"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome/layers.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8451529599588576089"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8451529599588576089"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8451529599588576089"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8451529599588576089"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDQpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},"published":{"$t":"2009-03-14T23:09:06.879Z"},"updated":{"$t":"2009-03-15T02:31:39.153Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T02:31:39.152Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Native Controls"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Background\" /\u003eBackground\u003c/h3\u003e\u003cdiv\u003eDespite the fact that views provides facilities for custom layout, rendering and event processing, in many situations we have found it desirable to use the controls provided by the host operating system (Windows to begin with). This is because these widgets already have many desirable properties: a system-native appearance that reflects the latest and greatest of the host operating system (e.g. using the same Win32 API as Windows XP on Windows Vista, native buttons receive glow animations when highlighted), handling for accessibility, focus, etc. Implementing new controls using views and Skia would be possible but it would take a long time to replicate all of this functionality, and we would have to update it for each new operating system release as well. So for areas of our UI where it wasn't important to have a distinctive, custom look, we have fallen back to native controls.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Historic-Abstraction\" /\u003eHistoric Abstraction\u003c/h3\u003e\u003cdiv\u003eHistorically, NativeControls have been used like so:\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControlHistoric2.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1237082697701/developers/design-documents/native-controls/NativeControlHistoric2.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eA base class, \u003cspan style\u003d\"font-weight:bold\"\u003eNativeControl\u003c/span\u003e, is the root of all NativeControls, like buttons, checkboxes, tree views, etc. This View subclass is Windows-specific and has a child View that is a HWNDView. This HWNDView hosts a HWND (\u003cspan style\u003d\"font-weight:bold\"\u003eNativeControlContainer\u003c/span\u003e) that is the parent of the actual native control HWND. The parent is responsible for receiving messages sent from the child HWND (e.g. WM_COMMAND, WM_NOTIFY etc) and forwarding these back to the NativeControl. This structure with the additional HWND was thought necessary because the assorted Windows common controls communicate message notifications to the client app by sending messages to the parent window. Back when Chrome had several different ViewContainer/root widget types, it made sense to encapsulate this handling at the NativeControl level. These days, there is only one root HWND type to be concerned with - WidgetWin, so it actually makes more sense to have it receive control notifications and forward them back to the NativeControl, rather than having to carry around all these extra HWNDs.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eAnother problem with this abstraction is related to the fact that Chrome has many different kinds of Buttons. Because \u003cspan style\u003d\"font-weight:bold\"\u003eNativeButton\u003c/span\u003e has no shared base class with the other Button base (\u003cspan style\u003d\"font-weight:bold\"\u003eBaseButton\u003c/span\u003e), much of the API ends up being slightly different. It'd be desirable to share a base class and then implement any of the NativeButton-specific methods in the derived class. However this is not possible due to this structure.\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003eA final point of note: some NativeControl subclasses like CheckBox are a combination of system native controls and views components. To get proper transparent rendering behind the text label of a checkbox, the CheckBox has two child views - one which is the native windows control rendering only the checkmark section, and a views::Label child which renders the text. This structure has to be accommodated in any proposed modifications to this design.\u003c/div\u003e\u003ch3\u003e\u003ca name\u003d\"TOC-Proposed-Design\" /\u003eProposed Design\u003c/h3\u003e\u003cdiv\u003eFirst of all, for any proposed design it's desirable to keep the API simple for users since native controls are used in very many places throughout Chrome. Ideally, using a native control is as simple as constructing one and adding it to your view hierarchy, which is the usage model that exists today for the windows-specific native controls and the views controls.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo achieve this, we use the PIMPL idiom to hide the native control implementation from the client in a setup like this:\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControl.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1237081970834/developers/design-documents/native-controls/NativeControl.png\" /\u003e\u003c/a\u003e\u003c/div\u003eIn this world, NativeButton is a class derived from a base Button class just as the other Button classes are (e.g. TextButton, etc). It overrides various methods that require interaction with the native control, such as making the button appear as the default button in a dialog box etc. The interesting thing here is that the NativeButton itself is cross-platform code. The platform-specific details of implementing a native control are encapsulated behind a platform-neutral \u003cspan style\u003d\"font-weight:bold\"\u003eNativeControl\u003c/span\u003e interface implemented, in this example, by a new class \u003cspan style\u003d\"font-weight:bold\"\u003eNativeControlWin\u003c/span\u003e, a subclass of HWNDView that hosts the actual Windows native control. We avoid having an extra HWND here by stashing a pointer to the NativeControlWin on the attached HWND, and have the message handler in WidgetWin attempt to forward the message to the NativeControlWin directly if it finds such an association. The NativeButton implements a listener interface that receives higher level notifications from the NativeControl implementation about messages received from the operating system.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eSince NativeControl is an interface not a class, it must provide a GetView accessor for the View that is to be parented as a child of the NativeButton, CheckBox or other view.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIn this way, NativeButton can share a base class with other button types. A similar relationship can exist for other native controls where this is applicable, e.g. scroll bars, tree views, etc.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-More-Complex-Controls\" /\u003eMore Complex Controls\u003c/h4\u003e\u003cdiv\u003eFor controls more complex than buttons like, for example, TreeViews, there can be more elaborate code in NativeControlWin subclasses that handle messages from the native UI control and notify the view on the right half of the diagram as needed. Keeping the views on the right half of diagram platform neutral hides the complexity of maintaining platform-specific controls from consumers in the application - e.g. there is no need for ifdefs or factory methods at the call sites - the views can just be constructed directly and added to the view hierarchy:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid FooView::Init() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  button_ \u003d new views::NativeButton;\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  button_-\u0026gt;SetListener(this);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  AddChildView(button_);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e...\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003evoid FooView::Layout() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  button_-\u0026gt;SetBounds(0, 0, width(), height());\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003evs the more baroque:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003evoid FooView::Init() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new', monospace\"\u003e  button_ \u003d views::NativeButton::CreateNativeButton();\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  button_-\u0026gt;SetListener(this);\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  AddChildView(button_-\u0026gt;GetView());\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e...\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e\u003cbr /\u003e\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003evoid FooView::Layout() {\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e  button_-\u0026gt;GetView()-\u0026gt;Layout(0, 0, width(), height());\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cfont face\u003d\"'courier new'\"\u003e}\u003c/font\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5524614566016201340"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$pageName":{"$t":"native-controls"},"sites$revision":{"$t":"8"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4785342041338860534"},"published":{"$t":"2009-03-15T02:06:17.114Z"},"updated":{"$t":"2009-03-15T02:06:17.127Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T02:06:17.114Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NativeControlHistoric.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4785342041338860534"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControlHistoric.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4785342041338860534"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4785342041338860534"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4785342041338860534"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4785342041338860534"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1736137499474475200"},"published":{"$t":"2009-03-15T02:06:12.267Z"},"updated":{"$t":"2009-03-15T02:06:12.278Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T02:06:12.267Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NativeControl.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1736137499474475200"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControl.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1736137499474475200"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1736137499474475200"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1736137499474475200"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1736137499474475200"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4475316134062656344"},"published":{"$t":"2009-03-15T02:04:57.692Z"},"updated":{"$t":"2009-03-15T02:04:57.701Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T02:04:57.692Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NativeControlHistoric2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4475316134062656344"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControlHistoric2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4475316134062656344"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4475316134062656344"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4475316134062656344"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4475316134062656344"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5780369452321584446"},"published":{"$t":"2009-03-15T01:46:05.028Z"},"updated":{"$t":"2009-03-15T02:04:33.056Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T02:04:33.049Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NativeControlHistoric.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5780369452321584446"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControlHistoric.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5780369452321584446"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780369452321584446"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780369452321584446"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5780369452321584446"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/63381672531661814"},"published":{"$t":"2009-03-15T01:52:50.823Z"},"updated":{"$t":"2009-03-15T01:52:50.834Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-15T01:52:50.823Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NativeControl.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/63381672531661814"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524614566016201340"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/native-controls/NativeControl.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/63381672531661814"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/63381672531661814"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/63381672531661814"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/63381672531661814"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5502153752171211158"},"published":{"$t":"2009-03-01T05:48:09.853Z"},"updated":{"$t":"2009-03-01T05:48:09.858Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-01T05:48:09.853Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NonClientView.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5502153752171211158"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4029986824404429231"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/views-windowing/NonClientView.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5502153752171211158"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5502153752171211158"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5502153752171211158"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5502153752171211158"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6620575319191836871"},"published":{"$t":"2009-03-01T05:37:16.959Z"},"updated":{"$t":"2009-03-01T05:37:16.972Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-01T05:37:16.959Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"NonClientView.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6620575319191836871"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4029986824404429231"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/views-windowing/NonClientView.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6620575319191836871"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6620575319191836871"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6620575319191836871"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6620575319191836871"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1075932614975730291"},"published":{"$t":"2009-03-01T05:22:17.119Z"},"updated":{"$t":"2009-03-01T05:22:17.125Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-01T05:22:17.119Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"BrowserWindow2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1075932614975730291"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3185366824488474522"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-window/BrowserWindow2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1075932614975730291"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1075932614975730291"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1075932614975730291"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1075932614975730291"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7397894288549236153"},"published":{"$t":"2008-07-31T18:40:41.057Z"},"updated":{"$t":"2009-03-01T05:21:50.438Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-01T05:21:50.432Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"BrowserWindow.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7397894288549236153"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3185366824488474522"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-window/BrowserWindow.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7397894288549236153"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7397894288549236153"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7397894288549236153"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7397894288549236153"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"beng@google.com"}}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6852538719201267145"},"published":{"$t":"2008-07-31T18:41:47.773Z"},"updated":{"$t":"2009-03-01T05:20:48.001Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-03-01T05:20:47.995Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"BrowserWindow.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6852538719201267145"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3185366824488474522"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-window/BrowserWindow.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6852538719201267145"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6852538719201267145"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6852538719201267145"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6852538719201267145"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"beng@google.com"}}],"sites$revision":{"$t":"3"}},{"gd$etag":"\"YDopeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5780535189554814514"},"published":{"$t":"2009-02-26T21:39:37.095Z"},"updated":{"$t":"2009-02-26T22:11:31.336Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-02-26T22:11:31.336Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"MD5 Certificate Statistics"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cp\u003e\u003cspan style\u003d\"font-style:italic\"\u003e\u003cspan style\u003d\"border-collapse:separate;font-size:13px;font-style:normal;color:rgb(102,102,102);line-height:16px\"\u003eThursday, February 19, 2009\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp /\u003e\r\n\r\n\u003cp\u003eLast December, a group of security researchers published a\r\npractical attack on CAs that issue certificates signed with MD5-based\r\nsignatures (\u003ca href\u003d\"http://www.win.tue.nl/hashclash/rogue-ca/\" rel\u003d\"nofollow\"\u003ehttp://www.win.tue.nl/hashclash/rogue-ca/\u003c/a\u003e).\u003cspan\u003e  \u003c/span\u003eAs a result, some browser developers are\r\nplanning to drop support of MD5 certificates at some point.\u003cspan\u003e  \u003c/span\u003eThe exact time frame depends in part on how\r\nmany HTTPS websites are still using MD5 certificates.\u003cspan\u003e  \u003c/span\u003eJohnathan Nightingale of Mozilla crawled the top 1 million HTTPS sites and published his findings (\u003ca href\u003d\"http://blog.johnath.com/2009/01/21/ssl-information-wants-to-be-free/\" rel\u003d\"nofollow\"\u003ehttp://blog.johnath.com/2009/01/21/ssl-information-wants-to-be-free/\u003c/a\u003e).\u003cspan\u003e  \u003c/span\u003eWith Google Chrome's usage statistics\r\ncollection service, we can help answer this usage question by measuring how\r\noften Google Chrome users are encountering MD5 certificates.\u003cspan\u003e  \u003c/span\u003eWe'd like to share these measurements with\r\nother browser developers.\u003c/p\u003e\r\n\r\n\u003cp\u003eThe following statistics were gathered on our Dev channel\r\nreleases, which are weekly releases based on the tip of the Chromium source\r\ntree.\u003cspan\u003e  \u003c/span\u003eAlso note that only Google Chrome\r\nusers who opted in to usage statistics collection send their numbers to us.\u003c/p\u003e\r\n\r\n\u003cp\u003eThe counts shown below reflect periods of time on the order\r\nof a week, but didn't seem to vary significantly across over a month of\r\ninvestigating.\u003cspan\u003e  \u003c/span\u003eFor each kind of\r\ncertificate, we collected two counts.\u003cspan\u003e \r\n\u003c/span\u003eOne count reflects the number of SSL connections made to sites using\r\nthat kind of certificate, while the other count reflects the number of Google\r\nChrome sessions involving that kind of certificate.\u003cspan\u003e  \u003c/span\u003eThe latter can provide an estimator of the\r\npercentage of users that would be impacted by dropping MD5 certificate support.\u003cspan\u003e  \u003c/span\u003eNote that we ignore the root CA certificates\r\nbecause the signatures in the root CA certificates are irrelevant to an attack\r\nof this sort.\u003c/p\u003e\r\n\r\n\u003cp\u003e1. The number of SSL connections with certain kinds of\r\ncertificates.\u003cspan\u003e  \u003c/span\u003eNote that an HTTP\r\nkeep-alive connection is counted once even though multiple HTTP requests may be\r\nsent over it.\u003c/p\u003e\r\n\r\n\u003cp /\u003e\u003cul\u003e\u003cli\u003eThe number of all SSL connections: 16408141\u003c/li\u003e\u003cli\u003eThe number of SSL connections with an MD5 (end entity or\r\nintermediate CA) certificate in the certificate chain: 365152\u003c/li\u003e\u003cli\u003eThe number of SSL connections with an MD2 (end entity or\r\nintermediate CA) certificate in the certificate chain: 47\u003c/li\u003e\u003cli\u003eThe number of SSL connections with an MD4 (end entity or\r\nintermediate CA) certificate in the certificate chain: 0\u003c/li\u003e\u003cli\u003eThe number of SSL connections with an MD5 intermediate CA\r\ncertificate in the certificate chain: 480\u003c/li\u003e\u003cli\u003eThe number of SSL connections with an MD2 intermediate CA\r\ncertificate in the certificate chain: 25\u003c/li\u003e\u003c/ul\u003e\u003cp /\u003e\r\n\r\n\u003cp\u003e2. The number of Google Chrome sessions in which the user\r\nhas seen certain kinds of certificates.\u003c/p\u003e\r\n\r\n\u003cp /\u003e\u003cul\u003e\u003cli\u003eThe number of all Google Chrome sessions: 542846\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that used SSL: 496090\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that saw an MD5 (end\r\nentity or intermediate CA) certificate: 33134\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that saw an MD2 (end\r\nentity or intermediate CA) certificate: 14\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that saw an MD4 (end\r\nentity or intermediate CA) certificate: 0\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that saw an MD5\r\nintermediate CA certificate: 58\u003c/li\u003e\u003cli\u003eThe number of Google Chrome sessions that saw an MD2\r\nintermediate CA certificate: 10\u003c/li\u003e\u003c/ul\u003e\u003cp /\u003e\r\n\r\n\u003cp\u003eThe percentage of MD5 certificates of the secure Web,\r\nweighted by site popularity and reported by users of Google Chrome's Dev\r\nchannel releases who opted in to usage statistics collection, is\r\n365152/16408141 \u003d 2.23%.\u003cspan\u003e  \u003c/span\u003eLooking at the\r\nper session statistics, we see that the number of user sessions that would be\r\nimpacted by no longer supporting MD5 certificates would be 33134/542846 \u003d\r\n6.1%.\u003cspan\u003e  \u003c/span\u003eEither of these percentages,\r\nthough significantly smaller than reported by Nightingale, suggests that there\r\nwould be a large user impact if MD5 certificate support were suddenly removed.\u003c/p\u003e\r\n\r\n\u003cp\u003eA second alternative being considered is to remove support\r\nfor MD5 intermediate CA certificates. Although this would not completely\r\npreclude an attack, it would significantly raise the cost of attacks. The\r\npercentage of MD5 intermediate CA certificates is notably lower, at\r\n480/16408141 \u0026lt; 0.003%.\u003cspan\u003e  \u003c/span\u003eLooking at a\r\nper session statistics, we can see that only 58/542846 \u003d .011% would be\r\nimpacted by such a change.\u003cspan\u003e  \u003c/span\u003eAs a result,\r\nit should be possible for browsers to drop support of MD5 intermediate CA\r\ncertificates sooner, which will make the MD5 certificate attack much more\r\nexpensive.\u003c/p\u003e\r\n\r\n\u003cp\u003eIn the future we hope to use the statistics collection\r\nservice to gather other information of interest to crypto practitioners, such\r\nas which SSL cipher suites are being used in practice and how many HTTPS sites\r\nuse certificates with certification path validation errors.\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"border-collapse:separate;font-size:13px;color:rgb(102,102,102);line-height:16px\"\u003ePosted by Wan-Teh Chang and Jim Roskind, Software Engineers\u003c/span\u003e\u003c/p\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/md5-certificate-statistics"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5780535189554814514"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780535189554814514"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5780535189554814514"}],"author":[{}],"sites$pageName":{"$t":"md5-certificate-statistics"},"sites$revision":{"$t":"6"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4365050166292079472"},"published":{"$t":"2009-01-23T15:09:20.603Z"},"updated":{"$t":"2009-01-23T15:39:00.998Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-23T15:39:00.997Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Windows-specific interoperability issues"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eWhen users face crash on start or other odd behavior, one helpful thing to do is to gather the list of dlls currently loaded in the chrome.exe processes whenever possible. You can execute the script in \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip?attredirects\u003d0\"\u003elist_chrome.zip\u003c/a\u003e which will generate a file named results.txt. The user can then send the content of this file by email for further analysis.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/windows-specific-interoperability-issues"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4365050166292079472"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4365050166292079472"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4365050166292079472"}],"author":[{"name":{"$t":"Marc-Antoine Ruel"},"email":{"$t":"maruel@chromium.org"}}],"sites$pageName":{"$t":"windows-specific-interoperability-issues"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5109804308176742623"},"published":{"$t":"2009-01-23T15:37:51.200Z"},"updated":{"$t":"2009-01-23T15:37:51.206Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-23T15:37:51.200Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"list_chrome.zip"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5109804308176742623"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4365050166292079472"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5109804308176742623"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5109804308176742623"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5109804308176742623"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5109804308176742623"}],"author":[{"name":{"$t":"Marc-Antoine Ruel"},"email":{"$t":"maruel@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5454167871733644001"},"published":{"$t":"2008-08-30T19:50:01.207Z"},"updated":{"$t":"2009-01-23T15:11:53.111Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-23T15:11:53.110Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Constrained Windows (test plan)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-strategy\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTesting strategy\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-needs-to-be-tested\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eWhat needs to be tested\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-environment\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTesting environment\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Report-a-bug-\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eReport a bug \u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-strategy\" /\u003eTesting strategy\u003c/h2\u003e\r\n\r\nThe Primary Focus will be on verifying whether constrained windows are working as per the design on different operating systems (Windows XP and Vista). More information about constrained windows is available from the \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/constrained-popup-windows\"\u003edesign doc\u003c/a\u003e.\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-What-needs-to-be-tested\" /\u003eWhat needs to be tested\u003c/h2\u003e\r\n\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing\"\u003eBasic testing\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-environment\" /\u003eTesting environment\u003c/h2\u003e\u003c/div\u003e\r\n\r\n\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating systems\u003c/b\u003e: Windows Vista SP1, Windows XP SP2 and SP3\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eAbove configurations with antivirus/antispyware\u003c/b\u003e: Norton 2008, McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor, Lavasoft Ad-ware,\r\nWebroot Spy Sweeper, Zone Alarm Internet Security Suite, Windows Live\r\none Care, Kaspersky Internet Security 7.0, BitDefender Total Security\r\n2008, Panda: Internet Security\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating system languages\u003c/b\u003e: \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eArabic, Bulgarian, Catalan, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eChinese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSimplified)\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e, Chinese\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e (Traditional), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCroatian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCzech, Danish, Dutch, English-UK, English-US, Estonian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFilipino, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFinnish, French, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eGerman, Greek, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHebrew, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHindi, Hungarian, Indonesian, Italian, Japanese, Korean, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLatvian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLithuanian, Norwegian, Polish, Portuguese (Portugal), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003ePortuguese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eBrazil), Romanian, Russian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003e Serbian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSlovak, Slovenian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSpanish, Spanish (Latin America), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSwedish, Thai, Turkish, Ukrainian, Vietnamese\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Report-a-bug-\" /\u003eReport a bug \u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/entry\" style\u003d\"outline-style:none;color:rgb(85,26,139)\"\u003eChromium bug system\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/constrained-windows"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5454167871733644001"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5454167871733644001"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5454167871733644001"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"constrained-windows"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/810778879202695730"},"published":{"$t":"2008-08-30T19:17:41.407Z"},"updated":{"$t":"2009-01-23T15:11:53.083Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T19:17:41.407Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Constrained Windows: Basic Testing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Testcases\" /\u003eTestcases\u003c/h2\u003e\u003cul\u003e\r\n\r\n\u003c/ul\u003e\r\n\u003ctable border\u003d\"1\" cellpadding\u003d\"3\" width\u003d\"80%\"\u003e\r\n\t\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\r\n\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr valign\u003d\"top\"\u003e\r\n\u003ctd\u003eSimple test: constrained window\u003c/td\u003e\r\n\u003ctd\u003e\r\n\t\u003col\u003e\r\n\t\t\u003cli\u003eLog in to \u003ca href\u003d\"http://mail.google.com\"\u003ehttp://mail.google.com\u003c/a\u003e.\u003c/li\u003e\r\n\t\t\u003cli\u003eGoogle Talk in Gmail will load on left side. Click on any contact to open a chat window \u003c/li\u003e\r\n\t\t\u003cli\u003ePop-out the chat window.\u003c/li\u003e\r\n\t\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003eChat window will open as a constrained window on the left side of the page ; title bar : default icon and title \"name - chat - Google Chrome\"\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr valign\u003d\"top\"\u003e\r\n\u003ctd\u003ePop-up displayed in constrained window\u003c/td\u003e\u003ctd style\u003d\"text-align:center\"\u003e\u003col\u003e\u003cli style\u003d\"text-align:left\"\u003eVisit any website which opens a pop-up\u003c/li\u003e\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003eIf your settings are checked for : Options\u0026gt; Under the hood\u0026gt; Web Content : Notify me when a pop-up is blocked then blocked pop-up will be notified at bottom right side of the page with title bar : \"Blocked pop-up\"\u003cbr /\u003eOn clicking blocked pop-up, title bar will change to \"default icon and  title - Google Chrome\". If no title then \"default icon and Google Chrome\"\u003cbr /\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr valign\u003d\"top\"\u003e\r\n\u003ctd\u003ePlay video in constrained window\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\u003cli\u003eVisit any website which plays video in constrained window\u003c/li\u003e\u003c/ol\u003e\r\n\u003c/td\u003e\r\n\u003ctd\u003eA constrained window will launch for the video link ; title bar : \"default icon and title  - google chrome\"\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr valign\u003d\"top\"\u003e\r\n\u003ctd\u003eConstrained window - launch with \u003cspan style\u003d\"font-family:courier new,monospace\"\u003ewindow.open()\u003c/span\u003e and close with \u003cspan style\u003d\"font-family:courier new,monospace\"\u003ewindow.close()\u003c/span\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\u003cli\u003eVisit \u003ca href\u003d\"http://html.tests.googlepages.com/example1.html\"\u003ehttp://html.tests.googlepages.com/example1.html\u003c/a\u003e\r\n\u003c/li\u003e\r\n\u003cli\u003eClick \u003cb\u003eOpen window\u003c/b\u003e.\u003c/li\u003e\r\n\u003cli\u003eClick \u003cb\u003eClose window\u003c/b\u003e.\r\n\u003c/li\u003e\u003c/ol\u003e\r\n\u003c/td\u003e\r\n\u003ctd\u003eAfter Step 2: A constrained window with height\u003d200px and width\u003d300px will be launched.\u003cbr /\u003e\r\n\t\u003cbr /\u003e\r\n\tAfter Step 3: The constrained window will be closed.\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5454167871733644001"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/810778879202695730"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/810778879202695730"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/810778879202695730"}],"author":[{"email":{"$t":"jasneet@google.com"}}],"sites$pageName":{"$t":"constrained-windows--basic-testing"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5176329569175866273"},"published":{"$t":"2008-08-30T19:49:47.143Z"},"updated":{"$t":"2009-01-23T15:11:29.286Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-23T15:11:29.286Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Spell Check (test plan)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-strategy\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTesting strategy\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-What-needs-to-be-tested\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eWhat needs to be tested\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-environment\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTesting environment\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Report-a-bug-\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eReport a bug \u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Testing-strategy\" /\u003eTesting strategy\u003c/h2\u003e\r\n\r\nThe Primary Focus will be on verifying spell check behavior in Chromium.\u003cbr /\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-What-needs-to-be-tested\" /\u003eWhat needs to be tested\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/spell-check/spell-check--basic-testing\"\u003eBasic testing\u003c/a\u003e\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-environment\" /\u003eTesting environment\u003c/h2\u003e\u003c/div\u003e\r\n\r\n\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating systems\u003c/b\u003e: Windows Vista SP1, Windows XP SP2 and SP3\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eAbove configurations with antivirus/antispyware\u003c/b\u003e: Norton 2008, McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor, Lavasoft Ad-ware,\r\nWebroot Spy Sweeper, Zone Alarm Internet Security Suite, Windows Live\r\none Care, Kaspersky Internet Security 7.0, BitDefender Total Security\r\n2008, Panda: Internet Security\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating system languages\u003c/b\u003e: \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eArabic, Bulgarian, Catalan, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eChinese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSimplified)\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e, Chinese\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e (Traditional), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCroatian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCzech, Danish, Dutch, English-UK, English-US, Estonian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFilipino, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFinnish, French, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eGerman, Greek, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHebrew, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHindi, Hungarian, Indonesian, Italian, Japanese, Korean, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLatvian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLithuanian, Norwegian, Polish, Portuguese (Portugal), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003ePortuguese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eBrazil), Romanian, Russian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003e Serbian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSlovak, Slovenian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSpanish, Spanish (Latin America), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSwedish, Thai, Turkish, Ukrainian, Vietnamese\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Report-a-bug-\" /\u003eReport a bug \u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/entry\" style\u003d\"outline-style:none;color:rgb(85,26,139)\"\u003eChromium bug system\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/spell-check"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5176329569175866273"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5176329569175866273"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5176329569175866273"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"spell-check"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3871902357788555092"},"published":{"$t":"2008-08-30T19:04:35.263Z"},"updated":{"$t":"2009-01-23T15:11:29.272Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-02T17:07:38.935Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Spell Check: Basic Testing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Testcases\" /\u003eTestcases\u003c/h2\u003e\u003cul\u003e\r\n\r\n\u003c/ul\u003e\r\n\u003ctable border\u003d\"1\" cellpadding\u003d\"5\" width\u003d\"80%\"\u003e\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e\u003cbr /\u003eRed underline for spelling errors\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\t\u003cli\u003eLaunch Chromium.\u003c/li\u003e\r\n\t\u003cli\u003eNavigate to \u003ca href\u003d\"http://mail.google.com\"\u003ehttp://mail.google.com\u003c/a\u003e.\u003c/li\u003e\r\n\t\u003cli\u003eSign in to your account.\u003c/li\u003e\r\n\t\u003cli\u003eClick \u003cb\u003eCompose Mail\u003c/b\u003e.\u003c/li\u003e\r\n\t\u003cli\u003eEnter \u003cb\u003egogl\u003c/b\u003e plus a space in the message field.\u003cbr /\u003e\r\n\t\u003c/li\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cb\u003e\u003cbr /\u003egogle\u003c/b\u003e will be underlined in red.\u003cbr /\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e\u003cbr /\u003eLogin form: username will not be red underlined\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\t\u003cli\u003eLaunch Chromium.\u003c/li\u003e\r\n\t\u003cli\u003eVisit \u003ca href\u003d\"http://mail.google.com\"\u003ehttp://mail.google.com\u003c/a\u003e (if signed in, sign out to see the login page)\u003c/li\u003e\r\n\t\u003cli\u003eEnter any text in the \u003cb\u003eUsername\u003c/b\u003e field.\u003cbr /\u003e\r\n\t\u003c/li\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cbr /\u003eUsername will not be underlined in red.\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003e\u003cp\u003eMis-spelled text that is copied and pasted will be underlined in red\u003cbr /\u003e\r\n\t\u003c/p\u003e\r\n\t\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\t\u003cli\u003eLaunch Chromium.\u003c/li\u003e\r\n\t\u003cli\u003eNavigate to \u003ca href\u003d\"http://mail.google.com\"\u003ehttp://mail.google.com\u003c/a\u003e.\u003c/li\u003e\r\n\t\u003cli\u003eSign in to your account.\u003c/li\u003e\r\n\t\u003cli\u003eClick \u003cb\u003eCompose Mail\u003c/b\u003e\u003c/li\u003e\r\n\t\u003cli\u003eCopy and paste any mis-spelled text into the message field.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\t\u003c/td\u003e\r\n\u003ctd\u003e \u003cbr /\u003eMis-spelled text will be underlined in red.\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\r\n\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5176329569175866273"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/spell-check/spell-check--basic-testing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3871902357788555092"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3871902357788555092"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3871902357788555092"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"spell-check--basic-testing"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"},"published":{"$t":"2009-01-23T15:08:13.442Z"},"updated":{"$t":"2009-01-23T15:11:13.713Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-23T15:11:13.712Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Frontend testing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eNote: these pages describe the testing plan for Google Chrome. Some of it only applies to Google Chrome, but much of it also applies to Chromium, which is why it's included here. \u003cbr /\u003e\u003cul style\u003d\"margin-right:10px\"\u003e\u003cli style\u003d\"padding-top:1px;padding-right:0px;padding-bottom:1px;padding-left:0px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/spell-check\" style\u003d\"color:rgb(0,102,204);outline-style:none;outline-width:initial;outline-color:initial\"\u003eSpell Check\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"padding-top:1px;padding-right:0px;padding-bottom:1px;padding-left:0px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/constrained-windows\" style\u003d\"outline-style:none;outline-width:initial;outline-color:initial;color:rgb(71,18,100)\"\u003eConstrained Windows\u003c/a\u003e\u003c/li\u003e\u003cli style\u003d\"padding-top:1px;padding-right:0px;padding-bottom:1px;padding-left:0px\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing/windows-specific-interoperability-issues\"\u003eWindows-specific interoperability issues\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/frontend-testing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4893189910357617935"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4893189910357617935"}],"author":[{"name":{"$t":"Marc-Antoine Ruel"},"email":{"$t":"maruel@chromium.org"}}],"sites$pageName":{"$t":"frontend-testing"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1068576248521281679"},"published":{"$t":"2009-01-07T02:44:13.291Z"},"updated":{"$t":"2009-01-07T02:45:08.671Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2009-01-07T02:45:08.671Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"greasemonkey"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003ePage moved to \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/user-scripts\"\u003euser scripts\u003c/a\u003e.\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/greasemonkey"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1068576248521281679"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1068576248521281679"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1068576248521281679"}],"author":[{"name":{"$t":"Aaron Boodman"},"email":{"$t":"aa@chromium.org"}}],"sites$pageName":{"$t":"greasemonkey"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1327237267821868771"},"published":{"$t":"2008-12-17T17:47:22.654Z"},"updated":{"$t":"2008-12-17T17:47:22.665Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T17:47:22.654Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Event_Watcher_Toolbar.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1327237267821868771"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/Event_Watcher_Toolbar.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1327237267821868771"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1327237267821868771"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1327237267821868771"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1327237267821868771"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1859262097032868997"},"published":{"$t":"2008-12-17T17:47:00.335Z"},"updated":{"$t":"2008-12-17T17:47:00.346Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T17:47:00.335Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Inspect_Toolbar.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1859262097032868997"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/Inspect_Toolbar.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1859262097032868997"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1859262097032868997"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1859262097032868997"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1859262097032868997"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5572226897163974149"},"published":{"$t":"2008-12-17T17:45:40.732Z"},"updated":{"$t":"2008-12-17T17:45:40.750Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T17:45:40.732Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_toolbar.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5572226897163974149"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/807287525380606856"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility/chrome_toolbar.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5572226897163974149"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5572226897163974149"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5572226897163974149"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5572226897163974149"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/580296558443582680"},"published":{"$t":"2008-12-17T01:01:17.536Z"},"updated":{"$t":"2008-12-17T01:19:25.290Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T01:19:25.290Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Subscribing to feeds"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv style\u003d\"text-align:left;font-family:arial,sans-serif\"\u003eThis document describes how Chrome will\r\nenable users to subscribe to RSS/Atom feeds in the feed reader of their\r\nchoice. It does not cover any feed reading capability in Chrome itself.\u003cbr /\u003e\u003cbr /\u003e\u003c/div\u003e\r\n\u003cdiv style\u003d\"font-family:arial,sans-serif\"\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Table-of-contents\" /\u003e\u003cb\u003eTable of contents\u003c/b\u003e\u003c/h2\u003e\u003cul\u003e\u003cli\u003eDiscovery\u003c/li\u003e\u003cli\u003ePreview\u003c/li\u003e\u003cli\u003eSubscription\u003c/li\u003e\u003cli\u003eAdding feed readers\u003c/li\u003e\u003cli\u003ePodcasts\u003c/li\u003e\u003cli\u003eTasks to implement\u003cbr /\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Discovery\" /\u003eDiscovery\u003c/h2\u003eWe will autodetect RSS and Atom feeds using the standard \u003ca href\u003d\"http://diveintomark.org/archives/2003/12/19/atom-autodiscovery\" title\u003d\"autodiscovery tags\" rel\u003d\"nofollow\"\u003eautodiscovery tags\u003c/a\u003e:\u003cbr /\u003e\u003cbr /\u003e\u003ccode\u003e\u0026lt;link rel\u003d\"alternate\" type\u003d\"application/atom+xml\" href\u003d\"http://www.example.com/xml/atom.xml\"\u0026gt;\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003eWhen a feed is available for a page, we will display an rss icon in the address bar:\u003cbr /\u003e\u003cbr /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/feed-subscriptions/default.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229475725986/user-experience/feed-subscriptions/default.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cbr /\u003eClicking\r\non the feed icon will redirect the user to feed, nicely formatted for\r\nthe browser. If the page specifies multiple feed formats, the icon will\r\nlink to the\r\nfirst feed specified. The default formatting for feeds may allow the\r\nuser to access other options (see \u003cb\u003ePreview \u003c/b\u003ebelow).\u003cbr /\u003e\u003cbr /\u003eWe should also consider whether we want to detect feed links in the\r\ncontent of the page (for pages without auto-discovery). However, given\r\nthe popularity of auto-discovery mechanisms, this probably won't be\r\nnecessary.\u003cbr /\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Preview\" /\u003ePreview\u003c/h2\u003e\u003cbr /\u003eWhen the user follows a link to a feed file, Chrome formats it for display in the browser:\u003cbr /\u003e\u003cdiv style\u003d\"padding:1em 0pt;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/feed-subscriptions/rss_preview.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1229475837394/user-experience/feed-subscriptions/rss_preview.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003cb style\u003d\"color:rgb(255,0,0)\"\u003eCaveat:\u003c/b\u003e parsing feeds can be tricky, so in the interest of shipping this quickly, the initial implementation will likely not include a preview of the content.\u003cbr /\u003e\u003c/div\u003eIf\r\nthe feed is malformed, we would display an error instead of the feed\r\ncontents (rather than including a lot of unnecessary feed parsing\r\ncode). Users could still see the title and suscribe to the feed.\u003cbr /\u003e\u003cbr /\u003eIf the feed specifies custom formatting (such as Feedburner's\r\nBrowserFriendly), we could use that formatting instead. In that case, we would still display\r\nthe feed icon in the address bar, which would redirect to the\r\nChrome-formatted version of the feed.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIf the user access the feed preview page from the rss icon in the\r\naddress bar, and the referring page had multiple autolinked feeds,\r\nthese could also be chosen from the preview page.\u003cbr /\u003e\r\n\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Subscribing\" /\u003eSubscribing\u003c/h2\u003eThe\r\npreview page display includes a large button to subscribe to the feed\r\nin the feed reader of your choice. Initially, this setting is \"choose\r\nyour feed reader\". After this, it defaults to the most recently used\r\nfeed reader.\u003cbr /\u003e\u003cbr /\u003eBy\r\ndefault, we will include a limited number of popular feed readers (list TBD). Ideally, we should also detect popular\r\nfeed-readers installed locally.\r\nIf settings have been imported from Firefox, we should use that list\r\ninstead (including remembering the default setting). Finally, users can\r\nalso add the feed reader of their choice (see \u003cb\u003eAdding feed readers\u003c/b\u003e below).\u003cbr /\u003e\u003cbr /\u003eUsers\r\ncan set a preference to bypass the preview page. From then on feeds\r\nwill be redirected to the subscription page for the feed reader of\r\ntheir choice.\u003cbr /\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Adding-feed-readers\" /\u003eAdding feed readers\u003c/h2\u003eUsers can add web-based and local feed readers from the feed preview page:\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003e[mock that allows to add a web-based or local feed reader]\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003eWe will also need a way to\r\nchange your feed reader from the settings dialog, in case you\r\nhave chosen to bypass the feed preview page.\u003cbr /\u003e\u003cbr /\u003eA newly added feed reader becomes the default selected option the next time a feed is previewed.\u003cbr /\u003e\u003cbr /\u003eWeb-based feed readers can also be added through Javascript using the \u003ca href\u003d\"https://developer.mozilla.org/en/DOM/window.navigator.registerContentHandler\" title\u003d\"registerContentHandler\" rel\u003d\"nofollow\"\u003eregisterContentHandler\u003c/a\u003e:\u003cbr /\u003e\u003cpre\u003enavigator.registerContentHandler(\"\u003ccode\u003eapplication/atom+xml\u003c/code\u003e\",\u003cbr /\u003e \"http://www.theeasyreaderurl.com?feed\u003d%s\",\u003cbr /\u003e \"Easy Reader\");\u003cbr /\u003e\u003c/pre\u003e\u003cp\u003eWhen this function is called, the following dialog is displayed:\u003c/p\u003e\u003cp\u003e\u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003e[mock of permissions to install a feed reader]\u003c/span\u003e \u003c/p\u003e\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\u003ch2 style\u003d\"background-color:rgb(255,255,255)\"\u003e\u003ca name\u003d\"TOC-Podcasts\" /\u003ePodcasts\u003c/h2\u003eThe feed reader choice for podcasts (i.e. media feeds that contain audio or video files) should be stored as a\r\nseparate setting. The default options should also be different (e.g.\r\niTunes, Window Media\r\nPlayer...).\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"background-color:rgb(255,255,0)\"\u003e[mock of how we handle podcasts in add/manage feeds]\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003eIdeally, the formatting for Media RSS feeds should\r\ndisplay embedded readers for the attached media files.\u003cbr /\u003e\u003cbr /\u003e\u003ch2 style\u003d\"background-color:rgb(255,255,255)\"\u003e\u003ca name\u003d\"TOC-Tasks-to-implement\" /\u003e\u003cb\u003eTasks to implement\u003c/b\u003e\u003c/h2\u003e\u003cb\u003eMinimum\u003c/b\u003e\u003cbr /\u003e\u003cul\u003e\u003cli\u003eFeed autodetect\u003c/li\u003e\u003cli\u003eFeed icon in address bar\u003c/li\u003e\u003cli\u003eBasic feed preview page (title and subscribe button)\u003cbr /\u003e\u003c/li\u003e\u003cli\u003eAdding/managing feed readers\u003c/li\u003e\u003cli\u003eregisterContentHandler\u003c/li\u003e\u003cli\u003eImport of Firefox feed settings\u003c/li\u003e\u003cli\u003eSeparate handler support for podcasts\u003c/li\u003e\u003c/ul\u003e\u003cb\u003eNice to have\u003c/b\u003e\u003cbr /\u003e\u003cul\u003e\u003cli\u003ePreview of feed contents\u003c/li\u003e\u003cli\u003eHandling of custom formatting\u003c/li\u003e\u003cli\u003eEmbedded players for podcasts\u003c/li\u003e\u003cli\u003eDetection of locally installed feed readers\u003c/li\u003e\u003cli\u003eHandling of multiple autolinked feeds\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\r\n\r\n\r\n\r\n\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/feed-subscriptions"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/580296558443582680"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/580296558443582680"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/580296558443582680"}],"author":[{}],"sites$pageName":{"$t":"feed-subscriptions"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/618948118388005274"},"published":{"$t":"2008-12-17T01:03:57.388Z"},"updated":{"$t":"2008-12-17T01:03:57.394Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T01:03:57.388Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"rss_preview.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/618948118388005274"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/580296558443582680"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/feed-subscriptions/rss_preview.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/618948118388005274"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/618948118388005274"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/618948118388005274"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/618948118388005274"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2010015295381858132"},"published":{"$t":"2008-12-17T01:02:05.974Z"},"updated":{"$t":"2008-12-17T01:02:05.986Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T01:02:05.974Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"default.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2010015295381858132"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/580296558443582680"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/feed-subscriptions/default.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2010015295381858132"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2010015295381858132"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2010015295381858132"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2010015295381858132"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/567891596231582105"},"published":{"$t":"2008-12-17T00:53:36.793Z"},"updated":{"$t":"2008-12-17T00:53:36.799Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T00:53:36.793Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"menu_context.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/567891596231582105"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/menu_context.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/567891596231582105"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/567891596231582105"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/567891596231582105"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/567891596231582105"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2527413610745312543"},"published":{"$t":"2008-12-17T00:49:05.499Z"},"updated":{"$t":"2008-12-17T00:49:05.507Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T00:49:05.499Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"install_dialog.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2527413610745312543"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/install_dialog.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2527413610745312543"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2527413610745312543"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2527413610745312543"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2527413610745312543"}],"author":[{}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8078366055844623169"},"published":{"$t":"2008-12-17T00:33:24.217Z"},"updated":{"$t":"2008-12-17T00:48:13.893Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T00:48:13.889Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"menu.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8078366055844623169"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/menu.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8078366055844623169"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8078366055844623169"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8078366055844623169"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8078366055844623169"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3392218923417099424"},"published":{"$t":"2008-12-17T00:32:33.754Z"},"updated":{"$t":"2008-12-17T00:47:03.561Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-17T00:47:03.556Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"default.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3392218923417099424"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5226039815607163543"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarklets/default.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3392218923417099424"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3392218923417099424"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3392218923417099424"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3392218923417099424"}],"author":[{}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6423221476069090077"},"published":{"$t":"2008-12-06T00:11:02.941Z"},"updated":{"$t":"2008-12-06T00:11:02.950Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-06T00:11:02.941Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"FindBarTabSwitching.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6423221476069090077"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7737852694122413723"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/find-bar/FindBarTabSwitching.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6423221476069090077"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6423221476069090077"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6423221476069090077"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6423221476069090077"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4600138699298857786"},"published":{"$t":"2008-12-06T00:10:47.834Z"},"updated":{"$t":"2008-12-06T00:10:47.843Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-06T00:10:47.834Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"FindBarGeneral.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4600138699298857786"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7737852694122413723"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/find-bar/FindBarGeneral.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4600138699298857786"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4600138699298857786"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4600138699298857786"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4600138699298857786"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2677311392223228602"},"published":{"$t":"2008-12-06T00:10:31.033Z"},"updated":{"$t":"2008-12-06T00:10:31.045Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-12-06T00:10:31.033Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"FindBar.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2677311392223228602"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7737852694122413723"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/find-bar/FindBar.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2677311392223228602"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2677311392223228602"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2677311392223228602"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2677311392223228602"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDspeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"},"published":{"$t":"2008-11-21T00:06:02.925Z"},"updated":{"$t":"2008-11-23T22:48:07.466Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-11-23T22:48:07.466Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Info Bars"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eInfo Bars are informational messages associated with a Tab. They are displayed when something happens in the Tab that the user should be aware of, e.g. a plugin has crashed, or the user can save a password they just entered. They are designed to be non-modal so as not to interrupt the workflow.\u003cdiv\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Proposed-Design\" /\u003eProposed Design\u003c/h4\u003e\u003cdiv\u003eThe TabContents object provides a simple API that clients can use to add InfoBars to the presentation of that Tab. A client must have an object implementing an InfoBarDelegate interface which provides some basic information and callbacks for an InfoBar UI. It calls TabContents::AddInfoBar to add the InfoBar to that Tab. The TabContents uses the NOTIFY_TAB_CONTENTS_INFOBAR_ADDED notification (source \u003d TabContents, details \u003d the delegate) to broadcast the change to the UI. There is also a symmetrical NOTIFY_TAB_CONTENTS_INFOBAR_REMOVED.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eOn the UI side, Info Bars are hosted and owned by the window UI, more specifically by a views::View subclass called InfoBarContainer that is hosted within the BrowserView class.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThere are several different types of InfoBar, and corresponding InfoBarDelegate interfaces that provide common InfoBar appearance. The simplest is AlertInfoBar and AlertInfoBarDelegate, which allows for the display of a string message and optional icon. If the client does not want to implement this message it can create an instance of SimpleAlertInfoBarDelegate, which is constructed with a string and an icon, and deletes itself automatically when the InfoBar is closed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnother common type is ConfirmInfoBar and ConfirmInfoBarDelegate, which allows the client to ask the user a question and control buttons to receive their response. The delegate interface notifies the client of the button chosen.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eIt is possible for the client to create custom InfoBars by subclassing the InfoBar view and the InfoBarDelegate interface. InfoBarDelegate should be platform independent, as it is used by TabContents which is platform independent. The implementation of an InfoBar may vary significantly from platform to platform.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eHere is a diagram showing the relationship between the objects in a couple of use cases:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/developers/design-documents/info-bars/2infobars.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1227229151439/developers/design-documents/info-bars/2infobars.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Add-Flows\" /\u003eAdd Flows\u003c/h4\u003e\u003cdiv\u003eAn instance of object  X \"x1\" implements AlertInfoBarDelegate, and its lifetime is managed by some other object. Here is the flow for its addition to TabContents t:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003et-\u0026gt;AddInfoBar(x1);\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThis adds x1 to t's list of InfoBarDelegates, and broadcasts a NOTIFY_TAB_CONTENTS_INFOBAR_ADDED that the InfoBarContainer in the associated hosting BrowserView observes. InfoBarContainer calls x1's \u003cspan style\u003d\"font-weight:bold\"\u003eCreateInfoBar \u003c/span\u003emethod to construct a platform-specific View for the InfoBar and adds it to its list of children, beginning an animation that causes the InfoBar to appear to slide in.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Remove-Flows\" /\u003eRemove Flows\u003c/h4\u003e\u003cdiv\u003eThe user clicks the close button on x1's InfoBar view. The InfoBar view communicates, via its InfoBarContainer back through to the selected TabContents telling it to remove the associated InfoBarDelegate. The TabContents removes the delegate from its list and broadcasts NOTIFY_TAB_CONTENTS_INFOBAR_REMOVED. The InfoBarContainer observes this message and begins an animation that causes the associated InfoBar to appear to slide out. When the slide out animation is completed, the InfoBar calls through to its delegate saying that the InfoBar is about to be deleted. The InfoBarDelegate implementation can use this as an opportunity to delete itself if it is not managed some other way.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-Tab-Switch-Flows\" /\u003eTab Switch Flows\u003c/h4\u003e\u003cdiv\u003eWhen the user switches tabs, the BrowserView receives a TabSelectedAt function call via its implementation of TabStripModelObserver. The BrowserView calls the ChangeTabContents method on the InfoBarContainer, which causes it to reset its selected TabContents value, and remove and add observers from the old and new TabContents. It also uses this opportunity to update its visual state, removing the child views associated with the old TabContents and constructing a new set of InfoBar views for the newly selected TabContents. InfoBar views are designed to be destroyed and re-created every time tab selection changes. When InfoBar views are created in this mode, there is no animation as they are added and removed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eAnother important note: The InfoBarContainer's active TabContents is set to NULL whenever a TabContents is detached from a window, much as the BrowserView's TabContentsContainer's active TabContents is set to NULL. This is done because when you drag the last tab out of a window, that window is destroyed, which results in WM_NCDESTROY being sent to the frame and the focus manager to be shut down. However the view hierarchy is not destroyed until OnFinalMessage. Because both InfoBarContainer and TabContentsContainerView configure the focus manager, this shutdown behavior means that both of these views may try and configure the FocusManager after it has been destroyed.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eA possible improvement to this situation would be to have the RootView delete its view hierarchy when the window is destroyed, rather than waiting for OnFinalMessage.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-InfoBar-Uniqueness\" /\u003eInfoBar Uniqueness\u003c/h4\u003e\u003cdiv\u003eThe InfoBarContainer supports showing of multiple child InfoBar at the same time. This allows client code to queue up multiple notices that the user can respond to at their leisure. Sometimes however client code may wish there to be only one InfoBar for a specific type of notice. The InfoBarDelegate has an Equals method that can be implemented to support this functionality. Consider the AlertInfoBarDelegate, which is used to display a simple text string. The TabContents will never allow two AlertInfoBarDelegates with the same text string to be shown. AlertInfoBarDelegate overrides InfoBarDelegate::EqualsDelegate to test equality by comparing text strings with another AlertInfoBarDelegate. This ensures that multiple InfoBars with the same string are not added.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-InfoBar-Layout\" /\u003eInfoBar Layout\u003c/h4\u003e\u003cdiv\u003eThe InfoBarContainer overrides views::View::GetPreferredSize to communicate to the BrowserView its total size during Layout. When InfoBars are added or removed, or their height changes due to animations, the InfoBarContainer tells the BrowserView to update its Layout.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-InfoBar-Expiration\" /\u003eInfoBar Expiration\u003c/h4\u003e\u003cdiv\u003eBy default, InfoBars \"expire\" (automatically close) after a reload or a navigation to the TabContents that they were opened within. Delegates can override the \u003cspan style\u003d\"font-weight:bold\"\u003eShouldExpire\u003c/span\u003e method to customize this behavior.\u003c/div\u003e\u003ch4\u003e\u003ca name\u003d\"TOC-InfoBar-View-Ownership\" /\u003eInfoBar View Ownership\u003c/h4\u003e\u003cdiv\u003eInfoBar views are not owned by the view hierarchy. They automatically delete themselves after they are removed from the View hierarchy. This is not done immediately but after a return to the message loop since the stack of View hierarchy changed notifications must be allowed to completely unwind.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3863791766242792620"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/info-bars"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5978790282349603095"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$pageName":{"$t":"info-bars"},"sites$revision":{"$t":"7"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7991320368041314261"},"published":{"$t":"2008-11-21T00:59:11.427Z"},"updated":{"$t":"2008-11-21T00:59:11.439Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-11-21T00:59:11.427Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"2infobars.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7991320368041314261"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/info-bars/2infobars.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7991320368041314261"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7991320368041314261"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7991320368041314261"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7991320368041314261"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4659957924556155112"},"published":{"$t":"2008-11-21T00:12:30.069Z"},"updated":{"$t":"2008-11-21T00:12:30.105Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-11-21T00:12:30.069Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"InfoBars.graffle"},"summary":{},"content":{"type":"application/octet-stream","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4659957924556155112"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"},{"rel":"alternate","type":"application/octet-stream","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/info-bars/InfoBars.graffle"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4659957924556155112"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4659957924556155112"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4659957924556155112"},{"rel":"edit-media","type":"application/octet-stream","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4659957924556155112"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6222864959885872060"},"published":{"$t":"2008-11-21T00:11:54.668Z"},"updated":{"$t":"2008-11-21T00:11:54.677Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-11-21T00:11:54.668Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"InfoBars.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6222864959885872060"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5978790282349603095"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/info-bars/InfoBars.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6222864959885872060"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6222864959885872060"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6222864959885872060"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6222864959885872060"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"ben@chromium.org"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6650149031890810278"},"published":{"$t":"2008-09-15T23:49:36.014Z"},"updated":{"$t":"2008-09-15T23:49:36.027Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-15T23:49:36.014Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_0.2_psd.zip"},"summary":{},"content":{"type":"application/x-zip-compressed","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6650149031890810278"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"},{"rel":"alternate","type":"application/x-zip-compressed","href":"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design/chrome_0.2_psd.zip"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6650149031890810278"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6650149031890810278"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6650149031890810278"},{"rel":"edit-media","type":"application/x-zip-compressed","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6650149031890810278"}],"author":[{}],"sites$revision":{"$t":"4"}},{"gd$etag":"\"YDgpeyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/852707397186915090"},"published":{"$t":"2008-08-28T23:31:17.614Z"},"updated":{"$t":"2008-09-04T23:23:20.968Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-04T23:23:20.968Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"New Tab Page"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Sections\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eSections\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Future-Work\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eFuture Work\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Experimenting-with-the-New-Tab-Page\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eExperimenting with the New Tab Page\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n The new tab page is the default starting point for all tabs - it is designed to get the user where they want to go, and is not meant to be an information resource like the user's home page; that is, the new tab page is not intended to be a destination, but rather a jumping-off point to other destinations - we strongly want to avoid cognitive load and distractions for the user, especially those creating new tabs for other purposes.\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Sections\" /\u003eSections\u003c/h2\u003e\u003c/div\u003e\u003cdiv\u003eThe new tab page is made up of several sections; these sections will vary in size and presentation method as we figure out which sections are and are not useful.\u003cbr /\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003eMost Visited\u003c/b\u003e: A grid of thumbnails showing the user's nine most frequently visited sites.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003eSearches\u003c/b\u003e: Like most visited, the searches section shows your most frequent searches. Currently, this is a list of the most frequently used keyword searches, but will be expanded to include all form-field based searches.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003eRecent Bookmarks\u003c/b\u003e: A list of the user's nine most recently created bookmarks.\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\u003cli\u003e\u003cb\u003eRecently Closed Tabs\u003c/b\u003e: A list of up to three tabs that have been closed within the last X minutes. Clicking an item here will restore the tab to the same state it was in when it was closed.\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Future-Work\" /\u003eFuture Work\u003c/h2\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cul style\u003d\"margin-left:10px\"\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eShow the end-points of navigations (if you always click on the same link after going to a root page, why not show the linked page instead).\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eAllow control over the contents of the grid\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eVary content depending on context (time of day, IP block, etc)\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Experimenting-with-the-New-Tab-Page\" /\u003eExperimenting with the New Tab Page\u003c/h2\u003eIt is relatively easy to make edits to the new tab page as its frontend is constructed with HTML.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eTo edit the HTML, look for \u003cspan style\u003d\"font-family:courier new,monospace\"\u003ebrowser\\resources\\new_tab.html\u003c/span\u003e - the backend for this page is defined in \u003cspan style\u003d\"font-family:courier new,monospace\"\u003ebrowser\\dom_ui\\new_tab_ui.cc\u003c/span\u003e. After making HTML changes, you'll need to recompile the resources:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cblockquote style\u003d\"border:medium none;margin:0pt 0pt 0pt 40px;padding:0px\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/new-tab-page/new_tab_resources.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg height\u003d\"420\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197828231/user-experience/new-tab-page/new_tab_resources.png\" style\u003d\"border-width:0px\" width\u003d\"142\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/blockquote\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003col\u003e\u003cli\u003eRight-click \u003cspan style\u003d\"font-family:courier new,monospace\"\u003enew_tab.html\u003c/span\u003e and select \u003cb\u003eCompile\u003c/b\u003e.\u003c/li\u003e\u003cli\u003eRight-click \u003cspan style\u003d\"font-family:courier new,monospace\"\u003ebrowser_resources.rc\u003c/span\u003e and select \u003cb\u003eCompile\u003c/b\u003e.\u003c/li\u003e\u003cli\u003ePress F5 to run Chromium.\u003c/li\u003e\u003c/ol\u003eYou must follow this process for all HTML changes.\u003cbr /\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/new-tab-page"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/852707397186915090"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/852707397186915090"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/852707397186915090"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"new-tab-page"},"sites$revision":{"$t":"4"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4459056034705252765"},"published":{"$t":"2008-08-28T23:03:10.951Z"},"updated":{"$t":"2008-09-02T17:12:47.278Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-28T23:03:10.951Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Tabs"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cspan style\u003d\"border-collapse:separate;font-weight:bold\"\u003e\r\n\u003ch4 style\u003d\"margin:10px 0px 10px 10px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-1\" /\u003e\r\n\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/tab.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197829431/user-experience/tabs/tab.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\r\n\u003c/h4\u003e\r\n\u003c/span\u003e\r\n\u003cp\u003eTabs are the title bar-like representation of a webpage - like title bars, they can be moved independently, but can also be grouped together to form a single window of tabs. Chromium's UI is based around the treatment of tabs and their content as individual top-level elements rather than as children of a parent window.\u003cbr /\u003e\r\n\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Keyboard-Switching\" /\u003eKeyboard Switching\u003c/h2\u003e\r\n\u003cp\u003eCtrl+Tab, Ctrl+Shift+Tab, Ctrl+PgUp and Ctrl+PgDn can all be used to switch back and forth between tabs. While there is great demand for an MRU-ordered switcher, we've so far been unable to find an MRU switcher that makes sense beyond the first three most recent tabs, or one that works well with background-created tabs.\u003c/p\u003e\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Overflow\" /\u003eOverflow\u003c/h2\u003e\r\n\r\n\u003cp\u003eRather than enforcing a minimum size, tabs continue to shrink as tabs are added - this was found to be more satisfying than forcing users to swap to a different tab management model at some arbitrary cutoff point. It is also assumed that users with a large number of tabs will be more able to manage those tabs, and future work (such as a tab switcher overlay) may help address those cases.\u003c/p\u003e\r\n\r\n\u003ch2\u003e\u003ca name\u003d\"TOC-Misc\" /\u003eMisc\u003c/h2\u003e\r\n\u003cp\u003eThe tabs are depth ordered from left to right, with the active tab always in front - tabs do not maintain any other depth order (changing the depth sort based on focus order was more confusing than useful).\u003c/p\u003e\r\n\r\n\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/tabs"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4459056034705252765"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4459056034705252765"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4459056034705252765"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"tabs"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD8peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8755937530886911156"},"published":{"$t":"2008-08-30T19:28:30.812Z"},"updated":{"$t":"2008-09-02T16:34:38.288Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-02T16:34:38.287Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Installer (test plan)"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-strategy\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTesting strategy\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Test-scenarios\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eTest scenarios\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Testing-environment\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eTesting environment\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Report-a-bug-\"\u003e\u003cstrong\u003e4 \u003c/strong\u003eReport a bug \u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Testing-strategy\" /\u003eTesting strategy\u003c/h2\u003e\u003cspan style\u003d\"font-size:16px;border-collapse:separate\"\u003e\u003cfont size\u003d\"2\"\u003eThe Primary Focus will be on testing the installer for fresh installs and upgrades on various operating systems, with different anti-virus and language configurations.\u003cbr /\u003e\u003c/font\u003e\u003c/span\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Test-scenarios\" /\u003eTest scenarios\u003c/h2\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-1\" /\u003e\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/for-testers/installer/installer--basic-testing\"\u003e\u003cspan style\u003d\"font-size:16px;border-collapse:separate\"\u003e\u003cfont size\u003d\"2\"\u003eBasic testing\u003c/font\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Testing-environment\" /\u003eTesting environment\u003c/h2\u003e\u003c/div\u003e\r\n\u003cul\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating systems\u003c/b\u003e: Windows Vista SP1, Windows XP SP2 and SP3\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eAbove configurations with antivirus/antispyware\u003c/b\u003e: Norton 2008, McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor, Lavasoft Ad-ware,\r\nWebroot Spy Sweeper, Zone Alarm Internet Security Suite, Windows Live\r\none Care, Kaspersky Internet Security 7.0, BitDefender Total Security\r\n2008, Panda: Internet Security\u003cbr /\u003e\r\n\u003c/font\u003e\u003c/li\u003e\u003cli\u003e\u003cfont size\u003d\"2\"\u003e\u003cb\u003eOperating system languages\u003c/b\u003e: \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eArabic, Bulgarian, Catalan, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eChinese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSimplified)\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e, Chinese\u003c/font\u003e\u003cfont size\u003d\"2\"\u003e (Traditional), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCroatian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eCzech, Danish, Dutch, English-UK, English-US, Estonian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFilipino, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eFinnish, French, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eGerman, Greek, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHebrew, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eHindi, Hungarian, Indonesian, Italian, Japanese, Korean, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLatvian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eLithuanian, Norwegian, Polish, Portuguese (Portugal), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003ePortuguese (\u003c/font\u003e\u003cfont size\u003d\"2\"\u003eBrazil), Romanian, Russian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003e Serbian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSlovak, Slovenian, \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSpanish, Spanish (Latin America), \u003c/font\u003e\u003cfont size\u003d\"2\"\u003eSwedish, Thai, Turkish, Ukrainian, Vietnamese\u003c/font\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Report-a-bug-\" /\u003eReport a bug \u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href\u003d\"http://code.google.com/p/chromium/issues/entry\" style\u003d\"outline-style:none;color:rgb(85,26,139)\"\u003eChromium bug system\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3087306851372487833"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/installer"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8755937530886911156"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8755937530886911156"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8755937530886911156"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"installer"},"sites$revision":{"$t":"3"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4157324015813697312"},"published":{"$t":"2008-08-29T23:39:59.241Z"},"updated":{"$t":"2008-09-02T15:52:40.066Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-09-02T15:52:40.065Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Bookmarks"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Adding\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eAdding\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Basic-UX-Issues\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eBasic UX Issues\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Common-Feature-Requests\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eCommon Feature Requests\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Adding\" /\u003eAdding\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks/bookmark_add.png?attredirects\u003d0\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197823705/user-experience/bookmarks/bookmark_add.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cbr /\u003eBookmarks can be added using the star in the location bar. The dialog that appears can be dismissed by focusing elsewhere, otherwise user actions take place immediately.\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv dir\u003d\"ltr\"\u003eThe star may also be dragged onto the bookmarks bar in order to add a bookmark to a specific location.\u003cbr /\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cdiv\u003e\u003cspan style\u003d\"font-size:22px;font-weight:bold\"\u003eBookmarks Bar\u003c/span\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks/bookmarks_bar.png?attredirects\u003d0\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197823846/user-experience/bookmarks/bookmarks_bar.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe bookmarks bar is the home of all of the bookmarks the user creates. We wished to avoid creating multiple separate locations for bookmarks as each additional section is yet another location to lose things in. While this reduces the categorization and access options, it covers the most frequent uses of bookmarks. \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe 'Other Bookmarks' folder is a special, right-aligned always-visible folder that is a dumping ground for bookmarks that the user doesn't want to show in their prime bookmarks area (the left side).\u003cbr /\u003e\u003cbr /\u003eThe bookmarks bar is not visible by default, but is shown as part of the new tab page so that people who dislike the use of real estate can still easily access their bookmarks at the start of a navigational task. It can be permanently shown by user option, and toggled with Ctrl+B.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Basic-UX-Issues\" /\u003eBasic UX Issues\u003c/h2\u003e\u003cul style\u003d\"margin-right:10px\"\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eThe toolbar has some interaction quirks:\u003c/li\u003e\u003cul style\u003d\"margin-right:10px\"\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eCannot roll horizontally across menus (this also applies to Page/Chromium menus)\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eCannot open a menu by dragging downwards (we can't let this detract from drag to rearrange)\u003c/li\u003e\u003c/ul\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eHistory view needs a 'show only starred pages' checkbox. This should be a simple fix as the backend supports this.\u003cbr /\u003e\u003c/li\u003e\u003cli style\u003d\"padding:1px 0px\"\u003eWe need better filing controls in the add bookmark case.\u003c/li\u003e\u003c/ul\u003e\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Common-Feature-Requests\" /\u003eCommon Feature Requests\u003c/h2\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cspan style\u003d\"font-size:15px;font-weight:bold\"\u003eBookmarks management\u003c/span\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-weight:bold\"\u003eTagging\u003c/span\u003e\u003cbr /\u003eWe can implement tagging as a layer on top of folders. More research needs to be done here.\u003cbr /\u003e\u003cbr /\u003e\u003cspan style\u003d\"font-size:15px;font-weight:bold\"\u003eMultiple-location bookmarks\u003c/span\u003e\u003cbr /\u003eA consequence of having a 'star' toggle for a given URL is that the bookmark location becomes a property of the URL, making it hard to locate a bookmark in multiple places - if a bookmark existed in two folders, which folder would you see if you went to that page and clicked on the star to edit the bookmark? \u003cbr /\u003e\u003cbr /\u003eOther browsers have a similar model, with the following approach:\u003cbr /\u003e\u003cul\u003e\u003cli\u003eYou can only create duplicate entries by dragging the favicon, or CTRL-dragging an existing bookmark.\u003c/li\u003e\u003cli\u003eThe bookmark bubble only shows the folder of the last-created bookmark with the same URL.\u003c/li\u003e\u003cli\u003eEditing the name of a bookmark edits the visible entry of that bookmark and the name attribute of the bookmark properties, but not the visible names of the bookmark in other locations.\u003c/li\u003e\u003cli\u003eCreating a new duplicate (by dragging the favicon) will overwrite the name attribute, but not the tags and not the toolbar names of any bookmark.\u003c/li\u003e\u003cli\u003eClicking \u003cb\u003eRemove bookmark\u003c/b\u003e in the bookmark bubble removes \u003cb\u003eall\u003c/b\u003e instances of the bookmark from the bookmarking system.\u003c/li\u003e\u003c/ul\u003e\u003cspan style\u003d\"font-size:15px;font-weight:bold\"\u003eMultiple access points for 'add bookmark' functionality\u003c/span\u003e\u003cbr /\u003eWe could add \u003cb\u003eBookmark this page\u003c/b\u003e to the context and page menus, though it's a touchy issue given the extra space required.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4157324015813697312"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4157324015813697312"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4157324015813697312"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"bookmarks"},"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD4peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6828295041570385096"},"published":{"$t":"2008-08-12T21:14:36.665Z"},"updated":{"$t":"2008-08-31T16:06:41.738Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-31T16:06:41.734Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"customLogo.gif"},"summary":{},"content":{"type":"image/gif","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6828295041570385096"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7680747867910007064"},{"rel":"alternate","type":"image/gif","href":"https://sites.google.com/a/chromium.org/dev/config/app/images/customLogo/customLogo.gif"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6828295041570385096"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6828295041570385096"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6828295041570385096"},{"rel":"edit-media","type":"image/gif","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6828295041570385096"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"beng@google.com"}}],"sites$revision":{"$t":"2"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/326901219333010412"},"published":{"$t":"2008-08-29T22:11:08.114Z"},"updated":{"$t":"2008-08-31T15:50:37.301Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:11:08.114Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"throbber.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/326901219333010412"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7889532745065012633"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/throbber/throbber.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/326901219333010412"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/326901219333010412"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/326901219333010412"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/326901219333010412"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3153639705082508718"},"published":{"$t":"2008-08-29T22:10:25.970Z"},"updated":{"$t":"2008-08-31T15:50:37.207Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:10:25.970Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_throbber_64.gif"},"summary":{},"content":{"type":"image/gif","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3153639705082508718"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7889532745065012633"},{"rel":"alternate","type":"image/gif","href":"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/throbber/chrome_throbber_64.gif"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3153639705082508718"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3153639705082508718"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3153639705082508718"},{"rel":"edit-media","type":"image/gif","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3153639705082508718"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5086040756967285323"},"published":{"$t":"2008-08-30T20:39:31.861Z"},"updated":{"$t":"2008-08-31T15:50:36.357Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:39:31.861Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"ws_layout_rtl.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5086040756967285323"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5086040756967285323"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5086040756967285323"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5086040756967285323"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5086040756967285323"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4415030090521514672"},"published":{"$t":"2008-08-30T20:40:18.649Z"},"updated":{"$t":"2008-08-31T15:50:36.223Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:40:18.649Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tabs_layout_bug.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4415030090521514672"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4415030090521514672"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4415030090521514672"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4415030090521514672"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4415030090521514672"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/885926151033830028"},"published":{"$t":"2008-08-30T20:40:30.322Z"},"updated":{"$t":"2008-08-31T15:50:36.070Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:40:30.322Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tabs_flipping_bug.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/885926151033830028"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/885926151033830028"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/885926151033830028"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/885926151033830028"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/885926151033830028"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8537894497750263946"},"published":{"$t":"2008-08-30T20:40:40.610Z"},"updated":{"$t":"2008-08-31T15:50:35.880Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:40:40.610Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tabs_fixed.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8537894497750263946"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8537894497750263946"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8537894497750263946"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8537894497750263946"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8537894497750263946"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7654580674773612826"},"published":{"$t":"2008-08-30T20:39:46.047Z"},"updated":{"$t":"2008-08-31T15:50:35.664Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:39:46.047Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"mirroring_api.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7654580674773612826"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7654580674773612826"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654580674773612826"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654580674773612826"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7654580674773612826"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6288905178118689139"},"published":{"$t":"2008-08-30T20:39:10.885Z"},"updated":{"$t":"2008-08-31T15:50:34.922Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:39:10.885Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"explorer_window_he.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6288905178118689139"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6288905178118689139"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6288905178118689139"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6288905178118689139"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6288905178118689139"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1822843956473405544"},"published":{"$t":"2008-08-30T20:38:56.816Z"},"updated":{"$t":"2008-08-31T15:50:34.541Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:38:56.816Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"explorer_window_en_us.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1822843956473405544"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1822843956473405544"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1822843956473405544"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1822843956473405544"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1822843956473405544"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7391873895438322714"},"published":{"$t":"2008-08-30T20:40:03.353Z"},"updated":{"$t":"2008-08-31T15:50:34.369Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T20:40:03.353Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_toolbar.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7391873895438322714"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/300751399675976417"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7391873895438322714"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7391873895438322714"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7391873895438322714"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7391873895438322714"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6420024862669403588"},"published":{"$t":"2008-08-28T21:30:42.273Z"},"updated":{"$t":"2008-08-31T15:50:34.290Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-28T21:30:42.273Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"sbox_top_diagram.PNG"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6420024862669403588"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8604151105040058686"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/sandbox/sbox_top_diagram.PNG"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6420024862669403588"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6420024862669403588"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6420024862669403588"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6420024862669403588"}],"author":[{"name":{"$t":"Carlos Pizano"},"email":{"$t":"cpu@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5508551994263701642"},"published":{"$t":"2008-07-20T06:02:03.438Z"},"updated":{"$t":"2008-08-31T15:50:34.023Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-20T06:02:03.438Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"pluginsoutofprocess.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5508551994263701642"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/pluginsoutofprocess.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5508551994263701642"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5508551994263701642"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5508551994263701642"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5508551994263701642"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/9127971926211588094"},"published":{"$t":"2008-07-20T06:00:56.596Z"},"updated":{"$t":"2008-08-31T15:50:33.938Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-20T06:00:56.596Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"pluginsinprocess.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/9127971926211588094"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/388644403660978501"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/plugin-architecture/pluginsinprocess.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/9127971926211588094"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9127971926211588094"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/9127971926211588094"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/9127971926211588094"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5283375530232099768"},"published":{"$t":"2008-07-25T21:17:48.173Z"},"updated":{"$t":"2008-08-31T15:50:33.860Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-25T21:17:48.173Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"resource_loader.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5283375530232099768"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530250174791976002"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-resource-loading/resource_loader.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5283375530232099768"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5283375530232099768"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5283375530232099768"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5283375530232099768"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8685651408569178725"},"published":{"$t":"2008-07-31T02:50:16.928Z"},"updated":{"$t":"2008-08-31T15:50:33.750Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-31T02:50:16.928Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Resource loading 2.ai"},"summary":{},"content":{"type":"application/postscript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8685651408569178725"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530250174791976002"},{"rel":"alternate","type":"application/postscript","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-resource-loading/Resourceloading2.ai"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8685651408569178725"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8685651408569178725"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8685651408569178725"},{"rel":"edit-media","type":"application/postscript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8685651408569178725"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2165513102559032627"},"published":{"$t":"2008-07-28T05:25:33.321Z"},"updated":{"$t":"2008-08-31T15:50:33.456Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-28T05:25:33.321Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Resource-loading.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2165513102559032627"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1530250174791976002"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-resource-loading/Resource-loading.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2165513102559032627"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2165513102559032627"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2165513102559032627"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2165513102559032627"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4719227941255083691"},"published":{"$t":"2008-07-16T19:25:53.363Z"},"updated":{"$t":"2008-08-31T15:50:33.269Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-16T19:25:53.363Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_archoverview.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4719227941255083691"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1280500072215839045"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture/chrome_archoverview.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4719227941255083691"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4719227941255083691"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4719227941255083691"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4719227941255083691"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"beng@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8399687840086736506"},"published":{"$t":"2008-07-20T04:38:07.383Z"},"updated":{"$t":"2008-08-31T15:50:32.714Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-20T04:38:07.383Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"architecture.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8399687840086736506"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1280500072215839045"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture/architecture.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8399687840086736506"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8399687840086736506"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8399687840086736506"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8399687840086736506"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1317984374794338266"},"published":{"$t":"2008-07-27T19:50:15.253Z"},"updated":{"$t":"2008-08-31T15:50:32.277Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-27T19:50:15.253Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"arch.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1317984374794338266"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1280500072215839045"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture/arch.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1317984374794338266"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1317984374794338266"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1317984374794338266"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1317984374794338266"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6712542712422164402"},"published":{"$t":"2008-07-27T19:51:46.953Z"},"updated":{"$t":"2008-08-31T15:50:31.918Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-27T19:51:46.953Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Multi process architecture.ai"},"summary":{},"content":{"type":"application/postscript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6712542712422164402"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1280500072215839045"},{"rel":"alternate","type":"application/postscript","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/multi-process-architecture/Multiprocessarchitecture.ai"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6712542712422164402"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6712542712422164402"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6712542712422164402"},{"rel":"edit-media","type":"application/postscript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6712542712422164402"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8963233144955667218"},"published":{"$t":"2008-07-22T04:26:31.094Z"},"updated":{"$t":"2008-08-31T15:50:31.634Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-22T04:26:31.094Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"rendering renderer2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8963233144955667218"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8992477738053034276"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome/rendering%20renderer2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8963233144955667218"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8963233144955667218"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8963233144955667218"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8963233144955667218"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1775005490186413416"},"published":{"$t":"2008-07-22T04:24:20.558Z"},"updated":{"$t":"2008-08-31T15:50:31.561Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-22T04:24:20.558Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"rendering renderer.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1775005490186413416"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8992477738053034276"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome/rendering%20renderer.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1775005490186413416"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1775005490186413416"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1775005490186413416"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1775005490186413416"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8190858922852082754"},"published":{"$t":"2008-07-22T03:55:15.892Z"},"updated":{"$t":"2008-08-31T15:50:31.473Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-22T03:55:15.892Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"rendering browser.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8190858922852082754"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8992477738053034276"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome/rendering%20browser.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8190858922852082754"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8190858922852082754"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8190858922852082754"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8190858922852082754"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6719505420362096903"},"published":{"$t":"2008-07-22T04:27:35.029Z"},"updated":{"$t":"2008-08-31T15:50:31.382Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-22T04:27:35.029Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"Rendering in the renderer.ai"},"summary":{},"content":{"type":"application/postscript","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6719505420362096903"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8992477738053034276"},{"rel":"alternate","type":"application/postscript","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer.ai"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6719505420362096903"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6719505420362096903"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6719505420362096903"},{"rel":"edit-media","type":"application/postscript","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6719505420362096903"}],"author":[{"name":{"$t":"Brett Wilson"},"email":{"$t":"brettw@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3554915304419911735"},"published":{"$t":"2008-07-24T07:39:22.549Z"},"updated":{"$t":"2008-08-31T15:50:31.036Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-07-24T07:39:22.549Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"LunaBrowserWindow.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3554915304419911735"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3185366824488474522"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/developers/design-documents/browser-window/LunaBrowserWindow.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3554915304419911735"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3554915304419911735"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3554915304419911735"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3554915304419911735"}],"author":[{"name":{"$t":"Ben Goodger"},"email":{"$t":"beng@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3065146371370022756"},"published":{"$t":"2008-08-26T20:54:14.200Z"},"updated":{"$t":"2008-08-31T15:50:30.351Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T20:54:14.200Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"frame_corners.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/3065146371370022756"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5971354673808811640"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/window-frame/frame_corners.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3065146371370022756"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3065146371370022756"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3065146371370022756"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/3065146371370022756"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1149744502391388864"},"published":{"$t":"2008-08-26T22:35:40.992Z"},"updated":{"$t":"2008-08-31T15:50:30.079Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:35:40.992Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"mathemagics (1).png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1149744502391388864"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design/mathemagics%20(1).png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1149744502391388864"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1149744502391388864"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1149744502391388864"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1149744502391388864"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2201456529045621876"},"published":{"$t":"2008-08-26T22:35:32.227Z"},"updated":{"$t":"2008-08-31T15:50:29.743Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:35:32.227Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"chrome_colorscheme.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2201456529045621876"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5524773426348651632"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/visual-design/chrome_colorscheme.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2201456529045621876"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2201456529045621876"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2201456529045621876"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2201456529045621876"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7889532745065012633"},"published":{"$t":"2008-08-29T22:11:18.944Z"},"updated":{"$t":"2008-08-31T15:50:29.572Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:11:18.944Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Throbber"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/throbber/throbber.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197837301/user-experience/tabs/throbber/throbber.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(0,102,204);text-decoration:underline\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eWe use throbber in the favicon area of the tab to indicate that a page is loading. \u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cbr /\u003eA single-state throbber could make Chromium feel slow because it would hide the not-our-fault steps in the load process - it would lump DNS wait, server contact wait, data transfer, and rendering into one animation blob. Server/network slowness would therefore affect perception of Chromium's overall speed.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4459056034705252765"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/throbber"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7889532745065012633"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7889532745065012633"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7889532745065012633"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$pageName":{"$t":"throbber"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7661735468803746133"},"published":{"$t":"2008-08-26T22:42:17.687Z"},"updated":{"$t":"2008-08-31T15:50:29.431Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:42:17.687Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"tab.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7661735468803746133"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4459056034705252765"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/tabs/tab.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7661735468803746133"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7661735468803746133"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7661735468803746133"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7661735468803746133"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6251588046317964213"},"published":{"$t":"2008-08-26T23:23:24.062Z"},"updated":{"$t":"2008-08-31T15:50:29.371Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T23:23:24.062Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"status_bubble_whiter.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6251588046317964213"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/status-bubble/status_bubble_whiter.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6251588046317964213"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6251588046317964213"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6251588046317964213"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6251588046317964213"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4600832760674992796"},"published":{"$t":"2008-08-26T23:23:56.077Z"},"updated":{"$t":"2008-08-31T15:50:29.306Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T23:23:56.077Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"status_bubble_hover.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4600832760674992796"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/status-bubble/status_bubble_hover.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4600832760674992796"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4600832760674992796"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4600832760674992796"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4600832760674992796"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7571073649093637652"},"published":{"$t":"2008-08-26T22:50:45.691Z"},"updated":{"$t":"2008-08-31T15:50:29.229Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:50:45.691Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"status_bubble.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7571073649093637652"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1463738024678720638"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/status-bubble/status_bubble.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7571073649093637652"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7571073649093637652"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7571073649093637652"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7571073649093637652"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8232308306805930420"},"published":{"$t":"2008-08-26T23:31:13.487Z"},"updated":{"$t":"2008-08-31T15:50:29.165Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T23:31:13.487Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"options_basics.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8232308306805930420"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654258406049722466"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/options/options_basics.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8232308306805930420"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8232308306805930420"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8232308306805930420"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8232308306805930420"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4853480952620682119"},"published":{"$t":"2008-08-27T00:43:02.531Z"},"updated":{"$t":"2008-08-31T15:50:29.099Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-27T00:43:02.531Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"omnibox_results.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4853480952620682119"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1417709785584952228"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox/omnibox_results.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4853480952620682119"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4853480952620682119"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4853480952620682119"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4853480952620682119"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/666596642399778765"},"published":{"$t":"2008-08-27T00:37:39.278Z"},"updated":{"$t":"2008-08-31T15:50:28.930Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-27T00:37:39.278Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"keyword.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/666596642399778765"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1417709785584952228"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox/keyword.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/666596642399778765"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/666596642399778765"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/666596642399778765"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/666596642399778765"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1478884021166736383"},"published":{"$t":"2008-08-27T00:20:38.671Z"},"updated":{"$t":"2008-08-31T15:50:28.630Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-27T00:20:38.671Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"cheese_results.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/1478884021166736383"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1417709785584952228"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox/cheese_results.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1478884021166736383"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1478884021166736383"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1478884021166736383"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/1478884021166736383"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8176655441224731587"},"published":{"$t":"2008-08-26T22:31:17.966Z"},"updated":{"$t":"2008-08-31T15:50:28.231Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:31:17.966Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"new_tab_resources.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8176655441224731587"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/852707397186915090"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/new-tab-page/new_tab_resources.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8176655441224731587"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8176655441224731587"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8176655441224731587"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8176655441224731587"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/8356106327113092702"},"published":{"$t":"2008-08-26T22:28:23.044Z"},"updated":{"$t":"2008-08-31T15:50:27.938Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-26T22:28:23.044Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"incognito2.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/8356106327113092702"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3552352060534588556"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/incognito/incognito2.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/8356106327113092702"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8356106327113092702"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8356106327113092702"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/8356106327113092702"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/6611522502889011299"},"published":{"$t":"2008-08-29T23:00:52.839Z"},"updated":{"$t":"2008-08-31T15:50:27.849Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T23:00:52.839Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"history_results.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/6611522502889011299"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1838830544552690783"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/history/history_results.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/6611522502889011299"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6611522502889011299"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/6611522502889011299"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/6611522502889011299"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4753813108511247380"},"published":{"$t":"2008-08-29T23:00:12.565Z"},"updated":{"$t":"2008-08-31T15:50:27.754Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T23:00:12.565Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"history_browse.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4753813108511247380"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1838830544552690783"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/history/history_browse.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4753813108511247380"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4753813108511247380"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4753813108511247380"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4753813108511247380"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4819528228355905608"},"published":{"$t":"2008-08-29T22:54:28.619Z"},"updated":{"$t":"2008-08-31T15:50:27.641Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:54:28.619Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"find_bar.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/4819528228355905608"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3323955302454772537"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/find-in-page/find_bar.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4819528228355905608"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4819528228355905608"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4819528228355905608"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/4819528228355905608"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2139459309537810473"},"published":{"$t":"2008-08-29T22:41:43.999Z"},"updated":{"$t":"2008-08-31T15:50:23.846Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:41:43.999Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"bookmarks_bar.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2139459309537810473"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4157324015813697312"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks/bookmarks_bar.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2139459309537810473"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2139459309537810473"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2139459309537810473"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2139459309537810473"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5622612978669206141"},"published":{"$t":"2008-08-27T18:33:48.071Z"},"updated":{"$t":"2008-08-31T15:50:23.705Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-27T18:33:48.071Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"bookmark_add.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/5622612978669206141"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4157324015813697312"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks/bookmark_add.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5622612978669206141"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5622612978669206141"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5622612978669206141"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/5622612978669206141"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/4385058918872515446"},"published":{"$t":"2008-08-30T19:37:38.173Z"},"updated":{"$t":"2008-08-31T15:50:23.411Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-30T19:37:38.173Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Installer: Basic Testing"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Test-cases\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eTest cases\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Install\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eInstall\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Overinstall\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eOverinstall\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-First-Run-UI\"\u003e\u003cstrong\u003e1.3 \u003c/strong\u003eFirst Run UI\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Uninstall\"\u003e\u003cstrong\u003e1.4 \u003c/strong\u003eUninstall\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Test-cases\" /\u003eTest cases\u003c/h2\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Install\" /\u003eInstall\r\n\t\r\n\u003c/h3\u003e\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888888\" cellpadding\u003d\"5\" cellspacing\u003d\"2\" width\u003d\"85%\"\u003e\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eFresh Install\u003c/td\u003e\u003ctd\u003eInstall latest build of Google Chrome.\u003c/td\u003e\r\n\u003ctd\u003e\u003cul\u003e\r\n\t\u003cli\u003eOn completion of installation, First Run UI dialog will be launched with no other alert prompts \u003c/li\u003e\r\n\t\u003cli\u003eFirst Run UI dialog: Shortcuts will be created according to the user's choice. Bookmarks, passwords, and other settings will be imported/not imported from IE/FF as per user's choice. \u003c/li\u003e\r\n\t\u003cli\u003eA new folder will be created:\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eXP\u003c/b\u003e: C:\\Documents and Settings\\username\\Local Settings\\Application Data\\Google\\Google Chrome\\Application\u003cbr /\u003e\u003cb\u003eVista\u003c/b\u003e: C:\\Users\\username\\AppData\\Local\\Google\\Google Chrome\\Application\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\r\n\t\u003cli\u003eGoogle Chrome can be launched from shortcuts and the Add/Remove panel (XP) / Programs and Features (Vista)\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eRecovery\r\n\u003c/td\u003e\r\n\u003ctd\u003e\u003cp\u003eIf Google Chrome files are accidentally deleted and Google Chrome cannot be launched, run the installer again.\u003cbr /\u003e\u003c/p\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cul\u003e\r\n\t\u003cli\u003eOn completion of installation,  Google Chrome can be launched from shortcuts, Add/Remove panel (XP) / Programs and Features (Vista)\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Overinstall\" /\u003eOverinstall\u003c/h3\u003e\r\n\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888888\" cellpadding\u003d\"5\" cellspacing\u003d\"2\" width\u003d\"85%\"\u003e\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eOverinstall\u003c/td\u003e\r\n\u003ctd\u003eOverinstall latest build of Google Chrome \u003col\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cul\u003e\u003cli\u003eOn launching Google Chrome, \u003cb\u003eabout:version\u003c/b\u003e should show the latest build number.\u003c/li\u003e\u003cli\u003eGoogle Chrome can be launched from shortcuts, Add/Remove panel (XP) / Programs and Features (Vista)\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-First-Run-UI\" /\u003eFirst Run UI\u003c/h3\u003e\r\n\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888888\" cellpadding\u003d\"5\" cellspacing\u003d\"2\" width\u003d\"85%\"\u003e\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eFirst Run UI dialog launch\u003cbr /\u003e\r\n\u003c/td\u003e\r\n\u003ctd\u003eDo a fresh install of Google Chrome.\u003cspan style\u003d\"color:rgb(255,0,0)\"\u003e\u003cspan style\u003d\"color:rgb(0,0,0)\"\u003e (Note: First Run UI will not be launched if it is not a fresh install)\u003c/span\u003e\u003c/span\u003e\u003col\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cul\u003e\r\n\t\u003cli\u003eOn completion of installation,  First Run UI dialog will be launched giving the user choice to customize the settings.\u003c/li\u003e\r\n\t\u003cli\u003eA file called \u003cb\u003eFirst Run\u003c/b\u003e will be created under:\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eXP\u003c/b\u003e: C:\\Documents and Settings\\username\\Local Settings\\Application Data\\Google\\Google Chrome\\Application\u003cbr /\u003e\u003cb\u003eVista\u003c/b\u003e: C:\\Users\\username\\AppData\\Local\\Google\\Google Chrome\\Application\u003cbr /\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eFirst Run UI file not found\r\n\u003c/td\u003e\r\n\u003ctd\u003eDelete First Run file.\u003cbr /\u003e\u003col\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cul\u003e\r\n\t\u003cli\u003eOn Google Chrome launch, First Run UI dialog will be launched \r\n\t\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Uninstall\" /\u003eUninstall\u003c/h3\u003e\r\n\r\n\u003ctable border\u003d\"1\" bordercolor\u003d\"#888888\" cellpadding\u003d\"5\" cellspacing\u003d\"2\" width\u003d\"85%\"\u003e\u003ctbody\u003e\r\n\u003ctr\u003e\r\n\u003cth\u003eTest case\u003c/th\u003e\r\n\u003cth\u003eSteps\u003c/th\u003e\r\n\u003cth\u003eExpected Result\u003c/th\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eUninstall Google Chrome\r\n\u003c/td\u003e\r\n\u003ctd\u003eClick \u003cb\u003eStart \u0026gt; All Programs \u0026gt; Google Chrome\u003c/b\u003e and select \u003cb\u003eUninstall\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eor\u003cbr /\u003e\u003cbr /\u003eWindows XP: From the \u003cb\u003eAdd/Remove Programs\u003c/b\u003e dialog, uninstall Google Chrome.\u003cbr /\u003e\u003cbr /\u003eWindows Vista: From the \u003cb\u003ePrograms and Features\u003c/b\u003e window, uninstall Google Chrome.\u003cbr /\u003e\u003col\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cp\u003eVerify the following on your local machine:\u003c/p\u003e\r\n\t\u003cul\u003e\r\n\t\t\u003cli\u003eGoogle Chrome is uninstalled with no issues. \u003c/li\u003e\r\n\t\t\u003cli\u003eThe Google Chrome folder is removed from:\u003cbr /\u003e\u003cbr /\u003e\u003cb\u003eXP\u003c/b\u003e: C:\\Documents and Settings\\user\\Local Settings\\Application Data\\Google\\Google Chrome\\Application\\\u003cbr /\u003e\u003cb\u003eVista\u003c/b\u003e: C:\\Users\\username\\AppData\\Local\\Google\\Google Chrome\\Application\u003cbr /\u003e\u003cbr /\u003e\u003c/li\u003e\r\n\t\t\u003cli\u003eGoogle Chrome will not appear in the \u003cb\u003eAdd/Remove\u003c/b\u003e panel on XP, or the \u003cb\u003ePrograms and Features\u003c/b\u003e window in Vista.\u003c/li\u003e\u003cli\u003eShortcuts are deleted.\u003cbr /\u003e\u003c/li\u003e\r\n\t\u003c/ul\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003ctr\u003e\r\n\u003ctd\u003eUninstall Google Chrome while Google Chrome is running\r\n\u003c/td\u003e\r\n\u003ctd\u003e\u003col\u003e\r\n\t\u003cli\u003eLaunch Google Chrome.\t\t\u003c/li\u003e\r\n\t\u003cli\u003eTry to uninstall Google Chrome. \u003c/li\u003e\r\n\u003c/ol\u003e\u003c/td\u003e\r\n\u003ctd\u003e\u003cp\u003eThe following message will appear:\u003cbr /\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003ePlease close all Google Chrome windows and try again\u003c/b\u003e\u003c/p\u003e\u003cp\u003eGoogle Chrome will not be uninstalled.\r\n\t\u003c/p\u003e\r\n\t\u003cp\u003eOn closing Google Chrome and uninstalling, Google Chrome will uninstall with no issues.\u003cbr /\u003e\u003c/p\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\r\n\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/8755937530886911156"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/for-testers/installer/installer--basic-testing"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/4385058918872515446"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4385058918872515446"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4385058918872515446"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"installer--basic-testing"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/5971354673808811640"},"published":{"$t":"2008-08-29T16:40:18.641Z"},"updated":{"$t":"2008-08-31T15:46:23.116Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T16:40:18.641Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Window Frame"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003eThe frame is the area behind the tabs - this is the 'convenient grouping' area for our tabs. We wish to avoid including things within the frame (such as branding elements) to work away from making the frame feel like a container (ideally you'd think of it as 'goo that binds tabs together').\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Window-border\" /\u003eWindow border\u003c/h2\u003eOur window border extends five pixels outwards around the left, right, and bottom edges of the content - three-pixel edges were too hard to grab. The border consists of a one-pixel tab border, three pixels of frame, and one pixel of dark frame border. This high-contrast edge ensures that the content (and the rest of our UI) doesn't bleed into other applications while allowing the content to feel like it is inside the tab. We have experimented with reducing this border size by one pixel, but the larger frame was more positively received.\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Frame-corners\" /\u003eFrame corners\u003c/h2\u003e\u003cdiv\u003e\u003cspan style\u003d\"border-collapse:separate\"\u003e\u003cspan style\u003d\"border-collapse:collapse\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/window-frame/frame_corners.png?attredirects\u003d0\" imageanchor\u003d\"1\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197830351/user-experience/window-frame/frame_corners.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cbr /\u003eLike all Windows apps, we have aliased corners. We originally wanted a square frame, but this clashed with other XP desktop software. Instead we have corners that are tighter than the default and feel tighter still (compare the shape of the light-colored area in the Office 2007 frame with the medium-blue, non-highlighted area in the Google Chrome frame).\u003cbr /\u003e\u003cbr /\u003eWe spent a long time playing with the lighter grey pixels on our window border to make sure they didn't blend in nasty ways on various backgrounds.\u003cbr /\u003e\u003cbr /\u003eWhile it's technically possible to get drop shadows on Windows windows, it comes at an unacceptable cost to performance and stability.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/window-frame"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/5971354673808811640"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5971354673808811640"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/5971354673808811640"}],"author":[{"name":{"$t":"Kathy Walrath"},"email":{"$t":"kathyw@google.com"}}],"sites$pageName":{"$t":"window-frame"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2939914567800791655"},"published":{"$t":"2008-08-29T22:38:57.408Z"},"updated":{"$t":"2008-08-31T15:46:22.866Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:38:57.408Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Toolbar"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cdiv dir\u003d\"ltr\"\u003e\r\n\u003cp\u003eA tab's toolbar is designed to show the basic information related to that tab. We strongly seek to avoid clutter here, and generally start by assuming that we wouldn't include something unless it had a reasonably high usage level.\u003c/p\u003e\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-UI-Elements\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eUI Elements\u003c/a\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Back-Forward\"\u003e\u003cstrong\u003e1.1 \u003c/strong\u003eBack / Forward\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Reload\"\u003e\u003cstrong\u003e1.2 \u003c/strong\u003eReload\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Home\"\u003e\u003cstrong\u003e1.3 \u003c/strong\u003eHome\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Bookmark\"\u003e\u003cstrong\u003e1.4 \u003c/strong\u003eBookmark\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Address-Bar\"\u003e\u003cstrong\u003e1.5 \u003c/strong\u003eAddress Bar\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Go-Stop\"\u003e\u003cstrong\u003e1.6 \u003c/strong\u003eGo/Stop\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Page-Menu\"\u003e\u003cstrong\u003e1.7 \u003c/strong\u003ePage Menu\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Chromium-Menu\"\u003e\u003cstrong\u003e1.8 \u003c/strong\u003eChromium Menu\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Future-Work\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eFuture Work\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Visual-Design\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eVisual Design\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\u003ch2\u003e\u003ca name\u003d\"TOC-UI-Elements\" /\u003eUI Elements\u003c/h2\u003e\r\n\u003cdiv\u003e\r\n\u003cdiv\u003e\r\n\u003ch3 style\u003d\"margin-left:40px\"\u003e\u003ca name\u003d\"TOC-Back-Forward\" /\u003eBack / Forward\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eStandard browser back and forward buttons. You can access session history in each direction by clicking and holding or clicking and dragging downwards.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3 style\u003d\"margin-left:40px\"\u003e\u003ca name\u003d\"TOC-Reload\" /\u003eReload\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eA standard reload button. Ctrl and Shift do not modify this button's behavior.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003ch3 style\u003d\"margin-left:40px\"\u003e\u003ca name\u003d\"TOC-Home\" /\u003eHome\u003c/h3\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eWhen a user has enabled the home button, it appears here. The home button does not appear by default because in a multi-tab world, we believe that the bookmarks bar is a better place for navigational items.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Bookmark\" /\u003eBookmark\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/bookmarks\"\u003eBookmarks\u003c/a\u003e. The star may be dragged as a URL to create links to the current page in specific locations (Desktop, Bookmarks Bar).\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Address-Bar\" /\u003eAddress Bar\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eSee \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/omnibox\"\u003eOmnibox\u003c/a\u003e.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Go-Stop\" /\u003eGo/Stop\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eThe go and stop buttons are typically not frequently used in browsers. However, they are frequently essential (for example, the go button is useful in mouse-only situations). These buttons are combined so that while a navigation is in progress, the button shows a stop icon, otherwise it shows a go button.\u003cbr /\u003e\r\n\u003cbr /\u003e\r\nIf the navigation state changes while the user's mouse is over the button and the state change is not a result of a user action, the button will not change. It also protects against double-clicks.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Page-Menu\" /\u003ePage Menu\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eThis is generally equivalent to \"File / Edit / View\", and contains things contextually related to the current tab.\u003cbr /\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003e\r\n\u003ch3\u003e\u003ca name\u003d\"TOC-Chromium-Menu\" /\u003eChromium Menu\u003c/h3\u003e\r\n\u003c/div\u003e\r\n\u003cdiv style\u003d\"margin-left:40px\"\u003eThis is the \"Tools / Options\" menu, and contains items related to the browser. Technically it should be located outside of the tab bounds, but there was no satisfying way of doing so.\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cdiv\u003e\r\n\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Future-Work\" /\u003eFuture Work\u003c/h2\u003e\r\n\u003cul style\u003d\"margin-right:10px\"\u003e\r\n\u003cli style\u003d\"padding:1px 0px\"\u003eMiddle or modifier-clicking on UI elements should open the resulting page in the appropriate tab or window.\u003c/li\u003e\r\n\u003cli style\u003d\"padding:1px 0px\"\u003eCustomization\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cdiv\u003e\r\n\u003ch2 style\u003d\"margin:10px 10px 10px 0px;color:rgb(0,0,0)\"\u003e\u003ca name\u003d\"TOC-Visual-Design\" /\u003eVisual Design\u003c/h2\u003e\r\n\u003cspan style\u003d\"border-collapse:separate\"\u003eChromium's buttons are currently 25 x 27 pixels, so the icon centerline will be on a pixel row.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"border-collapse:separate\"\u003eTypically we've gone for icons that feel engraved into the button - as the button itself is already a third level of depth away from the desktop, we didn't want to add another.\u003c/span\u003e\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cspan style\u003d\"border-collapse:separate\"\u003eWe aimed to make our buttons feel like hair-trigger switches, where the pushed state felt like it was only a pixel or two away, though never got this feeling right (the difference between the pushed and hover states wasn't pronounced enough).\u003c/span\u003e\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/toolbar"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2939914567800791655"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2939914567800791655"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2939914567800791655"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$pageName":{"$t":"toolbar"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7654258406049722466"},"published":{"$t":"2008-08-29T00:04:24.285Z"},"updated":{"$t":"2008-08-31T15:46:22.324Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T00:04:24.285Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Options"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv style\u003d\"margin-top:5px;margin-bottom:0px;display:block;text-align:left\"\u003e\u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Introduction\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Sections\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eSections\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cbr /\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Introduction\" /\u003eIntroduction\u003c/h2\u003eBy picking intelligent defaults, we hope that users never have to use the options screen. In the event that they do, we hope that we have so few options that managing and comprehending the whole set is easy. The options design was left until late in the process so that the team would have to live with the defaults.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:5px;margin-bottom:0px;display:block;text-align:left\"\u003e \u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/options/options_basics.png?attredirects\u003d0\" style\u003d\"border-width:0px;background-color:transparent\"\u003e\u003cimg src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197829165/user-experience/options/options_basics.png\" style\u003d\"border-width:0px\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Sections\" /\u003eSections\u003c/h2\u003e\u003cdiv style\u003d\"margin-top:5px;margin-bottom:0px;display:block;text-align:left\"\u003eThe options dialog is divided into three usage-based tabs - the majority of users will only ever need the options in the \u003cb\u003eBasics\u003c/b\u003e tab, a minority will need the items in the \u003cb\u003eMinor Tweaks\u003c/b\u003e tab, and very few will ever need to examine \u003cb\u003eUnder the Hood\u003c/b\u003e. We had initially attempted content-based sections, but that lead to confusion over where a given preference should exist, and mixed useful and esoteric preferences together.\u003c/div\u003e\u003cdiv style\u003d\"margin-top:5px;margin-bottom:0px;display:block;text-align:left\"\u003eOver time, we hope to reduce the number of options further.\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/options"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7654258406049722466"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654258406049722466"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7654258406049722466"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"options"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/1838830544552690783"},"published":{"$t":"2008-08-29T23:46:56.601Z"},"updated":{"$t":"2008-08-31T15:46:21.988Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T23:46:56.601Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"History"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \u003cdiv class\u003d\"sites-embed-align-left-wrapping-off\"\u003e\u003cdiv class\u003d\"sites-embed-border-off sites-embed\" style\u003d\"width:250px;\"\u003e\u003cdiv class\u003d\"sites-embed-content sites-embed-type-toc\"\u003e\u003cdiv class\u003d\"goog-toc sites-embed-toc-maxdepth-6\"\u003e\u003cp\u003eContents\u003c/p\u003e\u003col class\u003d\"goog-toc\"\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Overview\"\u003e\u003cstrong\u003e1 \u003c/strong\u003eOverview\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Browse\"\u003e\u003cstrong\u003e2 \u003c/strong\u003eBrowse\u003c/a\u003e\u003c/li\u003e\u003cli class\u003d\"goog-toc\"\u003e\u003ca href\u003d\"#TOC-Search\"\u003e\u003cstrong\u003e3 \u003c/strong\u003eSearch\u003c/a\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\r\n \r\n \u003ch2\u003e\u003ca name\u003d\"TOC-Overview\" /\u003eOverview\u003c/h2\u003eChromium's history system keeps a full text index for each page the user visits, making it easy to find pages based on their content, not just title and URL. The user's history is exposed through the History page, accessible via the Tools menu, or by pressing \u003cb\u003eCtrl+H\u003c/b\u003e. A user may also directly search their history by typing a search query in the address bar, and selecting the \u003cb\u003eSee all pages in history containing [query]\u003c/b\u003e item that appears if any results match the entered query.\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThe History page surfaces the user's browsing history in two ways:\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Browse\" /\u003eBrowse\u003c/h2\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/history/history_browse.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197827754/user-experience/history/history_browse.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhen the user first enters the history page, they are in browse mode - a condensed 'time, favicon, and title' view of their browsing history. Breaks are inserted whenever there is a break in the user's browsing activity, and at day intervals. Bookmarked pages are denoted by the presence of a star at the end of the title.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003ch2\u003e\u003ca name\u003d\"TOC-Search\" /\u003eSearch\u003c/h2\u003e\u003cp /\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/history/history_results.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197827849/user-experience/history/history_results.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eIf the user begins a search, the history view shows a list of search results, presented by date, title, text snippet, and a thumbnail. Bookmarked pages are listed first.\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/history"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/1838830544552690783"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1838830544552690783"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1838830544552690783"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$pageName":{"$t":"history"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/3323955302454772537"},"published":{"$t":"2008-08-29T22:54:35.975Z"},"updated":{"$t":"2008-08-31T15:46:21.943Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T22:54:35.975Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#webpage","label":"webpage"}],"title":{"$t":"Find in Page"},"content":{"type":"xhtml","$t":"\u003cdiv xmlns\u003d\"http://www.w3.org/1999/xhtml\"\u003e\u003ctable cellspacing\u003d\"0\" class\u003d\"sites-layout-name-one-column sites-layout-hbox\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd class\u003d\"sites-layout-tile sites-tile-name-content-1\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv dir\u003d\"ltr\"\u003e\u003cdiv\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003cdiv style\u003d\"display:block;text-align:left\"\u003e\u003ca href\u003d\"https://sites.google.com/a/chromium.org/dev/user-experience/find-in-page/find_bar.png?attredirects\u003d0\" imageanchor\u003d\"1\"\u003e\u003cimg border\u003d\"0\" src\u003d\"https://sites.google.com/a/chromium.org/dev/_/rsrc/1220197827641/user-experience/find-in-page/find_bar.png\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cspan style\u003d\"color:rgb(0,102,204);text-decoration:underline\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003eChromium's 'Find in Page' bar appears in the top-right of the content area, and allows users to find text on the page. The find bar is presented as an overlay in order to prevent page relayout when the bar is shown or hidden. If the text the user is looking for is under the bar, it will scroll the page, or slide out of the way.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eThere is currently no facility for users to use the find results to perform actions on elements within the page.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/1708653132560092830"},{"rel":"alternate","type":"text/html","href":"https://sites.google.com/a/chromium.org/dev/user-experience/find-in-page"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/3323955302454772537"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3323955302454772537"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/3323955302454772537"}],"author":[{"name":{"$t":"Glen Murphy"},"email":{"$t":"glen@google.com"}}],"sites$pageName":{"$t":"find-in-page"},"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/7386607690632540375"},"published":{"$t":"2008-08-29T23:33:38.689Z"},"updated":{"$t":"2008-08-31T15:46:21.106Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-29T23:33:38.689Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"whistling.jpg"},"summary":{},"content":{"type":"image/jpeg","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/7386607690632540375"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/685187476307440333"},{"rel":"alternate","type":"image/jpeg","href":"https://sites.google.com/a/chromium.org/dev/developers/whistling.jpg"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/7386607690632540375"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7386607690632540375"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/7386607690632540375"},{"rel":"edit-media","type":"image/jpeg","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/7386607690632540375"}],"author":[{"name":{"$t":"Mike Jeffrey"},"email":{"$t":"mjeffrey@google.com"}}],"sites$revision":{"$t":"1"}},{"gd$etag":"\"YD0peyY.\"","id":{"$t":"https://sites.google.com/feeds/content/chromium.org/dev/2125530235859591533"},"published":{"$t":"2008-08-28T15:18:03.041Z"},"updated":{"$t":"2008-08-31T15:46:16.998Z"},"app$edited":{"xmlns$app":"http://www.w3.org/2007/app","$t":"2008-08-28T15:18:03.041Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/sites/2008#attachment","label":"attachment"}],"title":{"$t":"flying_browser.png"},"summary":{},"content":{"type":"image/png","src":"https://a77db9aa-a-7b23c8ea-s-sites.googlegroups.com/feeds/media/content/chromium.org/dev/2125530235859591533"},"link":[{"rel":"http://schemas.google.com/sites/2008#parent","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/4852676552341181359"},{"rel":"alternate","type":"image/png","href":"https://sites.google.com/a/chromium.org/dev/Home/flying_browser.png"},{"rel":"http://schemas.google.com/sites/2008#revision","type":"application/atom+xml","href":"https://sites.google.com/feeds/revision/chromium.org/dev/2125530235859591533"},{"rel":"self","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2125530235859591533"},{"rel":"edit","type":"application/atom+xml","href":"https://sites.google.com/feeds/content/chromium.org/dev/2125530235859591533"},{"rel":"edit-media","type":"image/png","href":"https://sites.google.com/feeds/media/content/chromium.org/dev/2125530235859591533"}],"author":[{"name":{"$t":"Kathy Walrath"},"email":{"$t":"kathyw@google.com"}}],"sites$revision":{"$t":"1"}}]}}