CINXE.COM
Chromium Blog: 2013
<!DOCTYPE html> <html class='v2 list-page' dir='ltr' itemscope='' itemtype='http://schema.org/Blog' lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <title> Chromium Blog: 2013 </title> <meta content='width=device-width, height=device-height, initial-scale=1.0' name='viewport'/> <meta content='IE=Edge' http-equiv='X-UA-Compatible'/> <meta content='Chromium Blog' property='og:title'/> <meta content='en_US' property='og:locale'/> <meta content='https://blog.chromium.org/2013/' property='og:url'/> <meta content='Chromium Blog' property='og:site_name'/> <!-- Twitter Card properties --> <meta content='Chromium Blog' property='og:title'/> <meta content='summary' name='twitter:card'/> <meta content='@ChromiumDev' name='twitter:creator'/> <link href='https://fonts.googleapis.com/css?family=Roboto:400italic,400,500,500italic,700,700italic' rel='stylesheet' type='text/css'/> <link href='https://fonts.googleapis.com/icon?family=Material+Icons' rel='stylesheet'/> <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js' type='text/javascript'></script> <!-- End --> <style id='page-skin-1' type='text/css'><!-- /* <Group description="Header Color" selector="header"> <Variable name="header.background.color" description="Header Background" type="color" default="#ffffff"/> </Group> */ .header-outer { border-bottom: 1px solid #e0e0e0; background: #ffffff; } html, .Label h2, #sidebar .rss a, .BlogArchive h2, .FollowByEmail h2.title, .widget .post h2 { font-family: Roboto, sans-serif; } .plusfollowers h2.title, .post h2.title, .widget h2.title { font-family: Roboto, sans-serif; } .widget-item-control { height: 100%; } .widget.Header, #header { position: relative; height: 100%; width: 100%; } } .widget.Header .header-logo1 { float: left; margin-right: 15px; padding-right: 15px; border-right: 1px solid #ddd; } .header-title h2 { color: rgba(0,0,0,.54); display: inline-block; font-size: 40px; font-family: Roboto, sans-serif; font-weight: normal; line-height: 76px; vertical-align: top; } .header-inner { background-repeat: no-repeat; background-position: right 0px; } .post-author, .byline-author { font-size: 14px; font-weight: normal; color: #757575; color: rgba(0,0,0,.54); } .post-content .img-border { border: 1px solid rgb(235, 235, 235); padding: 4px; } .header-title a { text-decoration: none !important; } pre { border: 1px solid #bbbbbb; margin-top: 1em 0 0 0; padding: 0.99em; overflow-x: auto; overflow-y: auto; } pre, code { font-size: 9pt; background-color: #fafafa; line-height: 125%; font-family: monospace; } pre, code { color: #060; font: 13px/1.54 "courier new",courier,monospace; } .header-left .header-logo1 { width: 128px !important; } .header-desc { line-height: 20px; margin-top: 8px; } .fb-custom img, .twitter-custom img, .gplus-share img { cursor: pointer; opacity: 0.54; } .fb-custom img:hover, .twitter-custom img:hover, .gplus-share img:hover { opacity: 0.87; } .fb-like { width: 80px; } .post .share { float: right; } #twitter-share{ border: #CCC solid 1px; border-radius: 3px; background-image: -webkit-linear-gradient(top,#ffffff,#dedede); } .twitter-follow { background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimKBWDeRb1pqsbNiP9AFLyFDZHzXGYEJZRELMrZ6iI0yz4KeMPH_7tPsrMq9PpJ3H6riC_UohpWMn83_Z1N2sTuTTrVL7i6TrNzpO9oFg4e8VFK4zFJb1rfamWfc8RxG8Fhz2RgRgHN10u/s1600/twitter-bird.png) no-repeat left center; padding-left: 18px; font: normal normal normal 11px/18px 'Helvetica Neue',Arial,sans-serif; font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,.5); cursor: pointer; margin-bottom: 10px; } .twitter-fb { padding-top: 2px; } .fb-follow-button { background: -webkit-linear-gradient(#4c69ba, #3b55a0); background: -moz-linear-gradient(#4c69ba, #3b55a0); background: linear-gradient(#4c69ba, #3b55a0); border-radius: 2px; height: 18px; padding: 4px 0 0 3px; width: 57px; border: #4c69ba solid 1px; } .fb-follow-button a { text-decoration: none !important; text-shadow: 0 -1px 0 #354c8c; text-align: center; white-space: nowrap; font-size: 11px; color: white; vertical-align: top; } .fb-follow-button a:visited { color: white; } .fb-follow { padding: 0px 5px 3px 0px; width: 14px; vertical-align: bottom; } .gplus-wrapper { margin-top: 3px; display: inline-block; vertical-align: top; } .twitter-custom, .gplus-share { margin-right: 12px; } .fb-follow-button{ margin: 10px auto; } /** CUSTOM CODE **/ --></style> <style id='template-skin-1' type='text/css'><!-- .header-outer { clear: both; } .header-inner { margin: auto; padding: 0px; } .footer-outer { background: #f5f5f5; clear: both; margin: 0; } .footer-inner { margin: auto; padding: 0px; } .footer-inner-2 { /* Account for right hand column elasticity. */ max-width: calc(100% - 248px); } .google-footer-outer { clear: both; } .cols-wrapper, .google-footer-outer, .footer-inner, .header-inner { max-width: 978px; margin-left: auto; margin-right: auto; } .cols-wrapper { margin: auto; clear: both; margin-top: 60px; margin-bottom: 60px; overflow: hidden; } .col-main-wrapper { float: left; width: 100%; } .col-main { margin-right: 278px; max-width: 660px; } .col-right { float: right; width: 248px; margin-left: -278px; } /* Tweaks for layout mode. */ body#layout .google-footer-outer { display: none; } body#layout .header-outer, body#layout .footer-outer { background: none; } body#layout .header-inner { height: initial; } body#layout .cols-wrapper { margin-top: initial; margin-bottom: initial; } --></style> <!-- start all head --> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='https://blog.chromium.org/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://blog.chromium.org/2013/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Chromium Blog - Atom" href="https://blog.chromium.org/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Chromium Blog - RSS" href="https://blog.chromium.org/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Chromium Blog - Atom" href="https://www.blogger.com/feeds/2471378914199150966/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='https://blog.chromium.org/2013/' property='og:url'/> <meta content='Chromium Blog' property='og:title'/> <meta content='News and developments from the open source browser project' property='og:description'/> <!-- end all head --> <base target='_self'/> <style> html { font-family: Roboto, sans-serif; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; } body { padding: 0; /* This ensures that the scroll bar is always present, which is needed */ /* because content render happens after page load; otherwise the header */ /* would "bounce" in-between states. */ min-height: 150%; } h2 { font-size: 16px; } h1, h2, h3, h4, h5 { line-height: 2em; } html, h4, h5, h6 { font-size: 14px; } a, a:visited { /* Ensures links meet minimum contrast ratios. */ color: #3974d6; text-decoration: none; } a:focus, a:hover, a:active { text-decoration: none; } .Header { margin-top: 15px; } .Header h1 { font-size: 32px; font-weight: 300; line-height: 32px; height: 42px; } .header-inner .Header .titlewrapper { padding: 0; margin-top: 30px; } .header-inner .Header .descriptionwrapper { padding: 0; margin: 0; } .cols-wrapper { margin-top: 56px; } .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 60px; } .header-inner { height: 256px; position: relative; } html, .header-inner a { color: #212121; color: rgba(0,0,0,.87); } .header-inner .google-logo { display: inline-block; background-size: contain; z-index: 1; height: 70px; overflow: hidden; margin-top: 4px; margin-right: 8px; } .header-left { position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); margin-top: 12px; width: 100%; } .google-logo { margin-left: -4px; } .google-logo img{ height:70px; } #google-footer { position: relative; font-size: 13px; list-style: none; text-align: right; } #google-footer a { color: #444; } #google-footer ul { margin: 0; padding: 0; height: 144px; line-height: 144px; } #google-footer ul li { display: inline; } #google-footer ul li:before { color: #999; content: "\00b7"; font-weight: bold; margin: 5px; } #google-footer ul li:first-child:before { content: ''; } #google-footer .google-logo-dark { left: 0; margin-top: -16px; position: absolute; top: 50%; } /** Sitemap links. **/ .footer-inner-2 { font-size: 14px; padding-top: 42px; padding-bottom: 74px; } .footer-inner-2 .HTML h2 { color: #212121; color: rgba(0,0,0,.87); font-size: 14px; font-weight: 500; padding-left: 0; margin: 10px 0; } .footer-inner-2 .HTML ul { font-weight: normal; list-style: none; padding-left: 0; } .footer-inner-2 .HTML li { line-height: 24px; padding: 0; } .footer-inner-2 li a { color: rgba(65,132,243,.87); } /** Archive widget. **/ .BlogArchive { font-size: 13px; font-weight: normal; } .BlogArchive .widget-content { display: none; } .BlogArchive h2, .Label h2 { color: #4184F3; text-decoration: none; } .BlogArchive .hierarchy li { display: inline-block; } /* Specificity needed here to override widget CSS defaults. */ .BlogArchive #ArchiveList ul li, .BlogArchive #ArchiveList ul ul li { margin: 0; padding-left: 0; text-indent: 0; } .BlogArchive .intervalToggle { cursor: pointer; } .BlogArchive .expanded .intervalToggle .new-toggle { -ms-transform: rotate(180deg); transform: rotate(180deg); } .BlogArchive .new-toggle { float: right; padding-top: 3px; opacity: 0.87; } #ArchiveList { text-transform: uppercase; } #ArchiveList .expanded > ul:last-child { margin-bottom: 16px; } #ArchiveList .archivedate { width: 100%; } /* Months */ .BlogArchive .items { max-width: 150px; margin-left: -4px; } .BlogArchive .expanded .items { margin-bottom: 10px; overflow: hidden; } .BlogArchive .items > ul { float: left; height: 32px; } .BlogArchive .items a { padding: 0 4px; } .Label { font-size: 13px; font-weight: normal; } .sidebar-icon { display: inline-block; width: 24px; height: 24px; vertical-align: middle; margin-right: 12px; margin-top: -1px } .Label a { margin-right: 4px; } .Label .widget-content { display: none; } .FollowByEmail { font-size: 13px; font-weight: normal; } .FollowByEmail h2 { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-position: 0 50%; text-indent: 30px; } .FollowByEmail .widget-content { display: none; } .searchBox input { border: 1px solid #eee; color: #212121; color: rgba(0,0,0,.87); font-size: 14px; padding: 8px 8px 8px 40px; width: 164px; font-family: Roboto, sans-serif; background: url("https://www.gstatic.com/images/icons/material/system/1x/search_grey600_24dp.png") 8px center no-repeat; } .searchBox ::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color: rgba(0,0,0,.54); } .searchBox :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #000; opacity: 0.54; } .searchBox ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #000; opacity: 0.54; } .searchBox :-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #757575; } .widget-item-control { margin-top: 0px; } .section { margin: 0; padding: 0; } #sidebar-top { border: 1px solid #eee; } #sidebar-top > div { margin: 16px 0; } .widget ul { line-height: 1.6; } /*main post*/ .post { margin-bottom:30px; } #main .post .title { margin: 0; } #main .post .title a { color: #212121; color: rgba(0,0,0,.87); font-weight: normal; font-size: 24px; } #main .post .title a:hover { text-decoration:none; color: #3974d6; } .message, #main .post .post-header { margin: 0; padding: 0; } #main .post .post-header .caption, #main .post .post-header .labels-caption, #main .post .post-footer .caption, #main .post .post-footer .labels-caption { color: #444; font-weight: 500; } #main .tr-caption-container td { text-align: left; } #main .post .tr-caption { color: #757575; color: rgba(0,0,0,.54); display: block; max-width: 560px; padding-bottom: 20px; } #main .post .tr-caption-container { line-height: 24px; margin: -1px 0 0 0 !important; padding: 4px 0; text-align: left; } #main .post .post-header .published{ font-size:11px; font-weight:bold; } .post-header .publishdate { font-size: 17px; font-weight:normal; color: #757575; color: rgba(0,0,0,.54); } #main .post .post-footer{ font-size:12px; padding-bottom: 21px; } .label-footer { margin-bottom: 12px; margin-top: 12px; } .comment-img { margin-right: 16px; opacity: 0.54; vertical-align: middle; } #main .post .post-header .published { margin-bottom: 40px; margin-top: -2px; } .post .post-content { color: #212121; color: rgba(0,0,0,.87); font-size: 17px; margin: 25px 0 36px 0; line-height: 32px; } .post-body .post-content ul, .post-body .post-content ol { margin: 16px 0; padding: 0 48px; } .post-summary { display: none; } /* Another old-style caption. */ .post-content div i, .post-content div + i { font-size: 14px; font-style: normal; color: #757575; color: rgba(0,0,0,.54); display: block; line-height: 24px; margin-bottom: 16px; text-align: left; } /* Another old-style caption (with link) */ .post-content a > i { color: #4184F3 !important; } /* Old-style captions for images. */ .post-content .separator + div:not(.separator) { margin-top: -16px; } /* Capture section headers. */ .post-content br + br + b, .post-content .space + .space + b, .post-content .separator + b { display: inline-block; margin-bottom: 8px; margin-top: 24px; } .post-content li { line-height: 32px; } /* Override all post images/videos to left align. */ .post-content .separator, .post-content > div { text-align: left; } .post-content .separator > a, .post-content .separator > span { margin-left: 0 !important; } .post-content img { max-width: 100%; height: auto; width: auto; } .post-content .tr-caption-container img { margin-bottom: 12px; } .post-content iframe, .post-content embed { max-width: 100%; } .post-content .carousel-container { margin-bottom: 48px; } #main .post-content b { font-weight: 500; } /* These are the main paragraph spacing tweaks. */ #main .post-content br { content: ' '; display: block; padding: 4px; } .post-content .space { display: block; height: 8px; } .post-content iframe + .space, .post-content iframe + br { padding: 0 !important; } #main .post .jump-link { margin-bottom:10px; } .post-content img, .post-content iframe { margin: 30px 0 20px 0; } .post-content > img:first-child, .post-content > iframe:first-child { margin-top: 0; } .col-right .section { padding: 0 16px; } #aside { background:#fff; border:1px solid #eee; border-top: 0; } #aside .widget { margin:0; } #aside .widget h2, #ArchiveList .toggle + a.post-count-link { color: #212121; color: rgba(0,0,0,.87); font-weight: 400 !important; margin: 0; } #ArchiveList .toggle { float: right; } #ArchiveList .toggle .material-icons { padding-top: 4px; } #sidebar .tab { cursor: pointer; } #sidebar .tab .arrow { display: inline-block; float: right; } #sidebar .tab .icon { display: inline-block; vertical-align: top; height: 24px; width: 24px; margin-right: 13px; margin-left: -1px; margin-top: 1px; color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget-content > :first-child { padding-top: 8px; } #sidebar .active .tab .arrow { -ms-transform: rotate(180deg); transform: rotate(180deg); } #sidebar .arrow { color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget h2 { font-size: 14px; line-height: 24px; display: inline-block; } #sidebar .widget .BlogArchive { padding-bottom: 8px; } #sidebar .widget { border-bottom: 1px solid #eee; box-shadow: 0px 1px 0 white; margin-bottom: 0; padding: 14px 0; min-height: 20px; } #sidebar .widget:last-child { border-bottom: none; box-shadow: none; margin-bottom: 0; } #sidebar ul { margin: 0; padding: 0; } #sidebar ul li { list-style:none; padding:0; } #sidebar ul li a { line-height: 32px; } #sidebar .archive { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNpiNDY23s9AAWBioBCwYBM8c+YMVsUmJibEGYBNMS5DaeMFfDYSZQA2v9I3FrB5AZeriI4FmnrBccCT8mhmGs1MwyAzAQQYAKEWG9zm9QFEAAAAAElFTkSuQmCC"); height: 24px; line-height: 24px; padding-left: 30px; } #sidebar .labels { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNpiNDY23s9AAMycOfM7UF05kHkZmzwTMkdSUhKrIcXFxZy3bt3qBjIN8RrS09PDsHnzZjCNDr58+cKQlpbGDjSoHcg1w2oIyAUODg5gARCNzUVIBrUCuVYYhjx//pzhwIEDYAEQDeJjA1CDWIAGNQK59jBxRuSABbkAlwHIgIeHh2HWrFn/1NTU2oDcvSgBS4wBSC5iArqoCsj1YGIgEyAZVMoEchqlBjEB/cZAiUHg2AEGznpKDAImxOeM////B4VLKtBvEUCngZ1ILKivr3/u6+ubBzJAGZQ9gC5aQoqLgAY8BhkAZL4BuQQkxgXE34A4BuiiZEIuAhrwEGhAEZD5DpzYoIaA2UAM4kQADUrHZRDUgAIg8wO2XAwzbQXQa5OweQ1owB10AyA6gS7BgX1u3ry5397eHow3bdo0EyjGi00tQIABANPgyAH1q1eaAAAAAElFTkSuQmCC"); height: 20px; line-height: 20px; padding-left: 30px; } #sidebar .rss a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNqsVDGSgkAQHL2rIiIikohIc/EBRkbwAIwuwgfwAXiAD9AHSI7kEkECRCb6AIyINDLx7K0aa6kT7uq0q7YYtnZ7umdnt7darXbr9Zpegeu61DNNc0dvwCcH4/GYJpMJnc9nOhwOVJbl/4hAAokMECZJQtvt9k+kH7qufyEYDAakqqqYxFdRFBqNRmTbNg2HQ0rTlK7XayvR0xqBdDqdkuM4dE/0ULhYLOh4PHYrknG5XGi/31MYhuL/nkwonM1mlGUZ1XXdrsiyLGEDhY7juJEZ1u5tIixDGdYhmYw+B7CAzPP5nDabjdgIAgCksMX1832/3drtdqPT6SQWapomiGEFNkDEdpDMMAzK81ys/7XYy+XyoQgq2WoURSIJ2iIIgp/WZCCTvFm2wgeAU31aI3Q2GhIDMeB53qPYPIcm5VrxXIOIOxsDMStjVawAc1VViRgN22lNBiuQN3GR+SY07hpOoStmFQAKXRRFY93bnpG+fONfedi+BRgAbkS8Fxp7QQIAAAAASUVORK5CYII="); } #sidebar .subscription a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); } #sidebar-bottom { background: #f5f5f5; border-top:1px solid #eee; } #sidebar-bottom .widget { border-bottom: 1px solid #e0e0e0; padding: 15px 0; text-align: center; } #sidebar-bottom > div:last-child { border-bottom: 0; } #sidebar-bottom .text { line-height: 20px; } /* Home, forward, and backward pagination. */ .blog-pager { border-top : 1px #e0e0e0 solid; padding-top: 10px; margin-top: 15px; text-align: right !important; } #blog-pager { margin-botom: 0; margin-top: -14px; padding: 16px 0 0 0; } #blog-pager a { display: inline-block; } .blog-pager i.disabled { opacity: 0.2 !important; } .blog-pager i { color: black; margin-left: 16px; opacity: 0.54; } .blog-pager i:hover, .blog-pager i:active { opacity: 0.87; } #blog-pager-older-link, #blog-pager-newer-link { float: none; } .gplus-profile { background-color: #fafafa; border: 1px solid #eee; overflow: hidden; width: 212px; } .gplus-profile-inner { margin-left: -1px; margin-top: -1px; } /* Sidebar follow buttons. */ .followgooglewrapper { padding: 12px 0 0 0; } .loading { visibility: hidden; } .detail-page .post-footer .cmt_iframe_holder { padding-top: 40px !important; } /** Desktop **/ @media (max-width: 900px) { .col-right { display: none; } .col-main { margin-right: 0; min-width: initial; } .footer-outer { display: none; } .cols-wrapper { min-width: initial; } .google-footer-outer { background-color: #f5f5f5; } } /** Tablet **/ @media (max-width: 712px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 40px; } } /* An extra breakpoint accommodating for long blog titles. */ @media (max-width: 600px) { .header-left { height: 100%; position: initial; top: inherit; margin-top: 0; -webkit-transform: initial; transform: initial; } .header-title { margin-top: 18px; } .header-inner { height: auto; margin-bottom: 32px; margin-top: 32px; } .header-desc { margin-top: 12px; } .header-inner .google-logo { height: 70px; margin-top: 3px; } .header-inner .google-logo img { height: 70px; } .header-title h2 { font-size: 32px; line-height: 76px; } } /** Mobile/small desktop window; also landscape. **/ @media (max-width: 480px), (max-height: 480px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 16px; } .cols-wrapper { margin-top: 0; } .post-header .publishdate, .post .post-content { font-size: 16px; } .post .post-content { line-height: 28px; margin-bottom: 30px; } .post { margin-top: 30px; } .byline-author { display: block; font-size: 12px; line-height: 24px; margin-top: 6px; } #main .post .title a { font-weight: 500; color: #4c4c4c; color: rgba(0,0,0,.70); } #main .post .post-header { padding-bottom: 12px; } #main .post .post-header .published { margin-bottom: -8px; margin-top: 3px; } .post .read-more { display: block; margin-top: 14px; } .post .tr-caption { font-size: 12px; } #main .post .title a { font-size: 20px; line-height: 30px; } .post-content iframe { /* iframe won't keep aspect ratio when scaled down. */ max-height: 240px; } .post-content .separator img, .post-content .tr-caption-container img, .post-content iframe { margin-left: -16px; max-width: inherit; width: calc(100% + 32px); } .post-content table, .post-content td { width: 100%; } #blog-pager { margin: 0; padding: 16px 0; } /** List page tweaks. **/ .list-page .post-original { display: none; } .list-page .post-summary { display: block; } .list-page .comment-container { display: none; } .list-page #blog-pager { padding-top: 0; border: 0; margin-top: -8px; } .list-page .label-footer { display: none; } .list-page #main .post .post-footer { border-bottom: 1px solid #eee; margin: -16px 0 0 0; padding: 0 0 20px 0; } .list-page .post .share { display: none; } /** Detail page tweaks. **/ .detail-page .post-footer .cmt_iframe_holder { padding-top: 32px !important; } .detail-page .label-footer { margin-bottom: 0; } .detail-page #main .post .post-footer { padding-bottom: 0; } .detail-page #comments { display: none; } } [data-about-pullquote], [data-is-preview], [data-about-syndication] { display: none; } </style> <noscript> <style> .loading { visibility: visible }</style> </noscript> <script type='text/javascript'> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-37592578-1', 'auto', 'blogger'); ga('blogger.send', 'pageview'); </script> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=2471378914199150966&zx=3a5e6827-7ceb-4daf-b12c-bebbc55c1d22' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=2471378914199150966&zx=3a5e6827-7ceb-4daf-b12c-bebbc55c1d22' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?display=swap&family=Roboto"></head> <body> <script type='text/javascript'> //<![CDATA[ var axel = Math.random() + ""; var a = axel * 10000000000000; document.write('<iframe src="https://2542116.fls.doubleclick.net/activityi;src=2542116;type=gblog;cat=googl0;ord=ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>'); //]]> </script> <noscript> <img alt='' height='1' src='https://ad.doubleclick.net/ddm/activity/src=2542116;type=gblog;cat=googl0;ord=1?' width='1'/> </noscript> <!-- Header --> <div class='header-outer'> <div class='header-inner'> <div class='section' id='header'><div class='widget Header' data-version='1' id='Header1'> <div class='header-left'> <div class='header-title'> <a class='google-logo' href='https://blog.chromium.org/'> <img alt="Chromium Blog" height="50" src="//1.bp.blogspot.com/-vkF7AFJOwBk/VkQxeAGi1mI/AAAAAAAARYo/57denvsQ8zA/s1600-r/logo_chromium.png"> </a> <a href='/.'> <h2> Chromium Blog </h2> </a> </div> <div class='header-desc'> News and developments from the open source browser project </div> </div> </div></div> </div> </div> <!-- all content wrapper start --> <div class='cols-wrapper loading'> <div class='col-main-wrapper'> <div class='col-main'> <div class='section' id='main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='post' data-id='2850461760888235031' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/12/keeping-chrome-extensions-simple.html' itemprop='url' title='Keeping Chrome Extensions Simple'> Keeping Chrome Extensions Simple </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, December 19, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Today we're announcing an update to the <a href="https://developers.google.com/chrome/web-store/program_policies">Chrome Web Store policy</a>: extensions in the Chrome Web Store must have a single purpose that is narrow and easy-to-understand. While this has always been the intent of the Chrome extension system, not all extensions have lived up to this ideal. These multi-purpose extensions can crowd your browser UI and slow down your web browsing - sometimes significantly. We're making this policy change to fix these problems and give users more control over their browsing experience. <br /> <br /> A simple and speedy browsing experience has been part of the <a href="http://www.chromium.org/developers/core-principles">core principles</a> of Chrome since <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">the beginning</a>. Simplicity was important to us because browsers had become overly complex, with bulky user interfaces (commonly referred to in the industry as "chrome"). That detracted from the content of the page, which was the whole point of the browser. The name "Chrome" came from this principle as we wanted the browser to be about "content, not chrome." <br /> <br /> One significant contributor to the excess of browser chrome at the time were extensions like the then-ubiquitous toolbar. When users installed more than one of these toolbars, the results could be overwhelming. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3rDUXGdhSKsRc5JwU1QCyGngwWNRbvKDRU_XUXGn48Ct4fP7znX8wPmysyxRjWuShj9yq9IW_28U5XdwIIcMXFKmwQElxXNhdVT2UFTUqJaKocrL4gex6sTfVuCB4ToIwoMzjzxSuONCK/s1600/2651970411_b210f8f3ac.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3rDUXGdhSKsRc5JwU1QCyGngwWNRbvKDRU_XUXGn48Ct4fP7znX8wPmysyxRjWuShj9yq9IW_28U5XdwIIcMXFKmwQElxXNhdVT2UFTUqJaKocrL4gex6sTfVuCB4ToIwoMzjzxSuONCK/s400/2651970411_b210f8f3ac.jpg" width="400" /></a> </div> <div style="text-align: center;"> <br /></div> To keep with our principle of simplicity, we decided to take a different approach. Chrome extensions would be simple and single-purpose in nature, and each would only be allowed <a href="//www.youtube.com/watch?v=BZeQETah684">a single visible UI "surface"</a> in Chrome, a single browser action or page action button. Toolbars wouldn't be supported by design, and users would have more control over which features they added to their browser. <br /> <br /> Unfortunately, in some cases, we couldn't enforce these design goals technically. With content scripts, extension developers have full control over the page, so they can put up as much UI as they want, even going as far as to create toolbars in the page. Others used content scripts to create extensions with more subtle features bundled together that were harder to attribute to specific extensions. In many cases, the Chrome Web Store helped by showing poor reviews when users had noticed bad behavior from a particular extension, but in other cases the connection wasn't clear. <br /> <br /> Even worse, when extensions were sideloaded locally on their computer (perhaps bundled as part of another piece of software they installed) the user wouldn't have the benefit of the information in the Chrome Web Store at all, so they might not realize they were agreeing to install an extension with unwanted functionality or poor reviews. <br /> <br /> It is for these reasons that we've updated the Chrome Web Store policy to enforce our original single-purpose design goal for extensions. We realize that this will require significant changes for some existing extensions. Some may need to be split into multiple separate extensions. Developers may need to switch to a different approach to monetization, which we've recently made easier by adding <a href="https://developers.google.com/chrome/web-store/docs/payments-otp">payment options to extensions</a>. Since these changes may take some time to implement, we're not going to start enforcing the policy for existing extensions in the Web Store until June 2014. For new extensions, the policy will go into effect immediately. <br /> <br /> If you have any questions, please find us in our <a href="https://plus.google.com/u/0/communities/107816657013931145360">G+ community</a>, on <a href="http://stackoverflow.com/questions/tagged/google-chrome-extension">Stack Overflow</a>, or our <a href="https://groups.google.com/a/chromium.org/forum/#!forum/chromium-extensions">mailing list</a>.<br /> <br /> <b>Update May 16, 2014:</b> This will begin being enforced for previously grandfathered extensions (those which were in the Web Store prior to Dec 19, 2013) on July 15, 2014.<br /> <br /> Posted by Erik Kay, Engineering Director <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Today we're announcing an update to the <a href="https://developers.google.com/chrome/web-store/program_policies">Chrome Web Store policy</a>: extensions in the Chrome Web Store must have a single purpose that is narrow and easy-to-understand. While this has always been the intent of the Chrome extension system, not all extensions have lived up to this ideal. These multi-purpose extensions can crowd your browser UI and slow down your web browsing - sometimes significantly. We're making this policy change to fix these problems and give users more control over their browsing experience. <br /> <br /> A simple and speedy browsing experience has been part of the <a href="http://www.chromium.org/developers/core-principles">core principles</a> of Chrome since <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">the beginning</a>. Simplicity was important to us because browsers had become overly complex, with bulky user interfaces (commonly referred to in the industry as "chrome"). That detracted from the content of the page, which was the whole point of the browser. The name "Chrome" came from this principle as we wanted the browser to be about "content, not chrome." <br /> <br /> One significant contributor to the excess of browser chrome at the time were extensions like the then-ubiquitous toolbar. When users installed more than one of these toolbars, the results could be overwhelming. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3rDUXGdhSKsRc5JwU1QCyGngwWNRbvKDRU_XUXGn48Ct4fP7znX8wPmysyxRjWuShj9yq9IW_28U5XdwIIcMXFKmwQElxXNhdVT2UFTUqJaKocrL4gex6sTfVuCB4ToIwoMzjzxSuONCK/s1600/2651970411_b210f8f3ac.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3rDUXGdhSKsRc5JwU1QCyGngwWNRbvKDRU_XUXGn48Ct4fP7znX8wPmysyxRjWuShj9yq9IW_28U5XdwIIcMXFKmwQElxXNhdVT2UFTUqJaKocrL4gex6sTfVuCB4ToIwoMzjzxSuONCK/s400/2651970411_b210f8f3ac.jpg" width="400" /></a> </div> <div style="text-align: center;"> <br /></div> To keep with our principle of simplicity, we decided to take a different approach. Chrome extensions would be simple and single-purpose in nature, and each would only be allowed <a href="//www.youtube.com/watch?v=BZeQETah684">a single visible UI "surface"</a> in Chrome, a single browser action or page action button. Toolbars wouldn't be supported by design, and users would have more control over which features they added to their browser. <br /> <br /> Unfortunately, in some cases, we couldn't enforce these design goals technically. With content scripts, extension developers have full control over the page, so they can put up as much UI as they want, even going as far as to create toolbars in the page. Others used content scripts to create extensions with more subtle features bundled together that were harder to attribute to specific extensions. In many cases, the Chrome Web Store helped by showing poor reviews when users had noticed bad behavior from a particular extension, but in other cases the connection wasn't clear. <br /> <br /> Even worse, when extensions were sideloaded locally on their computer (perhaps bundled as part of another piece of software they installed) the user wouldn't have the benefit of the information in the Chrome Web Store at all, so they might not realize they were agreeing to install an extension with unwanted functionality or poor reviews. <br /> <br /> It is for these reasons that we've updated the Chrome Web Store policy to enforce our original single-purpose design goal for extensions. We realize that this will require significant changes for some existing extensions. Some may need to be split into multiple separate extensions. Developers may need to switch to a different approach to monetization, which we've recently made easier by adding <a href="https://developers.google.com/chrome/web-store/docs/payments-otp">payment options to extensions</a>. Since these changes may take some time to implement, we're not going to start enforcing the policy for existing extensions in the Web Store until June 2014. For new extensions, the policy will go into effect immediately. <br /> <br /> If you have any questions, please find us in our <a href="https://plus.google.com/u/0/communities/107816657013931145360">G+ community</a>, on <a href="http://stackoverflow.com/questions/tagged/google-chrome-extension">Stack Overflow</a>, or our <a href="https://groups.google.com/a/chromium.org/forum/#!forum/chromium-extensions">mailing list</a>.<br /> <br /> <b>Update May 16, 2014:</b> This will begin being enforced for previously grandfathered extensions (those which were in the Web Store prior to Dec 19, 2013) on July 15, 2014.<br /> <br /> Posted by Erik Kay, Engineering Director <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Keeping Chrome Extensions Simple&url=https://blog.chromium.org/2013/12/keeping-chrome-extensions-simple.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/12/keeping-chrome-extensions-simple.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/12/keeping-chrome-extensions-simple.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='6801843838697241179' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/12/ecma-forms-tc52-for-dart-standardization.html' itemprop='url' title='Ecma forms TC52 for Dart Standardization'> Ecma forms TC52 for Dart Standardization </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, December 12, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> This week <a href="http://www.ecma-international.org/">Ecma</a> created a new technical committee named <a href="http://www.ecma-international.org/memento/TC52.htm">TC52</a> to publish a standard specification of the <a href="https://www.dartlang.org/">Dart</a> language. We’re excited about this milestone in the evolution of Dart and the web. <br /> <br /> Dart is ready for standardization. As of last month’s <a href="http://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html">1.0 SDK release</a>, Dart is now officially stable and mature enough for production use. We’ll be collaborating with the broader web community via TC52 to responsibly evolve the language going forward. <br /> <br /> The new standardization process is an important step towards a future where Dart runs natively in web browsers. Dart apps can be fast when compiled to JavaScript, but an embedded Dart VM enables <a href="https://www.dartlang.org/performance/">even better performance</a>. <br /> <br /> We're thrilled to have a dedicated technical committee working on Dart. We also feel confident that Ecma—the home of standards such as JavaScript, Eiffel, and C#—is the right place to help guide the evolution of the Dart language. If you’d like to get involved, please <a href="http://www.ecma-international.org/memento/join.htm">join the committee</a>. <br /> <br /> Posted by Anders Sandholm, Product Manager and Standard Guy <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> This week <a href="http://www.ecma-international.org/">Ecma</a> created a new technical committee named <a href="http://www.ecma-international.org/memento/TC52.htm">TC52</a> to publish a standard specification of the <a href="https://www.dartlang.org/">Dart</a> language. We’re excited about this milestone in the evolution of Dart and the web. <br /> <br /> Dart is ready for standardization. As of last month’s <a href="http://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html">1.0 SDK release</a>, Dart is now officially stable and mature enough for production use. We’ll be collaborating with the broader web community via TC52 to responsibly evolve the language going forward. <br /> <br /> The new standardization process is an important step towards a future where Dart runs natively in web browsers. Dart apps can be fast when compiled to JavaScript, but an embedded Dart VM enables <a href="https://www.dartlang.org/performance/">even better performance</a>. <br /> <br /> We're thrilled to have a dedicated technical committee working on Dart. We also feel confident that Ecma—the home of standards such as JavaScript, Eiffel, and C#—is the right place to help guide the evolution of the Dart language. If you’d like to get involved, please <a href="http://www.ecma-international.org/memento/join.htm">join the committee</a>. <br /> <br /> Posted by Anders Sandholm, Product Manager and Standard Guy <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Ecma forms TC52 for Dart Standardization&url=https://blog.chromium.org/2013/12/ecma-forms-tc52-for-dart-standardization.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/12/ecma-forms-tc52-for-dart-standardization.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/12/ecma-forms-tc52-for-dart-standardization.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='5439549328675483910' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/12/chrome-devtools-for-mobile-emulate-and.html' itemprop='url' title='Chrome DevTools for Mobile: Emulate and Screencast'> Chrome DevTools for Mobile: Emulate and Screencast </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, December 3, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Modern web apps are expected to render and perform on mobile perfectly. That means considering responsive design, 60 fps and connectivity early in the development cycle. With the Beta channel of Chrome for <a href="https://play.google.com/store/apps/details?id=com.chrome.beta&hl=en">Android</a> and <a href="https://www.google.com/intl/en/chrome/browser/beta.html">desktop</a>, we’ve made it easier to develop and debug mobile web apps through an improved <a href="https://developers.google.com/chrome-developer-tools/docs/mobile-emulation">viewport emulation</a> and zero-config, screencast-enabled <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">remote debugging</a>. <br /> <br /> While designing your app, you want to make sure it looks great on multiple screens. DevTools now enables you to go through the popular device screens without leaving the development environment. Just select a device from the Console drawer’s Emulation tab<sup>1</sup> and all the relevant viewport properties will be set for you. We'll run the page through the same mobile viewporting code used in mobile Chrome to get you accurate results. You also have full control of the emulation parameters, such as screen resolution, touch emulation, <a href="http://www.html5rocks.com/en/tutorials/canvas/hidpi/">devicePixelRatio</a>, user agent, sensors and many more. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMbyxPE_MTzgPhy9pi115o3p4XIUr_9eZvQJaHo-60wzwNNDW-mT_ZlJ47_g2oTjsgUg45wSM_Axw4aNEMYJsurTaCF82HO0RAU9Jty9eURsdS_bnw4c2GO1T2owth0XcQvFM_UN7Oq4L7/s1600/Screen+Shot+2013-11-12+at+16.00.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMbyxPE_MTzgPhy9pi115o3p4XIUr_9eZvQJaHo-60wzwNNDW-mT_ZlJ47_g2oTjsgUg45wSM_Axw4aNEMYJsurTaCF82HO0RAU9Jty9eURsdS_bnw4c2GO1T2owth0XcQvFM_UN7Oq4L7/s400/Screen+Shot+2013-11-12+at+16.00.58.png" width="400" /></a> </div> <br /> But what if you need to test the actual web app's performance on a real device? <br /> <br /> Chrome Beta – including <a href="https://support.google.com/chromebook/answer/1086915?hl=en-GB">ChromeOS</a> – now supports native USB discovery of connected devices. Find them under Tools → Inspect Devices menu item, or visit the about:inspect page. There’s no configuration necessary and no need for the <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">adb command line tool</a> or extensions to see all instances of Chrome and <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews">WebView</a> on the devices connected to your computer<sup>2</sup>. <br /> <br /> While connected over USB, you can screencast the full viewport content from the device to DevTools. The corresponding icon will be shown next to the Elements tab if the inspected device is able to screencast. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNi9x-sw5IpBurdM3pgV1DFyxaCYgtwkSJ5ulrciY5gbcRjeNKgiPoQuIk0L_09ooZBVzJ16QNRukkabdOo1U-7Hg05FD5qOBZU3SQvSk_3e85gyBQNwA11rF_tR5kkVb9molCepPMjQo/s1600/screencast_icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNi9x-sw5IpBurdM3pgV1DFyxaCYgtwkSJ5ulrciY5gbcRjeNKgiPoQuIk0L_09ooZBVzJ16QNRukkabdOo1U-7Hg05FD5qOBZU3SQvSk_3e85gyBQNwA11rF_tR5kkVb9molCepPMjQo/s1600/screencast_icon.png" /></a> </div> <br /> Keyboard and mouse events are also sent from DevTools to your device, so you don't even need to touch it while you're testing your apps. <br /> <br /> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/Q7rEFEMpwe4" width="560"></iframe> <br /> <br /> Improved <a href="https://developers.google.com/chrome-developer-tools/docs/mobile-emulation">mobile emulation</a>, <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">USB debugging</a> and screencast make it easier to develop, inspect and debug your mobile applications with DevTools. Have a look at <a href="//www.youtube.com/watch?v=gZH1d2Co1X0">Paul Irish’s talk from the Chrome Dev Summit 2013 for a hands-on demo</a> of these features. <br /> <br /> Posted by Pavel Feldman, Software Engineer and Viewport Teleporter <br /> <br /> <span style="font-size: x-small;">1 You need to check “Show 'Emulation' view in console drawer” in DevTool’s Settings→ Overrides to enable the emulation features </span><br /> <span style="font-size: x-small;">2 Windows users need to install the <a href="http://developer.android.com/tools/extras/oem-usb.html">USB device drivers</a> to enable device communication</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Modern web apps are expected to render and perform on mobile perfectly. That means considering responsive design, 60 fps and connectivity early in the development cycle. With the Beta channel of Chrome for <a href="https://play.google.com/store/apps/details?id=com.chrome.beta&hl=en">Android</a> and <a href="https://www.google.com/intl/en/chrome/browser/beta.html">desktop</a>, we’ve made it easier to develop and debug mobile web apps through an improved <a href="https://developers.google.com/chrome-developer-tools/docs/mobile-emulation">viewport emulation</a> and zero-config, screencast-enabled <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">remote debugging</a>. <br /> <br /> While designing your app, you want to make sure it looks great on multiple screens. DevTools now enables you to go through the popular device screens without leaving the development environment. Just select a device from the Console drawer’s Emulation tab<sup>1</sup> and all the relevant viewport properties will be set for you. We'll run the page through the same mobile viewporting code used in mobile Chrome to get you accurate results. You also have full control of the emulation parameters, such as screen resolution, touch emulation, <a href="http://www.html5rocks.com/en/tutorials/canvas/hidpi/">devicePixelRatio</a>, user agent, sensors and many more. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMbyxPE_MTzgPhy9pi115o3p4XIUr_9eZvQJaHo-60wzwNNDW-mT_ZlJ47_g2oTjsgUg45wSM_Axw4aNEMYJsurTaCF82HO0RAU9Jty9eURsdS_bnw4c2GO1T2owth0XcQvFM_UN7Oq4L7/s1600/Screen+Shot+2013-11-12+at+16.00.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMbyxPE_MTzgPhy9pi115o3p4XIUr_9eZvQJaHo-60wzwNNDW-mT_ZlJ47_g2oTjsgUg45wSM_Axw4aNEMYJsurTaCF82HO0RAU9Jty9eURsdS_bnw4c2GO1T2owth0XcQvFM_UN7Oq4L7/s400/Screen+Shot+2013-11-12+at+16.00.58.png" width="400" /></a> </div> <br /> But what if you need to test the actual web app's performance on a real device? <br /> <br /> Chrome Beta – including <a href="https://support.google.com/chromebook/answer/1086915?hl=en-GB">ChromeOS</a> – now supports native USB discovery of connected devices. Find them under Tools → Inspect Devices menu item, or visit the about:inspect page. There’s no configuration necessary and no need for the <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">adb command line tool</a> or extensions to see all instances of Chrome and <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews">WebView</a> on the devices connected to your computer<sup>2</sup>. <br /> <br /> While connected over USB, you can screencast the full viewport content from the device to DevTools. The corresponding icon will be shown next to the Elements tab if the inspected device is able to screencast. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNi9x-sw5IpBurdM3pgV1DFyxaCYgtwkSJ5ulrciY5gbcRjeNKgiPoQuIk0L_09ooZBVzJ16QNRukkabdOo1U-7Hg05FD5qOBZU3SQvSk_3e85gyBQNwA11rF_tR5kkVb9molCepPMjQo/s1600/screencast_icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNi9x-sw5IpBurdM3pgV1DFyxaCYgtwkSJ5ulrciY5gbcRjeNKgiPoQuIk0L_09ooZBVzJ16QNRukkabdOo1U-7Hg05FD5qOBZU3SQvSk_3e85gyBQNwA11rF_tR5kkVb9molCepPMjQo/s1600/screencast_icon.png" /></a> </div> <br /> Keyboard and mouse events are also sent from DevTools to your device, so you don't even need to touch it while you're testing your apps. <br /> <br /> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/Q7rEFEMpwe4" width="560"></iframe> <br /> <br /> Improved <a href="https://developers.google.com/chrome-developer-tools/docs/mobile-emulation">mobile emulation</a>, <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging">USB debugging</a> and screencast make it easier to develop, inspect and debug your mobile applications with DevTools. Have a look at <a href="//www.youtube.com/watch?v=gZH1d2Co1X0">Paul Irish’s talk from the Chrome Dev Summit 2013 for a hands-on demo</a> of these features. <br /> <br /> Posted by Pavel Feldman, Software Engineer and Viewport Teleporter <br /> <br /> <span style="font-size: x-small;">1 You need to check “Show 'Emulation' view in console drawer” in DevTool’s Settings→ Overrides to enable the emulation features </span><br /> <span style="font-size: x-small;">2 Windows users need to install the <a href="http://developer.android.com/tools/extras/oem-usb.html">USB device drivers</a> to enable device communication</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Chrome DevTools for Mobile: Emulate and Screencast&url=https://blog.chromium.org/2013/12/chrome-devtools-for-mobile-emulate-and.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/12/chrome-devtools-for-mobile-emulate-and.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/12/chrome-devtools-for-mobile-emulate-and.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='812484593155099781' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html' itemprop='url' title='Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input'> Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, November 21, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> The latest Chrome <a href="https://www.google.com/landing/chrome/beta/">Beta</a> channel release includes a slew of new developer features that make the web faster and safer for users. Unless otherwise noted, changes apply to desktop versions of Chrome and Chrome for Android. <br /> <br /> <b>Animated WebP</b> <br /> <br /> The animated <a href="https://developers.google.com/speed/webp/faq#what_is_webp_why_should_i_use_it">WebP</a> image format offers some important <a href="https://developers.google.com/speed/webp/faq#why_should_i_use_animated_webp">improvements</a> as an alternative to animated GIF, including true alpha channel (8-bit) as compared to a binary (1-bit) alpha in GIFs. Also, each frame can be lossy or lossless as needed. Compare the <a href="https://www.gstatic.com/webp/animated/1.webp">animated WebP</a> version (372 KB) of the picture below to the <a href="https://www.gstatic.com/webp/animated/1.gif">animated GIF</a> version (870 KB). The WebP version is 57% smaller. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7R2uX-DsW2tC_vcdg3GELwD90yAf-yJ8QAGTgkxrUHM13kIi_gcwdBWTZe1wU1LjKX1LdrOjii3RiuVD1e-z-ZWc0X9pNHB6j-h4HYUOx4znzwHX1ubKCenC5dfG6DzQkeLM8xFe0KND/s1600/rubikscube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7R2uX-DsW2tC_vcdg3GELwD90yAf-yJ8QAGTgkxrUHM13kIi_gcwdBWTZe1wU1LjKX1LdrOjii3RiuVD1e-z-ZWc0X9pNHB6j-h4HYUOx4znzwHX1ubKCenC5dfG6DzQkeLM8xFe0KND/s1600/rubikscube.png" /></a> <br /> <br /></div> <b>300ms tap delay removal on Chrome for Android</b> <br /> <br /> Starting this release, responsive mobile websites will get a performance boost in Chrome for Android because <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/8evES7o-QTY%20">we’ve disabled double-tap zoom</a>. Previously, to support double-tap zoom, Chrome had to delay every touch event sent to the webpage by 300ms to allow the user to tap a second time. Now mobile-friendly sites that are already formatted to automatically fit in the page width will receive click events instantly and can respond to user input more quickly. <br /> <br /> <b>NPAPI plug-ins blocked by default</b><br /> <br /> As we <a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html">announced</a> a few months ago, all but a handful of <a href="http://en.wikipedia.org/wiki/NPAPI">Netscape Plugin Application Programming Interface (NPAPI)</a> plug-ins will be blocked by default starting in today’s Beta. Check out the <a href="http://www.chromium.org/developers/npapi-deprecation">developer guide</a> to learn more. <br /> <br /> <b>Vibration API</b> <br /> <br /> New in Chrome for Android, the <a href="http://davidwalsh.name/vibration-api">Vibration API</a> allows web developers to programmatically provide tactile feedback in the form of vibration. Use cases include improved accessibility and more engaging browser-based games. <br /> <br /> <b>Chrome Apps and Extensions APIs</b><br /> <ul> <li><a href="http://developer.chrome.com/extensions/signedInDevices.html">signedInDevices API</a> allows you retrieve a list of the user’s signed-in devices.</li> <li><a href="http://developer.chrome.com/apps/mediaGalleries.html">MediaGallery API</a> now supports import of Picasa albums.</li> <li>The <a href="http://developer.chrome.com/apps/identity.html">Identity API</a> now provides <a href="http://developer.chrome.com/apps/identity.html#event-onSignInChanged">events</a> such as sign-in and sign-out.</li> <li>Websites in incognito tab can now <a href="http://developer.chrome.com/extensions/manifest/externally_connectable.html">connect</a> to Apps with user consent.</li> <li><a href="http://developer.chrome.com/apps/runtime.html">chrome.runtime API</a> now optionally provides TLS channel ID to extensions or apps to allow for stronger security.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. <br /> <br /> Posted by Urvang Joshi, Software Engineer and Aspiring Animator <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> The latest Chrome <a href="https://www.google.com/landing/chrome/beta/">Beta</a> channel release includes a slew of new developer features that make the web faster and safer for users. Unless otherwise noted, changes apply to desktop versions of Chrome and Chrome for Android. <br /> <br /> <b>Animated WebP</b> <br /> <br /> The animated <a href="https://developers.google.com/speed/webp/faq#what_is_webp_why_should_i_use_it">WebP</a> image format offers some important <a href="https://developers.google.com/speed/webp/faq#why_should_i_use_animated_webp">improvements</a> as an alternative to animated GIF, including true alpha channel (8-bit) as compared to a binary (1-bit) alpha in GIFs. Also, each frame can be lossy or lossless as needed. Compare the <a href="https://www.gstatic.com/webp/animated/1.webp">animated WebP</a> version (372 KB) of the picture below to the <a href="https://www.gstatic.com/webp/animated/1.gif">animated GIF</a> version (870 KB). The WebP version is 57% smaller. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7R2uX-DsW2tC_vcdg3GELwD90yAf-yJ8QAGTgkxrUHM13kIi_gcwdBWTZe1wU1LjKX1LdrOjii3RiuVD1e-z-ZWc0X9pNHB6j-h4HYUOx4znzwHX1ubKCenC5dfG6DzQkeLM8xFe0KND/s1600/rubikscube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7R2uX-DsW2tC_vcdg3GELwD90yAf-yJ8QAGTgkxrUHM13kIi_gcwdBWTZe1wU1LjKX1LdrOjii3RiuVD1e-z-ZWc0X9pNHB6j-h4HYUOx4znzwHX1ubKCenC5dfG6DzQkeLM8xFe0KND/s1600/rubikscube.png" /></a> <br /> <br /></div> <b>300ms tap delay removal on Chrome for Android</b> <br /> <br /> Starting this release, responsive mobile websites will get a performance boost in Chrome for Android because <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/8evES7o-QTY%20">we’ve disabled double-tap zoom</a>. Previously, to support double-tap zoom, Chrome had to delay every touch event sent to the webpage by 300ms to allow the user to tap a second time. Now mobile-friendly sites that are already formatted to automatically fit in the page width will receive click events instantly and can respond to user input more quickly. <br /> <br /> <b>NPAPI plug-ins blocked by default</b><br /> <br /> As we <a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html">announced</a> a few months ago, all but a handful of <a href="http://en.wikipedia.org/wiki/NPAPI">Netscape Plugin Application Programming Interface (NPAPI)</a> plug-ins will be blocked by default starting in today’s Beta. Check out the <a href="http://www.chromium.org/developers/npapi-deprecation">developer guide</a> to learn more. <br /> <br /> <b>Vibration API</b> <br /> <br /> New in Chrome for Android, the <a href="http://davidwalsh.name/vibration-api">Vibration API</a> allows web developers to programmatically provide tactile feedback in the form of vibration. Use cases include improved accessibility and more engaging browser-based games. <br /> <br /> <b>Chrome Apps and Extensions APIs</b><br /> <ul> <li><a href="http://developer.chrome.com/extensions/signedInDevices.html">signedInDevices API</a> allows you retrieve a list of the user’s signed-in devices.</li> <li><a href="http://developer.chrome.com/apps/mediaGalleries.html">MediaGallery API</a> now supports import of Picasa albums.</li> <li>The <a href="http://developer.chrome.com/apps/identity.html">Identity API</a> now provides <a href="http://developer.chrome.com/apps/identity.html#event-onSignInChanged">events</a> such as sign-in and sign-out.</li> <li>Websites in incognito tab can now <a href="http://developer.chrome.com/extensions/manifest/externally_connectable.html">connect</a> to Apps with user consent.</li> <li><a href="http://developer.chrome.com/apps/runtime.html">chrome.runtime API</a> now optionally provides TLS channel ID to extensions or apps to allow for stronger security.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. <br /> <br /> Posted by Urvang Joshi, Software Engineer and Aspiring Animator <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input&url=https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://blog.chromium.org/search/label/beta' rel='tag'> beta </a> </span> </div> </div> </div> <div class='post' data-id='7074435081586883133' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/making-web-faster-with-spdy-and-http2.html' itemprop='url' title='Making the web faster with SPDY and HTTP/2'> Making the web faster with SPDY and HTTP/2 </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, November 20, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Four years ago we <a href="http://blog.chromium.org/2009/11/2x-faster-web.html">announced SPDY</a>, an experimental protocol designed to make the web faster. It has matured quickly since then: it’s been adopted by Chrome, <a href="http://my.opera.com/desktopteam/blog/2012/07/06/opera-labs-spdy">Opera</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=528288">Firefox</a> and <a href="http://blogs.msdn.com/b/ieinternals/archive/2013/09/24/internet-explorer-11-changelist-change-log.aspx">Internet Explorer</a>, dozens of server and middleware vendors, and many large sites. SPDY also became the foundation of the <a href="http://tools.ietf.org/html/draft-ietf-httpbis-http2">HTTP/2 protocol</a> developed by the IETF, and is continuing to serve as an experimental ground for prototyping and testing new features for HTTP/2. <br /> <br /> When we set out on this journey the objective was to make the web faster and we wanted to share our latest results. Of course, as with every aspect of performance, the numbers vary for each site, based on how it is constructed, the number of downloaded assets and dozens of other criteria. That said, we’ve observed significant performance improvements in latency—as measured by time from first request byte to onload event in the browser—across all of Google’s major web applications.<br /> <b id="docs-internal-guid-43844bcd-7714-7112-1598-a8054327da03" style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-size: 12px; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b> <br /> <div dir="ltr"> <table style="border-collapse: collapse; border: none;"><colgroup><col width="147"></col><col width="112"></col><col width="124"></col><col width="122"></col><col width="119"></col></colgroup><tbody> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><br /> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google News</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Sites</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Drive</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Maps</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Median</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-43%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-27%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-23%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-24%</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5th percentile<br class="kix-line-break" />(fast connections)</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-32%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-30%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-15%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-20%</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">95th percentile<br class="kix-line-break" />(slow connections)</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-44%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-33%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-36%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-28%</span></div> </td></tr> </tbody></table> </div> <br /> The above results were measured for Chrome version 29 and compare HTTPS vs. SPDY for each application across millions of real user sessions with various connectivity profiles. SPDY delivers significant latency savings for users with fast connections, at the median, and for the long tail users with high round-trip times. <br /> <br /> In parallel with our contributions to the HTTP/2 standard, we continue to prototype further SPDY performance improvements through smarter compression, flow control, and prioritization. Our hope is that each of these will deliver better and faster SPDY and HTTP/2 protocols. We aren’t done yet—there are still many opportunities and ideas to explore to make the web faster! <br /> <br /> Posted by Hasan Khalil, Roberto Peon, and Ilya Grigorik, SPeeDY Software Engineers <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Four years ago we <a href="http://blog.chromium.org/2009/11/2x-faster-web.html">announced SPDY</a>, an experimental protocol designed to make the web faster. It has matured quickly since then: it’s been adopted by Chrome, <a href="http://my.opera.com/desktopteam/blog/2012/07/06/opera-labs-spdy">Opera</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=528288">Firefox</a> and <a href="http://blogs.msdn.com/b/ieinternals/archive/2013/09/24/internet-explorer-11-changelist-change-log.aspx">Internet Explorer</a>, dozens of server and middleware vendors, and many large sites. SPDY also became the foundation of the <a href="http://tools.ietf.org/html/draft-ietf-httpbis-http2">HTTP/2 protocol</a> developed by the IETF, and is continuing to serve as an experimental ground for prototyping and testing new features for HTTP/2. <br /> <br /> When we set out on this journey the objective was to make the web faster and we wanted to share our latest results. Of course, as with every aspect of performance, the numbers vary for each site, based on how it is constructed, the number of downloaded assets and dozens of other criteria. That said, we’ve observed significant performance improvements in latency—as measured by time from first request byte to onload event in the browser—across all of Google’s major web applications.<br /> <b id="docs-internal-guid-43844bcd-7714-7112-1598-a8054327da03" style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-size: 12px; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b> <br /> <div dir="ltr"> <table style="border-collapse: collapse; border: none;"><colgroup><col width="147"></col><col width="112"></col><col width="124"></col><col width="122"></col><col width="119"></col></colgroup><tbody> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><br /> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google News</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Sites</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Drive</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Google Maps</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Median</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-43%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-27%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-23%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-24%</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5th percentile<br class="kix-line-break" />(fast connections)</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-32%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-30%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-15%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-20%</span></div> </td></tr> <tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; color: black; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">95th percentile<br class="kix-line-break" />(slow connections)</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-44%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-33%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-36%</span></div> </td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"> <span style="background-color: transparent; color: #0da861; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">-28%</span></div> </td></tr> </tbody></table> </div> <br /> The above results were measured for Chrome version 29 and compare HTTPS vs. SPDY for each application across millions of real user sessions with various connectivity profiles. SPDY delivers significant latency savings for users with fast connections, at the median, and for the long tail users with high round-trip times. <br /> <br /> In parallel with our contributions to the HTTP/2 standard, we continue to prototype further SPDY performance improvements through smarter compression, flow control, and prioritization. Our hope is that each of these will deliver better and faster SPDY and HTTP/2 protocols. We aren’t done yet—there are still many opportunities and ideas to explore to make the web faster! <br /> <br /> Posted by Hasan Khalil, Roberto Peon, and Ilya Grigorik, SPeeDY Software Engineers <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Making the web faster with SPDY and HTTP/2&url=https://blog.chromium.org/2013/11/making-web-faster-with-spdy-and-http2.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/making-web-faster-with-spdy-and-http2.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/making-web-faster-with-spdy-and-http2.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='5161496917734630037' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/a-journey-through-middle-earth-chrome.html' itemprop='url' title='“A Journey through Middle-earth”: A Chrome Experiment for the multi-device web'> “A Journey through Middle-earth”: A Chrome Experiment for the multi-device web </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, November 20, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> For the past few years, building multimedia web experiences for mobile devices has been difficult. Phones and tablets are less powerful than their counterparts, and mobile browsers have traditionally had limited API support. Despite these challenges, the mobile web is evolving rapidly. In the last few months alone, Chrome for Android gained support for <a href="http://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html">WebGL</a>, <a href="http://blog.chromium.org/2013/07/chrome-29-beta-web-audio-and-webrtc-in.html">WebRTC</a>, and <a href="http://blog.chromium.org/2013/07/chrome-29-beta-web-audio-and-webrtc-in.html">Web Audio</a>. <br /> <br /> <a href="http://middle-earth.thehobbit.com/">“A Journey through Middle-Earth”</a>, our latest <a href="http://www.chromeexperiments.com/">Chrome Experiment</a>, demonstrates what’s now possible on the mobile web. Developed by <a href="http://www.northkingdom.com/">North Kingdom</a> in collaboration with Warner Bros. Pictures, New Line Cinema and Metro-Goldwyn-Mayer Pictures, the experiment uses the latest web technologies to deliver a multimedia experience designed specifically for tablets, phones, and touch-enabled desktops. <br /> <br /> <div style="text-align: center;"> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/BVvMGD8LNL0" width="560"></iframe> </div> <br /> <div style="text-align: center;"> <div style="text-align: left;"> The experiment starts with an interactive map of Middle-earth. It may not feel like it, but this cinematic part of the experience was built with just HTML, CSS, and JavaScript. North Kingdom used the <a href="http://www.html5rocks.com/en/mobile/touch/">Touch Events API</a> to support multi-touch pinch-to-zoom and the <a href="http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API">Full Screen API</a> to allow users to hide the URL address bar. It looks natural on any screen size thanks to <a href="http://www.html5rocks.com/en/mobile/mobifying/">media queries</a> and feels low-latency because of hardware-accelerated CSS Transitions. </div> </div> <br /> Clicking or tapping a location in the map reveals a second layer with horizontal parallax scrolling, again built just with HTML, CSS, and JavaScript. Eventually users reach an immersive WebGL-based 3D environment optimized for Android phones and tablets with <a href="http://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html">high-end GPUs</a>. These environments also use the <a href="http://www.html5rocks.com/en/tutorials/webaudio/intro/">Web Audio API</a> for interactive audio. <br /> <br /> The multi-device web is evolving rapidly, and we’re looking forward to more sites like “A Journey Through Middle-earth” that show the potential of the platform’s latest mobile features. For a deeper technical case study, check out North Kingdom’s <a href="http://www.html5rocks.com/en/tutorials/casestudies/hobbit/">new HTML5 Rocks article</a> about using WebGL in Chrome for Android. We’re also planning to host a Google Developers Live session with the team in early December; circle <a href="https://google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for details. <br /> <br /> Posted by Max Heinritz, Product Manager and (Tolkien) Troll Evader <br /> <br /> *Update: you can now read North Kingdom's <a href="http://www.html5rocks.com/en/tutorials/casestudies/hobbit-front-end/">second HTML5 Rocks case study</a> on building the rest of the HTML5 front-end for "<a href="http://middle-earth.thehobbit.com/">A Journey through Middle-earth</a>". <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> For the past few years, building multimedia web experiences for mobile devices has been difficult. Phones and tablets are less powerful than their counterparts, and mobile browsers have traditionally had limited API support. Despite these challenges, the mobile web is evolving rapidly. In the last few months alone, Chrome for Android gained support for <a href="http://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html">WebGL</a>, <a href="http://blog.chromium.org/2013/07/chrome-29-beta-web-audio-and-webrtc-in.html">WebRTC</a>, and <a href="http://blog.chromium.org/2013/07/chrome-29-beta-web-audio-and-webrtc-in.html">Web Audio</a>. <br /> <br /> <a href="http://middle-earth.thehobbit.com/">“A Journey through Middle-Earth”</a>, our latest <a href="http://www.chromeexperiments.com/">Chrome Experiment</a>, demonstrates what’s now possible on the mobile web. Developed by <a href="http://www.northkingdom.com/">North Kingdom</a> in collaboration with Warner Bros. Pictures, New Line Cinema and Metro-Goldwyn-Mayer Pictures, the experiment uses the latest web technologies to deliver a multimedia experience designed specifically for tablets, phones, and touch-enabled desktops. <br /> <br /> <div style="text-align: center;"> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/BVvMGD8LNL0" width="560"></iframe> </div> <br /> <div style="text-align: center;"> <div style="text-align: left;"> The experiment starts with an interactive map of Middle-earth. It may not feel like it, but this cinematic part of the experience was built with just HTML, CSS, and JavaScript. North Kingdom used the <a href="http://www.html5rocks.com/en/mobile/touch/">Touch Events API</a> to support multi-touch pinch-to-zoom and the <a href="http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API">Full Screen API</a> to allow users to hide the URL address bar. It looks natural on any screen size thanks to <a href="http://www.html5rocks.com/en/mobile/mobifying/">media queries</a> and feels low-latency because of hardware-accelerated CSS Transitions. </div> </div> <br /> Clicking or tapping a location in the map reveals a second layer with horizontal parallax scrolling, again built just with HTML, CSS, and JavaScript. Eventually users reach an immersive WebGL-based 3D environment optimized for Android phones and tablets with <a href="http://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html">high-end GPUs</a>. These environments also use the <a href="http://www.html5rocks.com/en/tutorials/webaudio/intro/">Web Audio API</a> for interactive audio. <br /> <br /> The multi-device web is evolving rapidly, and we’re looking forward to more sites like “A Journey Through Middle-earth” that show the potential of the platform’s latest mobile features. For a deeper technical case study, check out North Kingdom’s <a href="http://www.html5rocks.com/en/tutorials/casestudies/hobbit/">new HTML5 Rocks article</a> about using WebGL in Chrome for Android. We’re also planning to host a Google Developers Live session with the team in early December; circle <a href="https://google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for details. <br /> <br /> Posted by Max Heinritz, Product Manager and (Tolkien) Troll Evader <br /> <br /> *Update: you can now read North Kingdom's <a href="http://www.html5rocks.com/en/tutorials/casestudies/hobbit-front-end/">second HTML5 Rocks case study</a> on building the rest of the HTML5 front-end for "<a href="http://middle-earth.thehobbit.com/">A Journey through Middle-earth</a>". <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:“A Journey through Middle-earth”: A Chrome Experiment for the multi-device web&url=https://blog.chromium.org/2013/11/a-journey-through-middle-earth-chrome.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/a-journey-through-middle-earth-chrome.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/a-journey-through-middle-earth-chrome.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='107758664515100044' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html' itemprop='url' title='Dart 1.0: A stable SDK for structured web apps'> Dart 1.0: A stable SDK for structured web apps </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, November 13, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLP9wDgxO4d6oPfiIul46y92C3fZxSYdYsx8k-RXCxfne9XlZFenDHogF72NkM0tQEMq0Os0_TF2BZF_OP1K6ihqt_Cd0No05dc58PRqDoP8wPsRLrBHa_panU9tI9ozwk0b89DxRc43nA/s1600/Dart_Wordmark_mark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLP9wDgxO4d6oPfiIul46y92C3fZxSYdYsx8k-RXCxfne9XlZFenDHogF72NkM0tQEMq0Os0_TF2BZF_OP1K6ihqt_Cd0No05dc58PRqDoP8wPsRLrBHa_panU9tI9ozwk0b89DxRc43nA/s1600/Dart_Wordmark_mark.png" /></a> </div> <br /> Today we’re releasing the Dart SDK 1.0, a cross-browser, open source toolkit for structured web applications. In the two years since we first <a href="http://blog.chromium.org/2011/10/dart-language-for-structured.html">announced Dart</a>, we’ve been working closely with early adopters to mature the project and grow the community. This release marks Dart's transition to a production-ready option for web developers. <br /> <br /> The Dart SDK 1.0 includes everything you need to write structured web applications: a simple yet powerful programming language, robust tools, and comprehensive core libraries. Together, these pieces can help make your development workflow simpler, faster, and more scalable as your projects grow from a few scripts to full-fledged web applications. <br /> <br /> On the tools side, the SDK includes <a href="https://www.dartlang.org/tools/editor/">Dart Editor</a>, a lightweight but powerful Dart development environment. We wanted to give developers the tools to manage a growing code base, so we added code completion, refactoring, jump to definition, a debugger, hints and warnings, and lots more. Dart also offers an instant edit/refresh cycle with <a href="https://www.dartlang.org/tools/dartium/">Dartium</a>, a custom version of Chromium with the native Dart VM. Outside the browser, the Dart VM can also be used for asynchronous server side computation. <br /> <br /> For deployment, dart2js is a translator that allows your Dart code to run in <a href="https://www.dartlang.org/support/faq.html#what-browsers-supported">modern browsers</a>. The performance of generated JavaScript has improved dramatically since our initial release and is in many cases getting close to that of idiomatic JavaScript. In fact, the dart2js output of the <a href="https://www.dartlang.org/performance/">DeltaBlue benchmark</a> now runs even faster than idiomatic JavaScript. Similarly, dart2js output code size has been reduced substantially. The generated JavaScript for the game <a href="http://dart-lang.github.io/pop-pop-win/">Pop, Pop, Win!</a> is now <a href="http://work.j832.com/2013/10/dart-to-javascript-output-size-what.html">40% smaller</a> than it was a year ago. Performance of the VM continues to improve as well; it’s now between 42% to 130% faster than idiomatic JavaScript running in V8, depending on the benchmark. <br /> <br /> <div style="text-align: center;"> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtHBKz2OVhqQyi5HXMK7m902pMx-LXhyLUaWk7fqoL92p0wLn18qP_MxojW3M3twQp9A1I4MHBdVdII5u1TOFq4uYHDyDzl-JDefSy4ftp-Fd304a1PTscRgPEkOVfDaO1MiZWwTbfvWT/s1600/deltabluebenchmark.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtHBKz2OVhqQyi5HXMK7m902pMx-LXhyLUaWk7fqoL92p0wLn18qP_MxojW3M3twQp9A1I4MHBdVdII5u1TOFq4uYHDyDzl-JDefSy4ftp-Fd304a1PTscRgPEkOVfDaO1MiZWwTbfvWT/s400/deltabluebenchmark.png" width="484" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">DeltaBlue benchmark results</td></tr> </tbody></table> </div> The Dart SDK also features the <a href="http://pub.dartlang.org/">Pub</a> package manager, with more than 500 packages from the community. Fan favorites include <a href="https://github.com/angular/angular.dart">AngularDart</a> and <a href="https://www.dartlang.org/polymer-dart/">polymer.dart</a>, which provide higher-level frameworks for building web apps. Dart developers can continue using their favorite JavaScript libraries with <a href="https://www.dartlang.org/articles/js-dart-interop/">Dart-JavaScript interop</a>. <br /> <br /> Going forward, the Dart team will focus on improving Dartium, increasing Dart performance, and ensuring the platform remains rock solid. In particular, changes to core technologies will be backward-compatible for the foreseeable future. <br /> <br /> Today’s release marks the first time Dart is officially production-ready, and we’re seeing teams like <a href="https://www.blossom.io/">Blossom</a>, <a href="http://www.montagebook.com/">Montage</a>, <a href="https://www.soundtrap.com/">Soundtrap</a>, <a href="http://mandrill.com/">Mandrill</a>, Google's internal <a href="http://news.dartlang.org/2013/11/angular-announces-angulardart.html">CRM</a> app and <a href="//www.google.com/elections/ed/de/districts">Google Elections</a>, already successfully using Dart in production. In addition, companies like <a href="http://news.dartlang.org/2013/05/adobes-flash-pro-cc-exports-to-dart-and.html">Adobe</a>, <a href="https://drone.io/">drone.io</a>, and <a href="http://www.jetbrains.com/webstorm/">JetBrains</a> have started to add Dart support to their products. <br /> <br /> To get started, head over to <a href="https://www.dartlang.org/">dartlang.org</a> and join the conversation at our <a href="https://plus.google.com/communities/114566943291919232850">Dartisans community on Google+</a>. We’re excited to see what you will build with the new stable <a href="https://www.dartlang.org/">Dart SDK 1.0</a>. <br /> <br /> Posted by Lars Bak, Software Engineer and Chief Dartisan <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLP9wDgxO4d6oPfiIul46y92C3fZxSYdYsx8k-RXCxfne9XlZFenDHogF72NkM0tQEMq0Os0_TF2BZF_OP1K6ihqt_Cd0No05dc58PRqDoP8wPsRLrBHa_panU9tI9ozwk0b89DxRc43nA/s1600/Dart_Wordmark_mark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLP9wDgxO4d6oPfiIul46y92C3fZxSYdYsx8k-RXCxfne9XlZFenDHogF72NkM0tQEMq0Os0_TF2BZF_OP1K6ihqt_Cd0No05dc58PRqDoP8wPsRLrBHa_panU9tI9ozwk0b89DxRc43nA/s1600/Dart_Wordmark_mark.png" /></a> </div> <br /> Today we’re releasing the Dart SDK 1.0, a cross-browser, open source toolkit for structured web applications. In the two years since we first <a href="http://blog.chromium.org/2011/10/dart-language-for-structured.html">announced Dart</a>, we’ve been working closely with early adopters to mature the project and grow the community. This release marks Dart's transition to a production-ready option for web developers. <br /> <br /> The Dart SDK 1.0 includes everything you need to write structured web applications: a simple yet powerful programming language, robust tools, and comprehensive core libraries. Together, these pieces can help make your development workflow simpler, faster, and more scalable as your projects grow from a few scripts to full-fledged web applications. <br /> <br /> On the tools side, the SDK includes <a href="https://www.dartlang.org/tools/editor/">Dart Editor</a>, a lightweight but powerful Dart development environment. We wanted to give developers the tools to manage a growing code base, so we added code completion, refactoring, jump to definition, a debugger, hints and warnings, and lots more. Dart also offers an instant edit/refresh cycle with <a href="https://www.dartlang.org/tools/dartium/">Dartium</a>, a custom version of Chromium with the native Dart VM. Outside the browser, the Dart VM can also be used for asynchronous server side computation. <br /> <br /> For deployment, dart2js is a translator that allows your Dart code to run in <a href="https://www.dartlang.org/support/faq.html#what-browsers-supported">modern browsers</a>. The performance of generated JavaScript has improved dramatically since our initial release and is in many cases getting close to that of idiomatic JavaScript. In fact, the dart2js output of the <a href="https://www.dartlang.org/performance/">DeltaBlue benchmark</a> now runs even faster than idiomatic JavaScript. Similarly, dart2js output code size has been reduced substantially. The generated JavaScript for the game <a href="http://dart-lang.github.io/pop-pop-win/">Pop, Pop, Win!</a> is now <a href="http://work.j832.com/2013/10/dart-to-javascript-output-size-what.html">40% smaller</a> than it was a year ago. Performance of the VM continues to improve as well; it’s now between 42% to 130% faster than idiomatic JavaScript running in V8, depending on the benchmark. <br /> <br /> <div style="text-align: center;"> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtHBKz2OVhqQyi5HXMK7m902pMx-LXhyLUaWk7fqoL92p0wLn18qP_MxojW3M3twQp9A1I4MHBdVdII5u1TOFq4uYHDyDzl-JDefSy4ftp-Fd304a1PTscRgPEkOVfDaO1MiZWwTbfvWT/s1600/deltabluebenchmark.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimtHBKz2OVhqQyi5HXMK7m902pMx-LXhyLUaWk7fqoL92p0wLn18qP_MxojW3M3twQp9A1I4MHBdVdII5u1TOFq4uYHDyDzl-JDefSy4ftp-Fd304a1PTscRgPEkOVfDaO1MiZWwTbfvWT/s400/deltabluebenchmark.png" width="484" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">DeltaBlue benchmark results</td></tr> </tbody></table> </div> The Dart SDK also features the <a href="http://pub.dartlang.org/">Pub</a> package manager, with more than 500 packages from the community. Fan favorites include <a href="https://github.com/angular/angular.dart">AngularDart</a> and <a href="https://www.dartlang.org/polymer-dart/">polymer.dart</a>, which provide higher-level frameworks for building web apps. Dart developers can continue using their favorite JavaScript libraries with <a href="https://www.dartlang.org/articles/js-dart-interop/">Dart-JavaScript interop</a>. <br /> <br /> Going forward, the Dart team will focus on improving Dartium, increasing Dart performance, and ensuring the platform remains rock solid. In particular, changes to core technologies will be backward-compatible for the foreseeable future. <br /> <br /> Today’s release marks the first time Dart is officially production-ready, and we’re seeing teams like <a href="https://www.blossom.io/">Blossom</a>, <a href="http://www.montagebook.com/">Montage</a>, <a href="https://www.soundtrap.com/">Soundtrap</a>, <a href="http://mandrill.com/">Mandrill</a>, Google's internal <a href="http://news.dartlang.org/2013/11/angular-announces-angulardart.html">CRM</a> app and <a href="//www.google.com/elections/ed/de/districts">Google Elections</a>, already successfully using Dart in production. In addition, companies like <a href="http://news.dartlang.org/2013/05/adobes-flash-pro-cc-exports-to-dart-and.html">Adobe</a>, <a href="https://drone.io/">drone.io</a>, and <a href="http://www.jetbrains.com/webstorm/">JetBrains</a> have started to add Dart support to their products. <br /> <br /> To get started, head over to <a href="https://www.dartlang.org/">dartlang.org</a> and join the conversation at our <a href="https://plus.google.com/communities/114566943291919232850">Dartisans community on Google+</a>. We’re excited to see what you will build with the new stable <a href="https://www.dartlang.org/">Dart SDK 1.0</a>. <br /> <br /> Posted by Lars Bak, Software Engineer and Chief Dartisan <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Dart 1.0: A stable SDK for structured web apps&url=https://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/dart-10-stable-sdk-for-structured-web.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='690118666251342284' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/portable-native-client-pinnacle-of.html' itemprop='url' title='Portable Native Client: The "pinnacle" of speed, security, and portability'> Portable Native Client: The "pinnacle" of speed, security, and portability </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, November 12, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <a href="https://developers.google.com/native-client/dev/">Native Client</a> (NaCl) brings the performance and low-level control of native code to modern web browsers, without sacrificing the security benefits and portability of web applications. By helping developers directly leverage the power of the underlying CPU and GPU, NaCl enables web applications from <a href="https://chrome.google.com/webstore/detail/efjnaogkjbogokcnohkmnjdojkikgobo">photo editing</a> and <a href="https://chrome.google.com/webstore/detail/sodasynth/moehcjggbedbobepfihdamhnlneanioe">audio mixing</a>, to <a href="https://chrome.google.com/webstore/detail/oohphhdkahjlioohbalmicpokoefkgid">3D gaming</a> and <a href="https://chrome.google.com/webstore/detail/autodesk-forceeffect/ekbaidcchahkpedbhdenlmleimihkcim">CAD modeling</a>. Today, we’re launching <a href="https://developers.google.com/native-client/dev/">Portable Native Client</a> (PNaCl, pronounced pinnacle), which lets developers compile their code once to run on any hardware platform and embed their PNaCl application in any website. <br /> <br /> Under the hood, PNaCl works by compiling native C and C++ code to an intermediate representation, rather than architecture-specific representations as in Native Client. The <a href="http://llvm.org/">LLVM</a>-style bytecode is wrapped into a portable executable, which can be hosted on a web server like any other website asset. When the site is accessed, Chrome fetches and translates the portable executable into an architecture-specific machine code optimized directly for the underlying device. This translation approach means developers don’t need to recompile their applications multiple times to run across x86, ARM or MIPS devices. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWPOgc8dlOzswrVb0SDgXy3ViwpWayLiFSYjtLKf7q4tehhZIhHFxBimqsf3-F7KH00uOzQUYZMkqy9bT5MmJOJm7IEIThwR2exwzn05Jzh24ZtwqEb90evTZz8hcrGLSjuLjAOqi8JUpk/s1600/pnacl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWPOgc8dlOzswrVb0SDgXy3ViwpWayLiFSYjtLKf7q4tehhZIhHFxBimqsf3-F7KH00uOzQUYZMkqy9bT5MmJOJm7IEIThwR2exwzn05Jzh24ZtwqEb90evTZz8hcrGLSjuLjAOqi8JUpk/s400/pnacl.png" width="440" /></a> </div> <br /> PNaCl unlocks the power of native performance for applications like <a href="http://gonativeclient.appspot.com/demo/bullet">Bullet physics simulators</a> and <a href="http://gonativeclient.appspot.com/demo/lua">Lua interpreters</a>. For now PNaCl is Chrome only, but developers can make their PNaCl applications compatible with other browsers via <a href="http://trypepperjs.appspot.com/">pepper.js</a>, which allows applications to use the <a href="https://developers.google.com/native-client/dev/pepperc/">Pepper API</a> from JavaScript. <br /> <br /> Portable Native Client provides a natively fast, secure option to meet the demands of a new generation of web applications. As always, we look forward to your questions and feedback on <a href="http://stackoverflow.com/questions/tagged/google-nativeclient">Stack Overflow</a> or our <a href="https://groups.google.com/forum/#!forum/native-client-discuss">discussion forum</a>, and will host a <a href="https://developers.google.com/live/shows/5878986315923456">Google Developers Live</a> event on Thursday, November 14th to answer your <a href="//goo.gl/RRfQxf">questions</a>. Visit <a href="http://gonacl.com/">gonacl.com</a> for tutorials, documentation, and to get the SDK. <br /> <br /> Posted by David Sehr, Summiting Engineer and Mountain Man <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <a href="https://developers.google.com/native-client/dev/">Native Client</a> (NaCl) brings the performance and low-level control of native code to modern web browsers, without sacrificing the security benefits and portability of web applications. By helping developers directly leverage the power of the underlying CPU and GPU, NaCl enables web applications from <a href="https://chrome.google.com/webstore/detail/efjnaogkjbogokcnohkmnjdojkikgobo">photo editing</a> and <a href="https://chrome.google.com/webstore/detail/sodasynth/moehcjggbedbobepfihdamhnlneanioe">audio mixing</a>, to <a href="https://chrome.google.com/webstore/detail/oohphhdkahjlioohbalmicpokoefkgid">3D gaming</a> and <a href="https://chrome.google.com/webstore/detail/autodesk-forceeffect/ekbaidcchahkpedbhdenlmleimihkcim">CAD modeling</a>. Today, we’re launching <a href="https://developers.google.com/native-client/dev/">Portable Native Client</a> (PNaCl, pronounced pinnacle), which lets developers compile their code once to run on any hardware platform and embed their PNaCl application in any website. <br /> <br /> Under the hood, PNaCl works by compiling native C and C++ code to an intermediate representation, rather than architecture-specific representations as in Native Client. The <a href="http://llvm.org/">LLVM</a>-style bytecode is wrapped into a portable executable, which can be hosted on a web server like any other website asset. When the site is accessed, Chrome fetches and translates the portable executable into an architecture-specific machine code optimized directly for the underlying device. This translation approach means developers don’t need to recompile their applications multiple times to run across x86, ARM or MIPS devices. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWPOgc8dlOzswrVb0SDgXy3ViwpWayLiFSYjtLKf7q4tehhZIhHFxBimqsf3-F7KH00uOzQUYZMkqy9bT5MmJOJm7IEIThwR2exwzn05Jzh24ZtwqEb90evTZz8hcrGLSjuLjAOqi8JUpk/s1600/pnacl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWPOgc8dlOzswrVb0SDgXy3ViwpWayLiFSYjtLKf7q4tehhZIhHFxBimqsf3-F7KH00uOzQUYZMkqy9bT5MmJOJm7IEIThwR2exwzn05Jzh24ZtwqEb90evTZz8hcrGLSjuLjAOqi8JUpk/s400/pnacl.png" width="440" /></a> </div> <br /> PNaCl unlocks the power of native performance for applications like <a href="http://gonativeclient.appspot.com/demo/bullet">Bullet physics simulators</a> and <a href="http://gonativeclient.appspot.com/demo/lua">Lua interpreters</a>. For now PNaCl is Chrome only, but developers can make their PNaCl applications compatible with other browsers via <a href="http://trypepperjs.appspot.com/">pepper.js</a>, which allows applications to use the <a href="https://developers.google.com/native-client/dev/pepperc/">Pepper API</a> from JavaScript. <br /> <br /> Portable Native Client provides a natively fast, secure option to meet the demands of a new generation of web applications. As always, we look forward to your questions and feedback on <a href="http://stackoverflow.com/questions/tagged/google-nativeclient">Stack Overflow</a> or our <a href="https://groups.google.com/forum/#!forum/native-client-discuss">discussion forum</a>, and will host a <a href="https://developers.google.com/live/shows/5878986315923456">Google Developers Live</a> event on Thursday, November 14th to answer your <a href="//goo.gl/RRfQxf">questions</a>. Visit <a href="http://gonacl.com/">gonacl.com</a> for tutorials, documentation, and to get the SDK. <br /> <br /> Posted by David Sehr, Summiting Engineer and Mountain Man <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Portable Native Client: The "pinnacle" of speed, security, and portability&url=https://blog.chromium.org/2013/11/portable-native-client-pinnacle-of.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/portable-native-client-pinnacle-of.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/portable-native-client-pinnacle-of.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4748223676269302879' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/introducing-new-chrome-apps-developer.html' itemprop='url' title='Introducing the new Chrome Apps Developer Tool'> Introducing the new Chrome Apps Developer Tool </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, November 8, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Developers of <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a> and <a href="http://developer.chrome.com/extensions/index.html">extensions</a> have long been familiar with the developer-mode setting of the chrome://extensions tab in the Chrome browser. This tab provides shortcuts for loading unpacked apps and extensions, launching them, inspecting their pages, and more. Today, we are improving this experience by introducing the new <a href="https://chrome.google.com/webstore/detail/chrome-apps-developer-too/ohmmkhmmmpcnpikjeljgnaoabkaalbgc">Chrome Apps Developer Tool</a>, available now in the <a href="https://chrome.google.com/webstore/category/apps">Chrome Web Store</a>, which adds some great new features and works as a standalone Chrome App itself: <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh35Wq62h9P9-eZFF1vwxPWMO4ClrGMZ8I-3AFepOc9GDwYjzObMMw2xw50SwundVXd22Nw3lskWvxBes0eSTFhafmVf28ycSDeh1BeDxOBIqXn4S7ZXXfQz19G1BonhnoseeZyXpEEnNX/s1600/png;base6471904c664efc0af1+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh35Wq62h9P9-eZFF1vwxPWMO4ClrGMZ8I-3AFepOc9GDwYjzObMMw2xw50SwundVXd22Nw3lskWvxBes0eSTFhafmVf28ycSDeh1BeDxOBIqXn4S7ZXXfQz19G1BonhnoseeZyXpEEnNX/s640/png;base6471904c664efc0af1+(1).png" width="518" /></a> </div> <div style="text-align: center;"> <br /></div> <div style="text-align: center;"> </div> In addition to a much cleaner and easier-to-use layout, the new tool provides all of the same functionality as the chrome://extensions tab while streamlining the developer workflow: <br /> <ul> <li>Apps and extensions are now listed in separate tabs, reducing the potential for developer confusion and reinforcing the difference between the two item types. This also reduces the size of each list, making it faster to scroll through.</li> <li>Unpacked items and installed items are now listed separately, which makes it much easier to quickly see and access your works-in-progress.</li> <li>You can individually update specific apps and extensions with one click, instead of having to update all items at once like in the old tab.</li> <li>The common actions for each item, such as reload, launch, view permissions, pack, and uninstall, are located right next to that item for fast access.</li> <li>The list can now be live-filtered using the Search box at the top right of the page instead of having to use the regular “Find in page” feature of Chrome.</li> </ul> If you’re developing Chrome Apps or extensions and you have at least the latest version of Chrome Beta installed, get the new tool today and send us your feedback on <a href="https://plus.google.com/+GoogleChromeDevelopers/">our G+ Developers page</a> or our <a href="https://groups.google.com/a/chromium.org/forum/#!forum/chromium-apps">developer forum</a>. <br /> <br /> Posted by Viet Hoa Dinh, Software Engineer and Tooling Taskmaster <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Developers of <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a> and <a href="http://developer.chrome.com/extensions/index.html">extensions</a> have long been familiar with the developer-mode setting of the chrome://extensions tab in the Chrome browser. This tab provides shortcuts for loading unpacked apps and extensions, launching them, inspecting their pages, and more. Today, we are improving this experience by introducing the new <a href="https://chrome.google.com/webstore/detail/chrome-apps-developer-too/ohmmkhmmmpcnpikjeljgnaoabkaalbgc">Chrome Apps Developer Tool</a>, available now in the <a href="https://chrome.google.com/webstore/category/apps">Chrome Web Store</a>, which adds some great new features and works as a standalone Chrome App itself: <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh35Wq62h9P9-eZFF1vwxPWMO4ClrGMZ8I-3AFepOc9GDwYjzObMMw2xw50SwundVXd22Nw3lskWvxBes0eSTFhafmVf28ycSDeh1BeDxOBIqXn4S7ZXXfQz19G1BonhnoseeZyXpEEnNX/s1600/png;base6471904c664efc0af1+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh35Wq62h9P9-eZFF1vwxPWMO4ClrGMZ8I-3AFepOc9GDwYjzObMMw2xw50SwundVXd22Nw3lskWvxBes0eSTFhafmVf28ycSDeh1BeDxOBIqXn4S7ZXXfQz19G1BonhnoseeZyXpEEnNX/s640/png;base6471904c664efc0af1+(1).png" width="518" /></a> </div> <div style="text-align: center;"> <br /></div> <div style="text-align: center;"> </div> In addition to a much cleaner and easier-to-use layout, the new tool provides all of the same functionality as the chrome://extensions tab while streamlining the developer workflow: <br /> <ul> <li>Apps and extensions are now listed in separate tabs, reducing the potential for developer confusion and reinforcing the difference between the two item types. This also reduces the size of each list, making it faster to scroll through.</li> <li>Unpacked items and installed items are now listed separately, which makes it much easier to quickly see and access your works-in-progress.</li> <li>You can individually update specific apps and extensions with one click, instead of having to update all items at once like in the old tab.</li> <li>The common actions for each item, such as reload, launch, view permissions, pack, and uninstall, are located right next to that item for fast access.</li> <li>The list can now be live-filtered using the Search box at the top right of the page instead of having to use the regular “Find in page” feature of Chrome.</li> </ul> If you’re developing Chrome Apps or extensions and you have at least the latest version of Chrome Beta installed, get the new tool today and send us your feedback on <a href="https://plus.google.com/+GoogleChromeDevelopers/">our G+ Developers page</a> or our <a href="https://groups.google.com/a/chromium.org/forum/#!forum/chromium-apps">developer forum</a>. <br /> <br /> Posted by Viet Hoa Dinh, Software Engineer and Tooling Taskmaster <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Introducing the new Chrome Apps Developer Tool&url=https://blog.chromium.org/2013/11/introducing-new-chrome-apps-developer.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/introducing-new-chrome-apps-developer.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/introducing-new-chrome-apps-developer.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4955480529849157924' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html' itemprop='url' title='Protecting Windows users from malicious extensions'> Protecting Windows users from malicious extensions </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, November 7, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Extensions are a great way to enhance the browsing experience; whether users want to quickly post to social networks or to stay up to date with their favorite sports teams. Many services <a href="http://developer.chrome.com/extensions/external_extensions.html">bundle</a> useful companion extensions, which causes Chrome to ask whether you want to install them (or not). However, bad actors have abused this mechanism, bypassing the prompt to silently install malicious extensions that <a href="http://chrome.blogspot.com/2013/10/dont-mess-with-my-browser.html">override browser settings</a> and alter the user experience in undesired ways, such as replacing the New Tab Page without approval. In fact, this is a leading cause of <a href="http://productforums.google.com/forum/#!category-topic/chrome/report-a-problem-and-get-troubleshooting-help/mRJY17behbk%5B1-25-false%5D">complaints</a> from our Windows users. <br /> <br /> Since these malicious extensions are not hosted on the Chrome Web Store, it’s difficult to limit the damage they can cause to our users. As part of our <a href="http://blog.chromium.org/2012/12/no-more-silent-extension-installs.html">continuing security efforts</a>, we’re announcing a stronger measure to protect Windows users: starting in January on the Windows stable and <a href="https://www.google.com/intl/en/chrome/browser/beta.html">beta</a> channels, we’ll require all extensions to be hosted in the Chrome Web Store. We’ll continue to support local extension installs during <a href="http://developer.chrome.com/extensions/getstarted.html#unpacked">development</a> as well as installs via Enterprise <a href="https://support.google.com/chrome/a/answer/188453">policy</a>, and Chrome Apps will also continue to be supported normally. <br /> <br /> If your extensions are currently hosted outside the Chrome Web Store you should <a href="https://developers.google.com/chrome/web-store/docs/publish">migrate</a> them as soon as possible. There will be no impact to your users, who will still be able to use your extension as if nothing changed. You could keep the extensions hidden from the Web Store listings if you like. And if you have a dedicated installation flow from your own website, you can make use of the existing <a href="https://developers.google.com/chrome/web-store/docs/inline_installation">inline installs</a> feature. <br /> <br /> Protecting our users is a key priority, and we believe this change will help those whose browser has been compromised by unwanted extensions. If you have questions, please get in touch with us on the <a href="https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-extensions">Chromium extensions group</a>. <br /> <br /> Erik Kay, Engineering Director <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Extensions are a great way to enhance the browsing experience; whether users want to quickly post to social networks or to stay up to date with their favorite sports teams. Many services <a href="http://developer.chrome.com/extensions/external_extensions.html">bundle</a> useful companion extensions, which causes Chrome to ask whether you want to install them (or not). However, bad actors have abused this mechanism, bypassing the prompt to silently install malicious extensions that <a href="http://chrome.blogspot.com/2013/10/dont-mess-with-my-browser.html">override browser settings</a> and alter the user experience in undesired ways, such as replacing the New Tab Page without approval. In fact, this is a leading cause of <a href="http://productforums.google.com/forum/#!category-topic/chrome/report-a-problem-and-get-troubleshooting-help/mRJY17behbk%5B1-25-false%5D">complaints</a> from our Windows users. <br /> <br /> Since these malicious extensions are not hosted on the Chrome Web Store, it’s difficult to limit the damage they can cause to our users. As part of our <a href="http://blog.chromium.org/2012/12/no-more-silent-extension-installs.html">continuing security efforts</a>, we’re announcing a stronger measure to protect Windows users: starting in January on the Windows stable and <a href="https://www.google.com/intl/en/chrome/browser/beta.html">beta</a> channels, we’ll require all extensions to be hosted in the Chrome Web Store. We’ll continue to support local extension installs during <a href="http://developer.chrome.com/extensions/getstarted.html#unpacked">development</a> as well as installs via Enterprise <a href="https://support.google.com/chrome/a/answer/188453">policy</a>, and Chrome Apps will also continue to be supported normally. <br /> <br /> If your extensions are currently hosted outside the Chrome Web Store you should <a href="https://developers.google.com/chrome/web-store/docs/publish">migrate</a> them as soon as possible. There will be no impact to your users, who will still be able to use your extension as if nothing changed. You could keep the extensions hidden from the Web Store listings if you like. And if you have a dedicated installation flow from your own website, you can make use of the existing <a href="https://developers.google.com/chrome/web-store/docs/inline_installation">inline installs</a> feature. <br /> <br /> Protecting our users is a key priority, and we believe this change will help those whose browser has been compromised by unwanted extensions. If you have questions, please get in touch with us on the <a href="https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-extensions">Chromium extensions group</a>. <br /> <br /> Erik Kay, Engineering Director <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Protecting Windows users from malicious extensions&url=https://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://blog.chromium.org/search/label/security' rel='tag'> security </a> </span> </div> </div> </div> <div class='post' data-id='3038158031858328753' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/announcing-octane-20.html' itemprop='url' title='Announcing Octane 2.0'> Announcing Octane 2.0 </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, November 6, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> We created the <a href="https://developers.google.com/octane/">Octane Benchmark Suite</a> to measure how JavaScript engines perform on tasks that matter to users as well as motivate our own performance work on the V8 JavaScript engine. Today we’re releasing version 2.0 of the suite including a new focus on reducing latency, new benchmarks that target use cases like <a href="http://asmjs.org/">asm.js</a> and updates to existing benchmarks. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_VqB115jnOa2-UptSsJDaguXJYIyWDx9aEMEeDV-p390AVZq2cUzb06qoYk-SICJ_zpfQNJAWWGGCAxtjhcB48pTdlftqLB5qzAIlrE-ebX7CxhyqidPhWnyHD0sDjY6c6yMOPcY8I2-I/s1600/Octane2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_VqB115jnOa2-UptSsJDaguXJYIyWDx9aEMEeDV-p390AVZq2cUzb06qoYk-SICJ_zpfQNJAWWGGCAxtjhcB48pTdlftqLB5qzAIlrE-ebX7CxhyqidPhWnyHD0sDjY6c6yMOPcY8I2-I/s400/Octane2.png" width="400" /></a> </div> <br /> Traditional benchmarks simply measure how quickly JavaScript can be executed. Octane 2.0 additionally measures <a href="http://en.wikipedia.org/wiki/Latency_(engineering)#Computer_hardware_and_operating_system_latency">latency</a>, which is another important aspect of performance that is concerned with the smoothness of execution. In modern JavaScript engines like V8, latency comes from two main sources: compiling JavaScript to machine instructions so it can run faster, and garbage collecting memory that is no longer used. These tasks are computationally intensive and if they run for too long can be visible to users as small hiccups and freezes of JavaScript programs. We've added a modified version of our <a href="https://developers.google.com/octane/benchmark#mandreellatency">Mandreel</a> and <a href="https://developers.google.com/octane/benchmark#splaylatency">Splay</a> benchmarks to measure how well JavaScript engines can minimize these pauses. <br /> <br /> We’ve also added two new performance tests that target important use cases. One new test is based on the <a href="http://www.typescriptlang.org/">Typescript</a> compiler from Microsoft, a heavy and complex JavaScript application. Its execution stresses raw execution speed, code parsing and the memory subsystem. We've also included the <a href="https://github.com/kripken/emscripten/tree/master/tests/zlib">zlib</a> benchmark, an asm.js test from the Mozilla <a href="https://github.com/kripken/emscripten">Emscripten</a> suite. Both new benchmarks help measure an engine’s ability to deal with heavy and complex workloads, which are increasingly common in today's web applications. <br /> <br /> Finally, we fixed three existing benchmarks to help ensure that they measure what they were intended to: <br /> <ul> <li><a href="https://developers.google.com/octane/benchmark#regexp">Regexp</a>: verify that regexp calculations give the correct results.</li> <li><a href="https://developers.google.com/octane/benchmark#gameboyemulator">GameBoy Emulator</a>: code that was supposed to run in strict mode now actually runs in strict mode.</li> <li><a href="https://developers.google.com/octane/benchmark#codeloading">CodeLoad</a>: make sure the code loaded is different on every iteration.</li> </ul> Octane 2.0 represents one more step in our continuing quest to deliver the best possible performance for users. You can run <a href="http://octane-benchmark.googlecode.com/svn/latest/index.html">Octane 2.0</a> in your browser or read the <a href="http://developers.google.com/octane">documentation</a> for an in-depth look at the new benchmarks. <br /> <br /> Posted by Hannes Payer, Software Engineer and Latency Buster <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> We created the <a href="https://developers.google.com/octane/">Octane Benchmark Suite</a> to measure how JavaScript engines perform on tasks that matter to users as well as motivate our own performance work on the V8 JavaScript engine. Today we’re releasing version 2.0 of the suite including a new focus on reducing latency, new benchmarks that target use cases like <a href="http://asmjs.org/">asm.js</a> and updates to existing benchmarks. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_VqB115jnOa2-UptSsJDaguXJYIyWDx9aEMEeDV-p390AVZq2cUzb06qoYk-SICJ_zpfQNJAWWGGCAxtjhcB48pTdlftqLB5qzAIlrE-ebX7CxhyqidPhWnyHD0sDjY6c6yMOPcY8I2-I/s1600/Octane2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_VqB115jnOa2-UptSsJDaguXJYIyWDx9aEMEeDV-p390AVZq2cUzb06qoYk-SICJ_zpfQNJAWWGGCAxtjhcB48pTdlftqLB5qzAIlrE-ebX7CxhyqidPhWnyHD0sDjY6c6yMOPcY8I2-I/s400/Octane2.png" width="400" /></a> </div> <br /> Traditional benchmarks simply measure how quickly JavaScript can be executed. Octane 2.0 additionally measures <a href="http://en.wikipedia.org/wiki/Latency_(engineering)#Computer_hardware_and_operating_system_latency">latency</a>, which is another important aspect of performance that is concerned with the smoothness of execution. In modern JavaScript engines like V8, latency comes from two main sources: compiling JavaScript to machine instructions so it can run faster, and garbage collecting memory that is no longer used. These tasks are computationally intensive and if they run for too long can be visible to users as small hiccups and freezes of JavaScript programs. We've added a modified version of our <a href="https://developers.google.com/octane/benchmark#mandreellatency">Mandreel</a> and <a href="https://developers.google.com/octane/benchmark#splaylatency">Splay</a> benchmarks to measure how well JavaScript engines can minimize these pauses. <br /> <br /> We’ve also added two new performance tests that target important use cases. One new test is based on the <a href="http://www.typescriptlang.org/">Typescript</a> compiler from Microsoft, a heavy and complex JavaScript application. Its execution stresses raw execution speed, code parsing and the memory subsystem. We've also included the <a href="https://github.com/kripken/emscripten/tree/master/tests/zlib">zlib</a> benchmark, an asm.js test from the Mozilla <a href="https://github.com/kripken/emscripten">Emscripten</a> suite. Both new benchmarks help measure an engine’s ability to deal with heavy and complex workloads, which are increasingly common in today's web applications. <br /> <br /> Finally, we fixed three existing benchmarks to help ensure that they measure what they were intended to: <br /> <ul> <li><a href="https://developers.google.com/octane/benchmark#regexp">Regexp</a>: verify that regexp calculations give the correct results.</li> <li><a href="https://developers.google.com/octane/benchmark#gameboyemulator">GameBoy Emulator</a>: code that was supposed to run in strict mode now actually runs in strict mode.</li> <li><a href="https://developers.google.com/octane/benchmark#codeloading">CodeLoad</a>: make sure the code loaded is different on every iteration.</li> </ul> Octane 2.0 represents one more step in our continuing quest to deliver the best possible performance for users. You can run <a href="http://octane-benchmark.googlecode.com/svn/latest/index.html">Octane 2.0</a> in your browser or read the <a href="http://developers.google.com/octane">documentation</a> for an in-depth look at the new benchmarks. <br /> <br /> Posted by Hannes Payer, Software Engineer and Latency Buster <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Announcing Octane 2.0&url=https://blog.chromium.org/2013/11/announcing-octane-20.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/announcing-octane-20.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/announcing-octane-20.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4789565009543152609' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/11/introducing-chromium-powered-android.html' itemprop='url' title='Introducing Chromium-powered Android WebView'> Introducing Chromium-powered Android WebView </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, November 1, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> The <a href="http://android.com/kitkat">Android 4.4, KitKat</a> release contains a new WebView implementation built on Chromium open source technology. <br /> <br /> The Chromium WebView is a complete overhaul of the Android <a href="http://developer.android.com/reference/android/webkit/WebView.html">WebView</a> API. It means that the same rendering engine and software stack that powers Chrome is available for use by app developers targeting Android 4.4 KitKat, helping power games, social networks, news and blog readers, in-app ads, and of course complete web browsers. With it comes support for the latest HTML5 and CSS features and a dramatic upgrade of V8 for top-end JavaScript performance. <br /> <br /> Chromium WebView is present on all devices running Android 4.4 and applications using WebView will transition to it automatically, no user intervention required. We’ve aimed to make the transition simple for developers too, while also paving the way to increased open web standards convergence. Most applications will continue to function unaltered, and we've prepared an Android 4.4 <a href="http://developer.android.com/guide/webapps/migrating.html">WebView migration guide</a> to walk developers through the important changes. <br /> <br /> With <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews">DevTools remote debugging support for WebView</a>, developing and analyzing web content inside native Android applications is as easy as debugging a web page on desktop Chrome, offering a productivity boost to developers. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjyKDyb80nDbdGJTfzqBIMytgLntfTZjaxu84TWeY-YYUAKnewgvb5VQ1a0zT5rvi2mRAhUZHPIw5g86w8ND0SKPRaIAEQyotY59BBQ0pHHv1Z69V2ceU6i4yUHnS3DEqENKAJbKaJGwr3/s1600/about-inspect-webview.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjyKDyb80nDbdGJTfzqBIMytgLntfTZjaxu84TWeY-YYUAKnewgvb5VQ1a0zT5rvi2mRAhUZHPIw5g86w8ND0SKPRaIAEQyotY59BBQ0pHHv1Z69V2ceU6i4yUHnS3DEqENKAJbKaJGwr3/s400/about-inspect-webview.gif" width="480" /></a> </div> <br /> Best of all, it’s entirely open source, and is available in the Android 4.4 KitKat <a href="http://source.android.com/">AOSP release</a> built on a snapshot of the latest stable Chromium source tree. We're looking forward to working with the broader Chromium community to continue improving WebView. Watch <a href="http://dev.chromium.org/developers">dev.chromium.org/developers</a> and the chromium-dev mailing list for future updates on getting involved in the Chromium WebView development. In the meantime, you can check out the <a href="https://developers.google.com/chrome/mobile/docs/webview/overview">Chromium WebView FAQ</a>. <br /> <br /> Happy developing from all of the Chromium WebView team! <br /> <br /> Posted by Jonathan Dixon and Ben Murdoch, Ambassadors of Chocolate Treats <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> The <a href="http://android.com/kitkat">Android 4.4, KitKat</a> release contains a new WebView implementation built on Chromium open source technology. <br /> <br /> The Chromium WebView is a complete overhaul of the Android <a href="http://developer.android.com/reference/android/webkit/WebView.html">WebView</a> API. It means that the same rendering engine and software stack that powers Chrome is available for use by app developers targeting Android 4.4 KitKat, helping power games, social networks, news and blog readers, in-app ads, and of course complete web browsers. With it comes support for the latest HTML5 and CSS features and a dramatic upgrade of V8 for top-end JavaScript performance. <br /> <br /> Chromium WebView is present on all devices running Android 4.4 and applications using WebView will transition to it automatically, no user intervention required. We’ve aimed to make the transition simple for developers too, while also paving the way to increased open web standards convergence. Most applications will continue to function unaltered, and we've prepared an Android 4.4 <a href="http://developer.android.com/guide/webapps/migrating.html">WebView migration guide</a> to walk developers through the important changes. <br /> <br /> With <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews">DevTools remote debugging support for WebView</a>, developing and analyzing web content inside native Android applications is as easy as debugging a web page on desktop Chrome, offering a productivity boost to developers. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjyKDyb80nDbdGJTfzqBIMytgLntfTZjaxu84TWeY-YYUAKnewgvb5VQ1a0zT5rvi2mRAhUZHPIw5g86w8ND0SKPRaIAEQyotY59BBQ0pHHv1Z69V2ceU6i4yUHnS3DEqENKAJbKaJGwr3/s1600/about-inspect-webview.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjyKDyb80nDbdGJTfzqBIMytgLntfTZjaxu84TWeY-YYUAKnewgvb5VQ1a0zT5rvi2mRAhUZHPIw5g86w8ND0SKPRaIAEQyotY59BBQ0pHHv1Z69V2ceU6i4yUHnS3DEqENKAJbKaJGwr3/s400/about-inspect-webview.gif" width="480" /></a> </div> <br /> Best of all, it’s entirely open source, and is available in the Android 4.4 KitKat <a href="http://source.android.com/">AOSP release</a> built on a snapshot of the latest stable Chromium source tree. We're looking forward to working with the broader Chromium community to continue improving WebView. Watch <a href="http://dev.chromium.org/developers">dev.chromium.org/developers</a> and the chromium-dev mailing list for future updates on getting involved in the Chromium WebView development. In the meantime, you can check out the <a href="https://developers.google.com/chrome/mobile/docs/webview/overview">Chromium WebView FAQ</a>. <br /> <br /> Happy developing from all of the Chromium WebView team! <br /> <br /> Posted by Jonathan Dixon and Ben Murdoch, Ambassadors of Chocolate Treats <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Introducing Chromium-powered Android WebView&url=https://blog.chromium.org/2013/11/introducing-chromium-powered-android.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/11/introducing-chromium-powered-android.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/11/introducing-chromium-powered-android.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='5027018000318127927' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/10/connecting-chrome-apps-and-extensions.html' itemprop='url' title='Connecting Chrome apps and extensions with native applications'> Connecting Chrome apps and extensions with native applications </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, October 15, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> We <a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html">recently announced</a> the deprecation of <a href="http://en.wikipedia.org/wiki/NPAPI">NPAPI</a> plug-in support in Chrome. One of the main use cases for NPAPI plugins in Chrome apps and extensions was to connect with native applications installed on the same computer. For example, a native password management application that a user has already installed on the system may want to connect with a Chrome extension to synchronize passwords. To support such use cases without the need for NPAPI, we’ve recently added the <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">Native Messaging API</a>. <br /> <br /> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs6O4jGNe2fLWmX3GYSDusXdxixQWsuAtobt5wZxT-CuieckwuD1zFVih_LFDvpqNna0WXS740UfSCB5qPUVz1kpju3wiJgbH5NRMz3SwUN8T1dK1BarhsghO7WZFovk1rmH4lyGK0VwiB/s1600/eknGV_2DDlseJZ94tbSwAsnar-_YQbSPG8pd2cjZN4bfbRqD7nb1G9FbCV45dPTRew=s2000.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs6O4jGNe2fLWmX3GYSDusXdxixQWsuAtobt5wZxT-CuieckwuD1zFVih_LFDvpqNna0WXS740UfSCB5qPUVz1kpju3wiJgbH5NRMz3SwUN8T1dK1BarhsghO7WZFovk1rmH4lyGK0VwiB/s640/eknGV_2DDlseJZ94tbSwAsnar-_YQbSPG8pd2cjZN4bfbRqD7nb1G9FbCV45dPTRew=s2000.webp" width="512" /></a> <br /> <br /> To use this API, native applications must register a native messaging host that Chrome apps and extensions can connect to. This is done by installing a <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging-host">special manifest file</a> that defines a name and path to the native messaging host binary, as well as set of app and extension IDs that can connect to it. Once a native messaging host manifest is installed, Chrome apps and extensions can connect to it using simple API: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">var port = chrome.extension.connectNative( "org.chromium.native_messaging_example"); </span><br /> <br /> The parameter passed to <span style="font-family: Courier New, Courier, monospace;">chrome.extension.connectNative()</span> is the name used to identify the native messaging host. When a native messaging port is created Chrome starts the host in a separate process and communicates with it over the standard input and output streams. The app or extension can send and receive messages from the native application using this simple API: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">// Register handler for incoming messages. </span><br /> <span style="font-family: Courier New, Courier, monospace;">port.onMessage.addListener(function(msg) { </span><br /> <span style="font-family: Courier New, Courier, monospace;"> console.log("Received " + msg); </span><br /> <span style="font-family: Courier New, Courier, monospace;"> });</span><br /> <span style="font-family: Courier New, Courier, monospace;"><br /></span> <span style="font-family: Courier New, Courier, monospace;"> // Send a message. </span><br /> <span style="font-family: Courier New, Courier, monospace;">port.postMessage({text: "Hello!"}) </span><br /> <br /> It's also possible to send one-off messages without creating a port: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">chrome.extension.sendNativeMessage( </span><br /> <span style="font-family: Courier New, Courier, monospace;"> "org.chromium.native_messaging_example", </span><br /> <span style="font-family: Courier New, Courier, monospace;"> {messageField: "field value"}, </span><br /> <span style="font-family: Courier New, Courier, monospace;"> function(response) {</span><br /> <span style="font-family: Courier New, Courier, monospace;"> console.log("Received response" + response); </span><br /> <span style="font-family: Courier New, Courier, monospace;"> }); </span><br /> <br /> For details on how to create and register a native messaging host please refer to the <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">API documentation</a> and check out our <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/nativeMessaging">sample application</a>, which also includes a simple native messaging host. <br /> <br /> The Native Messaging API is available on Windows, OS X and Linux starting from Chrome 29. To learn about other NPAPI alternatives, check out the <a href="https://sites.google.com/a/chromium.org/dev/developers/npapi-deprecation">NPAPI deprecation Chromium wiki page</a>. <br /> <br /> Posted by Sergey Ulanov, Software Engineer and Message Dispatcher <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> We <a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html">recently announced</a> the deprecation of <a href="http://en.wikipedia.org/wiki/NPAPI">NPAPI</a> plug-in support in Chrome. One of the main use cases for NPAPI plugins in Chrome apps and extensions was to connect with native applications installed on the same computer. For example, a native password management application that a user has already installed on the system may want to connect with a Chrome extension to synchronize passwords. To support such use cases without the need for NPAPI, we’ve recently added the <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">Native Messaging API</a>. <br /> <br /> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs6O4jGNe2fLWmX3GYSDusXdxixQWsuAtobt5wZxT-CuieckwuD1zFVih_LFDvpqNna0WXS740UfSCB5qPUVz1kpju3wiJgbH5NRMz3SwUN8T1dK1BarhsghO7WZFovk1rmH4lyGK0VwiB/s1600/eknGV_2DDlseJZ94tbSwAsnar-_YQbSPG8pd2cjZN4bfbRqD7nb1G9FbCV45dPTRew=s2000.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs6O4jGNe2fLWmX3GYSDusXdxixQWsuAtobt5wZxT-CuieckwuD1zFVih_LFDvpqNna0WXS740UfSCB5qPUVz1kpju3wiJgbH5NRMz3SwUN8T1dK1BarhsghO7WZFovk1rmH4lyGK0VwiB/s640/eknGV_2DDlseJZ94tbSwAsnar-_YQbSPG8pd2cjZN4bfbRqD7nb1G9FbCV45dPTRew=s2000.webp" width="512" /></a> <br /> <br /> To use this API, native applications must register a native messaging host that Chrome apps and extensions can connect to. This is done by installing a <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging-host">special manifest file</a> that defines a name and path to the native messaging host binary, as well as set of app and extension IDs that can connect to it. Once a native messaging host manifest is installed, Chrome apps and extensions can connect to it using simple API: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">var port = chrome.extension.connectNative( "org.chromium.native_messaging_example"); </span><br /> <br /> The parameter passed to <span style="font-family: Courier New, Courier, monospace;">chrome.extension.connectNative()</span> is the name used to identify the native messaging host. When a native messaging port is created Chrome starts the host in a separate process and communicates with it over the standard input and output streams. The app or extension can send and receive messages from the native application using this simple API: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">// Register handler for incoming messages. </span><br /> <span style="font-family: Courier New, Courier, monospace;">port.onMessage.addListener(function(msg) { </span><br /> <span style="font-family: Courier New, Courier, monospace;"> console.log("Received " + msg); </span><br /> <span style="font-family: Courier New, Courier, monospace;"> });</span><br /> <span style="font-family: Courier New, Courier, monospace;"><br /></span> <span style="font-family: Courier New, Courier, monospace;"> // Send a message. </span><br /> <span style="font-family: Courier New, Courier, monospace;">port.postMessage({text: "Hello!"}) </span><br /> <br /> It's also possible to send one-off messages without creating a port: <br /> <br /> <span style="font-family: Courier New, Courier, monospace;">chrome.extension.sendNativeMessage( </span><br /> <span style="font-family: Courier New, Courier, monospace;"> "org.chromium.native_messaging_example", </span><br /> <span style="font-family: Courier New, Courier, monospace;"> {messageField: "field value"}, </span><br /> <span style="font-family: Courier New, Courier, monospace;"> function(response) {</span><br /> <span style="font-family: Courier New, Courier, monospace;"> console.log("Received response" + response); </span><br /> <span style="font-family: Courier New, Courier, monospace;"> }); </span><br /> <br /> For details on how to create and register a native messaging host please refer to the <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">API documentation</a> and check out our <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/nativeMessaging">sample application</a>, which also includes a simple native messaging host. <br /> <br /> The Native Messaging API is available on Windows, OS X and Linux starting from Chrome 29. To learn about other NPAPI alternatives, check out the <a href="https://sites.google.com/a/chromium.org/dev/developers/npapi-deprecation">NPAPI deprecation Chromium wiki page</a>. <br /> <br /> Posted by Sergey Ulanov, Software Engineer and Message Dispatcher <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Connecting Chrome apps and extensions with native applications&url=https://blog.chromium.org/2013/10/connecting-chrome-apps-and-extensions.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/10/connecting-chrome-apps-and-extensions.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/10/connecting-chrome-apps-and-extensions.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4600615513367829665' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/10/chrome-31-beta-android-application.html' itemprop='url' title='Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl'> Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, October 3, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> The developer updates in today’s Chrome <a href="https://www.google.com/landing/chrome/beta/">Beta</a> enable a seamless Android web app experience, smoother web payment flows, and portable native code in desktop Chrome. Unless otherwise noted, changes apply to desktop versions of Chrome and Chrome for Android. <br /> <br /> <b>Application shortcuts in Chrome for Android </b><br /> <br /> <a href="https://developers.google.com/chrome/mobile/docs/installtohomescreen">Application shortcuts</a> allow users to add website shortcuts to their Android home screen. Sites launched in this way will open in a normal Chrome for Android window, unless they include the <span style="font-family: Courier New, Courier, monospace;">mobile-web-app-capable</span> meta tag. Those sites will instead open in a special fullscreen Chrome for Android window that doesn't display tabs, buttons, menus, or the Omnibox. Try adding a shortcut to <a href="http://weight.aerotwist.com/">weight.aerotwist.com</a> to see this in action: <br /> <br /> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2KrmTGm9h5fixYhunDT6gjAC4YahrM7xOxGOmBMhKHDXl9gOBqxSETcdEQ23zC1UFOQUonzhg2vI0L_OwJY6iTjzRJMxta36gaWNprkYyPyLuaXI9fwUWJ4A0v86Cxy_A_d0zmezUGkOf/s1600/pic1.png" imageanchor="1" style="margin-left: 5px; margin-right: 5px;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2KrmTGm9h5fixYhunDT6gjAC4YahrM7xOxGOmBMhKHDXl9gOBqxSETcdEQ23zC1UFOQUonzhg2vI0L_OwJY6iTjzRJMxta36gaWNprkYyPyLuaXI9fwUWJ4A0v86Cxy_A_d0zmezUGkOf/s200/pic1.png" width="108" /> </a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyI2iu9Tc6z09hBuEMT6H2MAAMY0X_ABUXtDF2HJjzNejxj8hRV7cZ6MPC3_HRUKCEI2vELCkg8vWRP76m-P2ATM9dRiiljB24weY6Kh4DnR4FabjMfM8NIH0L6vkM1x4Yi2J4cEBGwTCL/s1600/pic2.png" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyI2iu9Tc6z09hBuEMT6H2MAAMY0X_ABUXtDF2HJjzNejxj8hRV7cZ6MPC3_HRUKCEI2vELCkg8vWRP76m-P2ATM9dRiiljB24weY6Kh4DnR4FabjMfM8NIH0L6vkM1x4Yi2J4cEBGwTCL/s200/pic2.png" width="108" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKfxHf3itiFgAF33frpE4PrHEStAGEdAUcv7o6u5cWEIv9YoVoxH4c9m5SbTuc3izqvv0OCu_hS7QTEt-ZyIzbFNmsgeW7OeLL_6qhisTOwXyduD7kluEmcncpjKmzhvZVRkrGFt04cbkU/s1600/pic3.webp" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKfxHf3itiFgAF33frpE4PrHEStAGEdAUcv7o6u5cWEIv9YoVoxH4c9m5SbTuc3izqvv0OCu_hS7QTEt-ZyIzbFNmsgeW7OeLL_6qhisTOwXyduD7kluEmcncpjKmzhvZVRkrGFt04cbkU/s200/pic3.webp" width="108" /> </a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij28V9X28viKC-JEPMIf37LdjxYywhIHcJkdq4-LEPU1yuACgrMeK3GarSb_tf7d48lBhouuOZURe1bgxgBtN0yARpZ3503_Qdd0boVpxjlyiWb3-RRkvUeRjenKoVd5zyXrzIawKf_2rv/s1600/pic4.webp" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij28V9X28viKC-JEPMIf37LdjxYywhIHcJkdq4-LEPU1yuACgrMeK3GarSb_tf7d48lBhouuOZURe1bgxgBtN0yARpZ3503_Qdd0boVpxjlyiWb3-RRkvUeRjenKoVd5zyXrzIawKf_2rv/s200/pic4.webp" width="108" /></a> <br /> <br /> UPDATE, November 13th: Application shortcuts will now be launching in Chrome 32, not 31.<br /> <b><br /></b> <b>Payment requestAutocomplete() on Chrome for Android, Windows, Chrome OS </b><br /> <br /> <a href="http://www.html5rocks.com/en/tutorials/forms/requestautocomplete/">requestAutocomplete()</a> makes it easier for users to fill out online forms by offering web developers programmatic access to the browser’s autocomplete information (with the user’s explicit permission). <br /> <br /> For this first release, we’ve made it work for web payments. On sites with requestAutocomplete(), users will be able to either use their existing payment data stored with the browser or enter new details through a browser-provided interface. As a developer, you can continue processing payments with your existing payment processor. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi5bRRE3n0EfcOD36oFoUyKjJ4s_58gmFzP5ucuYXaBHxoM4-3WRoJzwl9ymlvS3KiVsd2S7W4BY373ZIWoZiYRmiwt1R0dqYZyMfCOt8GBJ6nEdzIJyWoUO1LezprS9z2WICtciGP7CGA/s1600/pic5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi5bRRE3n0EfcOD36oFoUyKjJ4s_58gmFzP5ucuYXaBHxoM4-3WRoJzwl9ymlvS3KiVsd2S7W4BY373ZIWoZiYRmiwt1R0dqYZyMfCOt8GBJ6nEdzIJyWoUO1LezprS9z2WICtciGP7CGA/s320/pic5.png" width="180" /></a> </div> <br /> This feature will be rolling out to Beta users in Android, Windows, and Chrome OS in the coming days. A Mac version will be included in a future release. <br /> <br /> <b>PNaCl on desktop versions of Chrome </b><br /> <br /> Over the last few years, web applications have benefited tremendously from more powerful processors and faster browsers. For developers looking to improve performance even further, <a href="https://developers.google.com/native-client/pnacl-preview/">Portable Native Client</a> (PNaCl) now offers the ability to execute native code in the browser. Developers can compile C/C++ code--even complex existing code bases--into a single executable that runs across all desktop versions of Chrome and Chrome OS, no user installation required. PNaCl combines the portability of the web with the performance of native code. For more information, check out <a href="https://developers.google.com/native-client/pnacl-preview/overview">gonacl.com</a>.<br /> <br /> <b>New Chrome Apps APIs </b><br /> <br /> With <a href="https://developer.chrome.com/apps/manifest/url_handlers.html">URL handlers for apps</a>, <a href="http://chrome.blogspot.com/2013/09/a-new-breed-of-chrome-apps.html">Chrome App</a> developers can now specify URLs to be handled by a Chrome App. For example, a document link on a website could open a document editor Chrome App. This gives users more seamless entry points into their favorite Chrome Apps. <br /> <br /> <a href="https://developer.chrome.com/apps/fileSystem.html">Directory access for Apps</a> allows Chrome Apps to access and write to user-approved folders. This feature can be used to share files between a Chrome App and a native app. For example, a Chrome App code editor could modify files managed by a native Git client. Check out <a href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/filesystem-access">the demo</a> to see it in action. <br /> <br /> <b>Other new features in this release</b><br /> <ul> <li><a href="http://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol">SCTP</a> for WebRTC Data Channel allows P2P data transfers between browsers to be either best effort, reliable, or semi reliable, opening up use cases such as gaming.</li> <li><a href="http://updates.html5rocks.com/2013/07/Alpha-transparency-in-Chrome-video">Alpha channel support for WebM video</a> enables transparency masking (a.k.a. green screen effects) in WebM videos.</li> <li><a href="http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API">Speech recognition with the JavaScript Web Speech API </a>is now supported on Chrome for Android.</li> <li><a href="https://code.google.com/p/chromium/issues/detail?id=279430">window.devicePixelRatio</a> now takes full-page zoom (but not pinch zoom) into account.</li> <li>Support for <a href="https://code.google.com/p/chromium/issues/detail?id=234297">{ alpha: false }</a> in <span style="font-family: Courier New, Courier, monospace;">getContext('2d')</span> lets you create an <a href="https://plus.google.com/100132233764003563318/posts/cCZEqzUz2JF">opaque canvas</a>. This is similar to existing WebGL functionality and can improve the rendering performance of your app.</li> <li>The <a href="https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html">Media Source API </a>has been unprefixed and is now supported on Chrome for Android. It allows JavaScript to generate media streams for playback, addressing use cases like adaptive streaming and time shifting live streams.</li> <li><a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/ZDti42Fdt98/xAge_NuYzXQJ">2D canvas</a> now supports the "ellipse" method.</li> <li>Support for several <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/bs3NIiqnc8Q/2kF7HNr4kSAJ">Mutation Events</a> has been removed. Consider using <a href="https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver">MutationObserver</a> instead.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. We hope you enjoy this Beta release as much as we’ve enjoyed working on it! <br /> <br /> Posted by Dan Alcantara, Software Engineer and Screen Real Estate Agent <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> The developer updates in today’s Chrome <a href="https://www.google.com/landing/chrome/beta/">Beta</a> enable a seamless Android web app experience, smoother web payment flows, and portable native code in desktop Chrome. Unless otherwise noted, changes apply to desktop versions of Chrome and Chrome for Android. <br /> <br /> <b>Application shortcuts in Chrome for Android </b><br /> <br /> <a href="https://developers.google.com/chrome/mobile/docs/installtohomescreen">Application shortcuts</a> allow users to add website shortcuts to their Android home screen. Sites launched in this way will open in a normal Chrome for Android window, unless they include the <span style="font-family: Courier New, Courier, monospace;">mobile-web-app-capable</span> meta tag. Those sites will instead open in a special fullscreen Chrome for Android window that doesn't display tabs, buttons, menus, or the Omnibox. Try adding a shortcut to <a href="http://weight.aerotwist.com/">weight.aerotwist.com</a> to see this in action: <br /> <br /> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2KrmTGm9h5fixYhunDT6gjAC4YahrM7xOxGOmBMhKHDXl9gOBqxSETcdEQ23zC1UFOQUonzhg2vI0L_OwJY6iTjzRJMxta36gaWNprkYyPyLuaXI9fwUWJ4A0v86Cxy_A_d0zmezUGkOf/s1600/pic1.png" imageanchor="1" style="margin-left: 5px; margin-right: 5px;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2KrmTGm9h5fixYhunDT6gjAC4YahrM7xOxGOmBMhKHDXl9gOBqxSETcdEQ23zC1UFOQUonzhg2vI0L_OwJY6iTjzRJMxta36gaWNprkYyPyLuaXI9fwUWJ4A0v86Cxy_A_d0zmezUGkOf/s200/pic1.png" width="108" /> </a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyI2iu9Tc6z09hBuEMT6H2MAAMY0X_ABUXtDF2HJjzNejxj8hRV7cZ6MPC3_HRUKCEI2vELCkg8vWRP76m-P2ATM9dRiiljB24weY6Kh4DnR4FabjMfM8NIH0L6vkM1x4Yi2J4cEBGwTCL/s1600/pic2.png" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyI2iu9Tc6z09hBuEMT6H2MAAMY0X_ABUXtDF2HJjzNejxj8hRV7cZ6MPC3_HRUKCEI2vELCkg8vWRP76m-P2ATM9dRiiljB24weY6Kh4DnR4FabjMfM8NIH0L6vkM1x4Yi2J4cEBGwTCL/s200/pic2.png" width="108" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKfxHf3itiFgAF33frpE4PrHEStAGEdAUcv7o6u5cWEIv9YoVoxH4c9m5SbTuc3izqvv0OCu_hS7QTEt-ZyIzbFNmsgeW7OeLL_6qhisTOwXyduD7kluEmcncpjKmzhvZVRkrGFt04cbkU/s1600/pic3.webp" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"> <img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKfxHf3itiFgAF33frpE4PrHEStAGEdAUcv7o6u5cWEIv9YoVoxH4c9m5SbTuc3izqvv0OCu_hS7QTEt-ZyIzbFNmsgeW7OeLL_6qhisTOwXyduD7kluEmcncpjKmzhvZVRkrGFt04cbkU/s200/pic3.webp" width="108" /> </a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij28V9X28viKC-JEPMIf37LdjxYywhIHcJkdq4-LEPU1yuACgrMeK3GarSb_tf7d48lBhouuOZURe1bgxgBtN0yARpZ3503_Qdd0boVpxjlyiWb3-RRkvUeRjenKoVd5zyXrzIawKf_2rv/s1600/pic4.webp" imageanchor="1" style="margin-left: 5px; margin-right: 5px; text-align: center;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij28V9X28viKC-JEPMIf37LdjxYywhIHcJkdq4-LEPU1yuACgrMeK3GarSb_tf7d48lBhouuOZURe1bgxgBtN0yARpZ3503_Qdd0boVpxjlyiWb3-RRkvUeRjenKoVd5zyXrzIawKf_2rv/s200/pic4.webp" width="108" /></a> <br /> <br /> UPDATE, November 13th: Application shortcuts will now be launching in Chrome 32, not 31.<br /> <b><br /></b> <b>Payment requestAutocomplete() on Chrome for Android, Windows, Chrome OS </b><br /> <br /> <a href="http://www.html5rocks.com/en/tutorials/forms/requestautocomplete/">requestAutocomplete()</a> makes it easier for users to fill out online forms by offering web developers programmatic access to the browser’s autocomplete information (with the user’s explicit permission). <br /> <br /> For this first release, we’ve made it work for web payments. On sites with requestAutocomplete(), users will be able to either use their existing payment data stored with the browser or enter new details through a browser-provided interface. As a developer, you can continue processing payments with your existing payment processor. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi5bRRE3n0EfcOD36oFoUyKjJ4s_58gmFzP5ucuYXaBHxoM4-3WRoJzwl9ymlvS3KiVsd2S7W4BY373ZIWoZiYRmiwt1R0dqYZyMfCOt8GBJ6nEdzIJyWoUO1LezprS9z2WICtciGP7CGA/s1600/pic5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi5bRRE3n0EfcOD36oFoUyKjJ4s_58gmFzP5ucuYXaBHxoM4-3WRoJzwl9ymlvS3KiVsd2S7W4BY373ZIWoZiYRmiwt1R0dqYZyMfCOt8GBJ6nEdzIJyWoUO1LezprS9z2WICtciGP7CGA/s320/pic5.png" width="180" /></a> </div> <br /> This feature will be rolling out to Beta users in Android, Windows, and Chrome OS in the coming days. A Mac version will be included in a future release. <br /> <br /> <b>PNaCl on desktop versions of Chrome </b><br /> <br /> Over the last few years, web applications have benefited tremendously from more powerful processors and faster browsers. For developers looking to improve performance even further, <a href="https://developers.google.com/native-client/pnacl-preview/">Portable Native Client</a> (PNaCl) now offers the ability to execute native code in the browser. Developers can compile C/C++ code--even complex existing code bases--into a single executable that runs across all desktop versions of Chrome and Chrome OS, no user installation required. PNaCl combines the portability of the web with the performance of native code. For more information, check out <a href="https://developers.google.com/native-client/pnacl-preview/overview">gonacl.com</a>.<br /> <br /> <b>New Chrome Apps APIs </b><br /> <br /> With <a href="https://developer.chrome.com/apps/manifest/url_handlers.html">URL handlers for apps</a>, <a href="http://chrome.blogspot.com/2013/09/a-new-breed-of-chrome-apps.html">Chrome App</a> developers can now specify URLs to be handled by a Chrome App. For example, a document link on a website could open a document editor Chrome App. This gives users more seamless entry points into their favorite Chrome Apps. <br /> <br /> <a href="https://developer.chrome.com/apps/fileSystem.html">Directory access for Apps</a> allows Chrome Apps to access and write to user-approved folders. This feature can be used to share files between a Chrome App and a native app. For example, a Chrome App code editor could modify files managed by a native Git client. Check out <a href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/filesystem-access">the demo</a> to see it in action. <br /> <br /> <b>Other new features in this release</b><br /> <ul> <li><a href="http://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol">SCTP</a> for WebRTC Data Channel allows P2P data transfers between browsers to be either best effort, reliable, or semi reliable, opening up use cases such as gaming.</li> <li><a href="http://updates.html5rocks.com/2013/07/Alpha-transparency-in-Chrome-video">Alpha channel support for WebM video</a> enables transparency masking (a.k.a. green screen effects) in WebM videos.</li> <li><a href="http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API">Speech recognition with the JavaScript Web Speech API </a>is now supported on Chrome for Android.</li> <li><a href="https://code.google.com/p/chromium/issues/detail?id=279430">window.devicePixelRatio</a> now takes full-page zoom (but not pinch zoom) into account.</li> <li>Support for <a href="https://code.google.com/p/chromium/issues/detail?id=234297">{ alpha: false }</a> in <span style="font-family: Courier New, Courier, monospace;">getContext('2d')</span> lets you create an <a href="https://plus.google.com/100132233764003563318/posts/cCZEqzUz2JF">opaque canvas</a>. This is similar to existing WebGL functionality and can improve the rendering performance of your app.</li> <li>The <a href="https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html">Media Source API </a>has been unprefixed and is now supported on Chrome for Android. It allows JavaScript to generate media streams for playback, addressing use cases like adaptive streaming and time shifting live streams.</li> <li><a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/ZDti42Fdt98/xAge_NuYzXQJ">2D canvas</a> now supports the "ellipse" method.</li> <li>Support for several <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/bs3NIiqnc8Q/2kF7HNr4kSAJ">Mutation Events</a> has been removed. Consider using <a href="https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver">MutationObserver</a> instead.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. We hope you enjoy this Beta release as much as we’ve enjoyed working on it! <br /> <br /> Posted by Dan Alcantara, Software Engineer and Screen Real Estate Agent <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl&url=https://blog.chromium.org/2013/10/chrome-31-beta-android-application.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/10/chrome-31-beta-android-application.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/10/chrome-31-beta-android-application.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://blog.chromium.org/search/label/beta' rel='tag'> beta </a> </span> </div> </div> </div> <div class='post' data-id='3659928875713592254' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html' itemprop='url' title='Saying Goodbye to Our Old Friend NPAPI'> Saying Goodbye to Our Old Friend NPAPI </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, September 23, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> The Netscape Plug-in API (<a href="http://en.wikipedia.org/wiki/NPAPI">NPAPI</a>) ushered in an early era of web innovation by offering the first standard mechanism to extend the browser. In fact, many modern web platform features—including video and audio support—first saw mainstream deployment through NPAPI-based plug-ins.<br /> <br /> But the web has evolved. Today’s browsers are speedier, safer, and more capable than their ancestors. Meanwhile, NPAPI’s 90s-era architecture has become a leading cause of hangs, crashes, security incidents, and code complexity. Because of this, Chrome will be phasing out NPAPI support over the coming year.<br /> <br /> We feel the web is ready for this transition. NPAPI isn’t supported on mobile devices, and Mozilla plans to make <a href="https://blog.mozilla.org/futurereleases/2013/09/24/plugin-activation-in-firefox/">all plug-ins except the current version of Flash click-to-play by default</a>. Based on <a href="//www.google.com/intl/en/chrome/browser/privacy/whitepaper.html#usagestats">anonymous Chrome usage data</a>, we estimate that only six NPAPI plug-ins were used by more than 5% of users in the last month. Still, we appreciate that it will take time to transition away from NPAPI, so we will be rolling out this change in stages.<br /> <br /> Starting in January 2014, Chrome will block webpage-instantiated NPAPI plug-ins by default on the Stable channel. To avoid disruption to users, we will temporarily whitelist the most popular NPAPI plug-ins that are not <a href="https://support.google.com/chrome/answer/1247383">already blocked</a> for security reasons. These are: <br /> <ol> <li>Silverlight (launched by 15% of Chrome users last month)</li> <li>Unity (9.1%)</li> <li>Google Earth (9.1%)</li> <li>Java (8.9%) *</li> <li>Google Talk (8.7%)</li> <li>Facebook Video (6.0%)</li> </ol> * <i>Already <a href="https://support.google.com/chrome/answer/1247383">blocked</a> by default for security reasons. </i><br /> <br /> In the short term, end users and enterprise administrators will be able to whitelist specific plug-ins. Eventually, however, NPAPI support will be completely removed from Chrome. We expect this to happen before the end of 2014, but the exact timing will depend on usage and user feedback. Note that the built-in Flash plug-in and PDF viewer will be unaffected because <a href="http://blog.chromium.org/2012/08/the-road-to-safer-more-stable-and.html">they don’t use NPAPI</a>.<br /> <br /> The Chrome Web Store will also be phasing out NPAPI support. Starting today, no new Apps or Extensions containing NPAPI-based plug-ins will be allowed in the Web Store. Developers will be able to update their existing NPAPI-based Apps and Extensions until May 2014, when updates will be blocked. Also in May, listings for NPAPI-based Apps and Extensions will be removed from the Web Store home page, search results, and category pages. In September 2014, all existing NPAPI-based Apps and Extensions will be unpublished. Existing installations will continue to work until Chrome fully removes support for NPAPI.<br /> <br /> There are several alternatives to NPAPI. In cases where standard web technologies are not yet sufficient, developers and administrators can use <a href="https://developers.google.com/native-client/">NaCl</a>, <a href="http://developer.chrome.com/apps/">Apps</a>, <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">Native Messaging API</a>, and <a href="https://support.google.com/chrome/a/answer/3019558?hl=en">Legacy Browser Support</a> to transition from NPAPI. Moving forward, our goal is to evolve the standards-based web platform to cover the use cases once served by NPAPI. <br /> <br /> UPDATES<br /> <ul> <li>November 2013: For more details about NPAPI deprecation, see the <a href="http://www.chromium.org/developers/npapi-deprecation">NPAPI Deprecation Developer Guide</a>.</li> <li>April 2014: NPAPI support was <a href="http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html">removed</a> from Chrome for Linux in release 35.</li> <li>April 2014: Developers will be able to update Apps and Extensions that use NPAPI until their listings are unpublished in September. This deviation from the original schedule is to allow for security updates.</li> <li>July 2014: Chrome 37 has switched to a <a href="https://sites.google.com/a/chromium.org/dev/developers/npapi-deprecation" style="color: #1155cc;" target="_blank">harder-to-bypass blocking UI</a> for NPAPI. </li> </ul> <br /> Justin Schuh, Security Engineer and Plug-in Retirement Planner <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> The Netscape Plug-in API (<a href="http://en.wikipedia.org/wiki/NPAPI">NPAPI</a>) ushered in an early era of web innovation by offering the first standard mechanism to extend the browser. In fact, many modern web platform features—including video and audio support—first saw mainstream deployment through NPAPI-based plug-ins.<br /> <br /> But the web has evolved. Today’s browsers are speedier, safer, and more capable than their ancestors. Meanwhile, NPAPI’s 90s-era architecture has become a leading cause of hangs, crashes, security incidents, and code complexity. Because of this, Chrome will be phasing out NPAPI support over the coming year.<br /> <br /> We feel the web is ready for this transition. NPAPI isn’t supported on mobile devices, and Mozilla plans to make <a href="https://blog.mozilla.org/futurereleases/2013/09/24/plugin-activation-in-firefox/">all plug-ins except the current version of Flash click-to-play by default</a>. Based on <a href="//www.google.com/intl/en/chrome/browser/privacy/whitepaper.html#usagestats">anonymous Chrome usage data</a>, we estimate that only six NPAPI plug-ins were used by more than 5% of users in the last month. Still, we appreciate that it will take time to transition away from NPAPI, so we will be rolling out this change in stages.<br /> <br /> Starting in January 2014, Chrome will block webpage-instantiated NPAPI plug-ins by default on the Stable channel. To avoid disruption to users, we will temporarily whitelist the most popular NPAPI plug-ins that are not <a href="https://support.google.com/chrome/answer/1247383">already blocked</a> for security reasons. These are: <br /> <ol> <li>Silverlight (launched by 15% of Chrome users last month)</li> <li>Unity (9.1%)</li> <li>Google Earth (9.1%)</li> <li>Java (8.9%) *</li> <li>Google Talk (8.7%)</li> <li>Facebook Video (6.0%)</li> </ol> * <i>Already <a href="https://support.google.com/chrome/answer/1247383">blocked</a> by default for security reasons. </i><br /> <br /> In the short term, end users and enterprise administrators will be able to whitelist specific plug-ins. Eventually, however, NPAPI support will be completely removed from Chrome. We expect this to happen before the end of 2014, but the exact timing will depend on usage and user feedback. Note that the built-in Flash plug-in and PDF viewer will be unaffected because <a href="http://blog.chromium.org/2012/08/the-road-to-safer-more-stable-and.html">they don’t use NPAPI</a>.<br /> <br /> The Chrome Web Store will also be phasing out NPAPI support. Starting today, no new Apps or Extensions containing NPAPI-based plug-ins will be allowed in the Web Store. Developers will be able to update their existing NPAPI-based Apps and Extensions until May 2014, when updates will be blocked. Also in May, listings for NPAPI-based Apps and Extensions will be removed from the Web Store home page, search results, and category pages. In September 2014, all existing NPAPI-based Apps and Extensions will be unpublished. Existing installations will continue to work until Chrome fully removes support for NPAPI.<br /> <br /> There are several alternatives to NPAPI. In cases where standard web technologies are not yet sufficient, developers and administrators can use <a href="https://developers.google.com/native-client/">NaCl</a>, <a href="http://developer.chrome.com/apps/">Apps</a>, <a href="http://developer.chrome.com/extensions/messaging.html#native-messaging">Native Messaging API</a>, and <a href="https://support.google.com/chrome/a/answer/3019558?hl=en">Legacy Browser Support</a> to transition from NPAPI. Moving forward, our goal is to evolve the standards-based web platform to cover the use cases once served by NPAPI. <br /> <br /> UPDATES<br /> <ul> <li>November 2013: For more details about NPAPI deprecation, see the <a href="http://www.chromium.org/developers/npapi-deprecation">NPAPI Deprecation Developer Guide</a>.</li> <li>April 2014: NPAPI support was <a href="http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html">removed</a> from Chrome for Linux in release 35.</li> <li>April 2014: Developers will be able to update Apps and Extensions that use NPAPI until their listings are unpublished in September. This deviation from the original schedule is to allow for security updates.</li> <li>July 2014: Chrome 37 has switched to a <a href="https://sites.google.com/a/chromium.org/dev/developers/npapi-deprecation" style="color: #1155cc;" target="_blank">harder-to-bypass blocking UI</a> for NPAPI. </li> </ul> <br /> Justin Schuh, Security Engineer and Plug-in Retirement Planner <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Saying Goodbye to Our Old Friend NPAPI&url=https://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='5276408835374715700' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/09/chrome-app-launcher-developer-preview.html' itemprop='url' title='Chrome App Launcher Developer Preview for Mac OS X'> Chrome App Launcher Developer Preview for Mac OS X </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 5, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <a href="http://chrome.blogspot.com/2013/09/a-new-breed-of-chrome-apps.html">Chrome Apps</a> now bring the best of productivity, games and more to your desktop. The Chrome App Launcher is available for Windows and Chrome OS, and today we're unveiling the launcher for Mac OS X on the <a href="http://www.chromium.org/getting-involved/dev-channel">Chrome Developer Channel</a>. <br /> <br /> The launcher provides an easy way to find and launch your <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a>, while at the same time integrating closely with the operating system so that your Chrome Apps behave and feel just like regular native ones. For example, on Macs you can find your Chrome Apps in the launcher, Applications folder, in the Dock and when you do a Spotlight search—just like any other Mac app that you already use. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MUrbjn35Y5cTNcn1YoEf7p5nlPJYDj6M0s_MvVpD-LALvm2cc-fDNC-fQI1gDrkiHODhYU0FnnXOCsvb6uGUcVYkp7pyfdpDkVfpkPmn1ZAKyVeLXlXiIv70odzeyfpi0XfjSMh9tFDC/s1600/btY5GvIK85--f2rYp2v0-lFCaZDC9Po5qjQsmVFT1u0m5w9xbqprrknRAcnjiLxEu1n1-SDj9eB2RwUrzOh16myovkyfymSZSQ0tcdJ-_IaWhgOHm8VpYl0=w1600.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MUrbjn35Y5cTNcn1YoEf7p5nlPJYDj6M0s_MvVpD-LALvm2cc-fDNC-fQI1gDrkiHODhYU0FnnXOCsvb6uGUcVYkp7pyfdpDkVfpkPmn1ZAKyVeLXlXiIv70odzeyfpi0XfjSMh9tFDC/s1600/btY5GvIK85--f2rYp2v0-lFCaZDC9Po5qjQsmVFT1u0m5w9xbqprrknRAcnjiLxEu1n1-SDj9eB2RwUrzOh16myovkyfymSZSQ0tcdJ-_IaWhgOHm8VpYl0=w1600.png" width="240" /></a></div> <br /> <br /> To get the launcher, just install a Chrome App from the <a href="https://chrome.google.com/webstore/category/packaged_apps">Chrome Web Store</a>, such as this <a href="https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg">text editor</a> or <a href="https://chrome.google.com/webstore/detail/google-keep/hmjkmjkepdijhoojdojkdfohbdgmmhki">note-taking app</a>. The first time you install an app, the launcher will show up as an icon in the Dock. Chrome Packaged Apps for the Mac are available in the dev channel of Chrome and will be launched to stable channel soon. <br /> <br /> In the meantime, you can <a href="https://developer.chrome.com/apps/first_app.html">build</a> your own packaged app, <a href="https://chrome.google.com/webstore/developer/dashboard">upload</a> it to the Chrome Web Store and give all of your users access to it via a direct link. Have questions about this or any other Chrome Apps features? We always welcome your feedback on <a href="http://stackoverflow.com/questions/tagged/google-chrome-app">Stack Overflow</a>, our <a href="https://plus.google.com/+GoogleChromeDevelopers/">G+ Developers page</a>, or our <a href="http://groups.google.com/a/chromium.org/group/chromium-apps/topics">developer forum</a>. <br /> <br /> Posted by Joe Marini, Chrome Developer Advocate and Apps Aficionado <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <a href="http://chrome.blogspot.com/2013/09/a-new-breed-of-chrome-apps.html">Chrome Apps</a> now bring the best of productivity, games and more to your desktop. The Chrome App Launcher is available for Windows and Chrome OS, and today we're unveiling the launcher for Mac OS X on the <a href="http://www.chromium.org/getting-involved/dev-channel">Chrome Developer Channel</a>. <br /> <br /> The launcher provides an easy way to find and launch your <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a>, while at the same time integrating closely with the operating system so that your Chrome Apps behave and feel just like regular native ones. For example, on Macs you can find your Chrome Apps in the launcher, Applications folder, in the Dock and when you do a Spotlight search—just like any other Mac app that you already use. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MUrbjn35Y5cTNcn1YoEf7p5nlPJYDj6M0s_MvVpD-LALvm2cc-fDNC-fQI1gDrkiHODhYU0FnnXOCsvb6uGUcVYkp7pyfdpDkVfpkPmn1ZAKyVeLXlXiIv70odzeyfpi0XfjSMh9tFDC/s1600/btY5GvIK85--f2rYp2v0-lFCaZDC9Po5qjQsmVFT1u0m5w9xbqprrknRAcnjiLxEu1n1-SDj9eB2RwUrzOh16myovkyfymSZSQ0tcdJ-_IaWhgOHm8VpYl0=w1600.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MUrbjn35Y5cTNcn1YoEf7p5nlPJYDj6M0s_MvVpD-LALvm2cc-fDNC-fQI1gDrkiHODhYU0FnnXOCsvb6uGUcVYkp7pyfdpDkVfpkPmn1ZAKyVeLXlXiIv70odzeyfpi0XfjSMh9tFDC/s1600/btY5GvIK85--f2rYp2v0-lFCaZDC9Po5qjQsmVFT1u0m5w9xbqprrknRAcnjiLxEu1n1-SDj9eB2RwUrzOh16myovkyfymSZSQ0tcdJ-_IaWhgOHm8VpYl0=w1600.png" width="240" /></a></div> <br /> <br /> To get the launcher, just install a Chrome App from the <a href="https://chrome.google.com/webstore/category/packaged_apps">Chrome Web Store</a>, such as this <a href="https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg">text editor</a> or <a href="https://chrome.google.com/webstore/detail/google-keep/hmjkmjkepdijhoojdojkdfohbdgmmhki">note-taking app</a>. The first time you install an app, the launcher will show up as an icon in the Dock. Chrome Packaged Apps for the Mac are available in the dev channel of Chrome and will be launched to stable channel soon. <br /> <br /> In the meantime, you can <a href="https://developer.chrome.com/apps/first_app.html">build</a> your own packaged app, <a href="https://chrome.google.com/webstore/developer/dashboard">upload</a> it to the Chrome Web Store and give all of your users access to it via a direct link. Have questions about this or any other Chrome Apps features? We always welcome your feedback on <a href="http://stackoverflow.com/questions/tagged/google-chrome-app">Stack Overflow</a>, our <a href="https://plus.google.com/+GoogleChromeDevelopers/">G+ Developers page</a>, or our <a href="http://groups.google.com/a/chromium.org/group/chromium-apps/topics">developer forum</a>. <br /> <br /> Posted by Joe Marini, Chrome Developer Advocate and Apps Aficionado <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Chrome App Launcher Developer Preview for Mac OS X&url=https://blog.chromium.org/2013/09/chrome-app-launcher-developer-preview.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/09/chrome-app-launcher-developer-preview.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/09/chrome-app-launcher-developer-preview.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4705879066231182238' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/another-step-toward-faster-search-in.html' itemprop='url' title='Another step toward faster search in Chrome'> Another step toward faster search in Chrome </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, August 26, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> When you’re searching for information, speed matters. We’re always thinking about how to shave milliseconds from every search you do, throughout our products. Last year, <a href="http://blog.chromium.org/2012/12/faster-simpler-search-in-chrome.html">we started testing</a> a feature in Chrome to make searching from a new tab faster and simpler. If you use Chrome’s <a href="http://www.chromium.org/getting-involved/dev-channel">Developer or Beta</a> installs, you may have already seen this in action. Many thanks for your feedback, which has helped us continue to hone the look and feel, and improve average time from query to answer — meaning you can find what you’re looking for even more quickly than before. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5vd2pDQ_s0q4GDfTBPD-UMoyil8AsG-2GWX9K9myLl4HFCR0CtiAdzasQcl2Vdo9w-_q8-077OQd3nHTwgpiI205pY0WMhyFWi-HbxDUprQb7CPYG5xg9pV7n_Pz7TYFR4CbPh8T6ZQ30/s1600/Chromium+Blog+post.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5vd2pDQ_s0q4GDfTBPD-UMoyil8AsG-2GWX9K9myLl4HFCR0CtiAdzasQcl2Vdo9w-_q8-077OQd3nHTwgpiI205pY0WMhyFWi-HbxDUprQb7CPYG5xg9pV7n_Pz7TYFR4CbPh8T6ZQ30/s400/Chromium+Blog+post.png" width="400" /></a> </div> <div style="text-align: center;"> <br /></div> <div style="text-align: left;"> These early results are encouraging but we’re still turning dials under the hood. While we work we’ll be expanding to a small set of people using the <a href="https://www.google.com/intl/en/chrome/browser/">stable channel of Chrome</a> on Windows, Mac and Chromebooks, who have Google set as default search engine. As this experimental feature includes <a href="http://dev.chromium.org/embeddedsearch">open APIs</a>, any search engine may integrate with the new ‘new tab’ page in Chrome. Keep the feedback coming. </div> <br /> Posted by <a href="https://plus.google.com/104567931841539353894/posts">Anantica Singh</a>, Product Manager <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> When you’re searching for information, speed matters. We’re always thinking about how to shave milliseconds from every search you do, throughout our products. Last year, <a href="http://blog.chromium.org/2012/12/faster-simpler-search-in-chrome.html">we started testing</a> a feature in Chrome to make searching from a new tab faster and simpler. If you use Chrome’s <a href="http://www.chromium.org/getting-involved/dev-channel">Developer or Beta</a> installs, you may have already seen this in action. Many thanks for your feedback, which has helped us continue to hone the look and feel, and improve average time from query to answer — meaning you can find what you’re looking for even more quickly than before. <br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5vd2pDQ_s0q4GDfTBPD-UMoyil8AsG-2GWX9K9myLl4HFCR0CtiAdzasQcl2Vdo9w-_q8-077OQd3nHTwgpiI205pY0WMhyFWi-HbxDUprQb7CPYG5xg9pV7n_Pz7TYFR4CbPh8T6ZQ30/s1600/Chromium+Blog+post.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5vd2pDQ_s0q4GDfTBPD-UMoyil8AsG-2GWX9K9myLl4HFCR0CtiAdzasQcl2Vdo9w-_q8-077OQd3nHTwgpiI205pY0WMhyFWi-HbxDUprQb7CPYG5xg9pV7n_Pz7TYFR4CbPh8T6ZQ30/s400/Chromium+Blog+post.png" width="400" /></a> </div> <div style="text-align: center;"> <br /></div> <div style="text-align: left;"> These early results are encouraging but we’re still turning dials under the hood. While we work we’ll be expanding to a small set of people using the <a href="https://www.google.com/intl/en/chrome/browser/">stable channel of Chrome</a> on Windows, Mac and Chromebooks, who have Google set as default search engine. As this experimental feature includes <a href="http://dev.chromium.org/embeddedsearch">open APIs</a>, any search engine may integrate with the new ‘new tab’ page in Chrome. Keep the feedback coming. </div> <br /> Posted by <a href="https://plus.google.com/104567931841539353894/posts">Anantica Singh</a>, Product Manager <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Another step toward faster search in Chrome&url=https://blog.chromium.org/2013/08/another-step-toward-faster-search-in.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/another-step-toward-faster-search-in.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/another-step-toward-faster-search-in.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='8051063289823489418' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html' itemprop='url' title='Chrome 30 Beta: A richer web on Android'> Chrome 30 Beta: A richer web on Android </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, August 22, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Today we launched Chrome 30 on the <a href="https://www.google.com/landing/chrome/beta/">Beta channel</a>. This release introduces several new developer features for <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a> and <a href="https://play.google.com/store/apps/details?id=com.chrome.beta">Chrome for Android Beta</a>.<br /> <br /> <b>WebGL in Chrome for Android</b><br /> <br /> WebGL is a JavaScript API for rendering interactive 3D graphics and 2D graphics. It is now enabled by default in Chrome for Android Beta running on devices with <a href="https://groups.google.com/a/chromium.org/d/topic/blink-dev/Dja-1y0mKvE">high-end mobile GPUs</a> (this includes Nexus 4 and Nexus 7). Try it out with <a href="http://helloracer.com/webgl/">this racer WebGL demo</a> and <a href="http://jsbin.com/atuyep/1">others</a>:<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYGyBSXjQJIzl7ZEKVIbRKwuCVTv1IOd5vFQM-i0ovCa7zVdNVhyaWAB2zhof71pu1FSbuVVB9Lalh42KxF_s5llksrCziN3n8KRtoMKC92pufSveBzcrYHLgnqG7jEU3oKZQM07d9kF-J/s1600/WebGL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYGyBSXjQJIzl7ZEKVIbRKwuCVTv1IOd5vFQM-i0ovCa7zVdNVhyaWAB2zhof71pu1FSbuVVB9Lalh42KxF_s5llksrCziN3n8KRtoMKC92pufSveBzcrYHLgnqG7jEU3oKZQM07d9kF-J/s320/WebGL.png" width="180" /></a> </div> <div style="text-align: center;"> <br /></div> <b>DeviceMotion Events in Chrome for Android</b><br /> <br /> This release introduces the <a href="http://www.html5rocks.com/en/tutorials/device/orientation/#toc-usingDM">device motion</a> part of the <a href="http://www.html5rocks.com/en/tutorials/device/orientation/">Device Orientation API</a> in Chrome for Android Beta. DeviceMotion events provide you information about device acceleration and rotation rates. Check out <a href="http://isthisanearthquake.com/">isthisanearthquake.com</a> to see them in action.<br /> <br /> <b>Media Source Extension in Chrome for Android</b><br /> <br /> The <a href="http://updates.html5rocks.com/2011/11/Stream-video-using-the-MediaSource-API">MediaSource API</a> allows JavaScript to generate media streams for playback, which enables use cases such as adaptive streaming and time-shifting live streams. It is now enabled by default in Chrome for Android running on Jellybean or higher. This API is especially useful for streaming to mobile devices, where connectivity is often constrained and unpredictable. Play with it on this <a href="http://dash-mse-test.appspot.com/dash-player.html?url=http://yt-dash-mse-test.commondatastorage.googleapis.com/car-20120827-manifest.mpd">demo page</a>.<br /> <br /> <b>Chrome Apps APIs</b><br /> <br /> Chrome Apps support a few new APIs in this release, including webview.request, <a href="https://code.google.com/p/chromium/issues/detail?id=144509">media gallery write support</a>, and <a href="http://developer.chrome.com/extensions/downloads.html">downloads</a>. Chrome App developers can also now use Chrome Web Store managed <a href="//youtu.be/Z3jryGggMCs">in-app payments</a>.<br /> <br /> <b>Other platform features in this release</b><br /> <br /> Unless otherwise noted, the changes described below apply to desktop versions of Chrome and Chrome for Android: <br /> <ul> <li>Support for the <a href="https://plus.google.com/100132233764003563318/posts/ZpMFViU3sHG">WebRTC Device Enumeration API</a> allows users to change their microphones and/or camera on the fly without having to restart the WebRTC call.</li> <li>DevTools now supports <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors">CSS source maps</a> (also known as preprocessors).</li> <li>Chrome will now match the behavior of IE and <a href="https://codereview.chromium.org/18865003/">not honor</a> the Refresh header or tags when the URL to be refreshed to has a javascript: scheme. This is done to close down one more XSS vector against poorly constructed sites.</li> <li>Two new experimental features landed behind a flag on Chrome for Android: <a href="http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API">Web Speech API</a> (recognition) and the Vibration API.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. <br /> <br /> Posted by Sami Kyöstilä, Software Engineer and Mobile Pixel Wrangler <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Today we launched Chrome 30 on the <a href="https://www.google.com/landing/chrome/beta/">Beta channel</a>. This release introduces several new developer features for <a href="http://developer.chrome.com/apps/about_apps.html">Chrome Apps</a> and <a href="https://play.google.com/store/apps/details?id=com.chrome.beta">Chrome for Android Beta</a>.<br /> <br /> <b>WebGL in Chrome for Android</b><br /> <br /> WebGL is a JavaScript API for rendering interactive 3D graphics and 2D graphics. It is now enabled by default in Chrome for Android Beta running on devices with <a href="https://groups.google.com/a/chromium.org/d/topic/blink-dev/Dja-1y0mKvE">high-end mobile GPUs</a> (this includes Nexus 4 and Nexus 7). Try it out with <a href="http://helloracer.com/webgl/">this racer WebGL demo</a> and <a href="http://jsbin.com/atuyep/1">others</a>:<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYGyBSXjQJIzl7ZEKVIbRKwuCVTv1IOd5vFQM-i0ovCa7zVdNVhyaWAB2zhof71pu1FSbuVVB9Lalh42KxF_s5llksrCziN3n8KRtoMKC92pufSveBzcrYHLgnqG7jEU3oKZQM07d9kF-J/s1600/WebGL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYGyBSXjQJIzl7ZEKVIbRKwuCVTv1IOd5vFQM-i0ovCa7zVdNVhyaWAB2zhof71pu1FSbuVVB9Lalh42KxF_s5llksrCziN3n8KRtoMKC92pufSveBzcrYHLgnqG7jEU3oKZQM07d9kF-J/s320/WebGL.png" width="180" /></a> </div> <div style="text-align: center;"> <br /></div> <b>DeviceMotion Events in Chrome for Android</b><br /> <br /> This release introduces the <a href="http://www.html5rocks.com/en/tutorials/device/orientation/#toc-usingDM">device motion</a> part of the <a href="http://www.html5rocks.com/en/tutorials/device/orientation/">Device Orientation API</a> in Chrome for Android Beta. DeviceMotion events provide you information about device acceleration and rotation rates. Check out <a href="http://isthisanearthquake.com/">isthisanearthquake.com</a> to see them in action.<br /> <br /> <b>Media Source Extension in Chrome for Android</b><br /> <br /> The <a href="http://updates.html5rocks.com/2011/11/Stream-video-using-the-MediaSource-API">MediaSource API</a> allows JavaScript to generate media streams for playback, which enables use cases such as adaptive streaming and time-shifting live streams. It is now enabled by default in Chrome for Android running on Jellybean or higher. This API is especially useful for streaming to mobile devices, where connectivity is often constrained and unpredictable. Play with it on this <a href="http://dash-mse-test.appspot.com/dash-player.html?url=http://yt-dash-mse-test.commondatastorage.googleapis.com/car-20120827-manifest.mpd">demo page</a>.<br /> <br /> <b>Chrome Apps APIs</b><br /> <br /> Chrome Apps support a few new APIs in this release, including webview.request, <a href="https://code.google.com/p/chromium/issues/detail?id=144509">media gallery write support</a>, and <a href="http://developer.chrome.com/extensions/downloads.html">downloads</a>. Chrome App developers can also now use Chrome Web Store managed <a href="//youtu.be/Z3jryGggMCs">in-app payments</a>.<br /> <br /> <b>Other platform features in this release</b><br /> <br /> Unless otherwise noted, the changes described below apply to desktop versions of Chrome and Chrome for Android: <br /> <ul> <li>Support for the <a href="https://plus.google.com/100132233764003563318/posts/ZpMFViU3sHG">WebRTC Device Enumeration API</a> allows users to change their microphones and/or camera on the fly without having to restart the WebRTC call.</li> <li>DevTools now supports <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors">CSS source maps</a> (also known as preprocessors).</li> <li>Chrome will now match the behavior of IE and <a href="https://codereview.chromium.org/18865003/">not honor</a> the Refresh header or tags when the URL to be refreshed to has a javascript: scheme. This is done to close down one more XSS vector against poorly constructed sites.</li> <li>Two new experimental features landed behind a flag on Chrome for Android: <a href="http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API">Web Speech API</a> (recognition) and the Vibration API.</li> </ul> Visit <a href="http://chromestatus.com/">chromestatus.com</a> for a complete overview of Chrome’s developer features, and circle <a href="https://plus.google.com/+GoogleChromeDevelopers">+Google Chrome Developers</a> for more frequent updates. <br /> <br /> Posted by Sami Kyöstilä, Software Engineer and Mobile Pixel Wrangler <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Chrome 30 Beta: A richer web on Android&url=https://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/chrome-30-beta-richer-web-on-android.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://blog.chromium.org/search/label/beta' rel='tag'> beta </a> </span> </div> </div> </div> <div class='post' data-id='527013010600834172' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/security-rewards-at-google-two.html' itemprop='url' title='Security rewards at Google: Two MEEELLION Dollars Later'> Security rewards at Google: Two MEEELLION Dollars Later </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, August 12, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <i>[Cross-posted from the <a href="http://googleonlinesecurity.blogspot.com/2013/08/security-rewards-at-google-two.html">Google Online Security Blog</a>]</i><br /> <br /> One of Google’s core security principles is to engage the community, to better protect our users and build relationships with security researchers. We had this principle in mind as we launched our <a href="http://blog.chromium.org/2010/01/encouraging-more-chromium-security.html">Chromium</a> and <a href="http://googleonlinesecurity.blogspot.com/2010/11/rewarding-web-application-security.html">Google Web</a> Vulnerability Reward Programs. We didn’t know what to expect, but in the three years since launch, we’ve rewarded (and fixed!) more than 2,000 security bug reports and also received recognition for setting <a href="http://www.cs.berkeley.edu/~devdatta/papers/vrp-paper.pdf">leading standards for response time</a>.<br /> <br /> The collective creativity of the wider security community has surpassed all expectations, and their expertise has helped make Chrome even safer for hundreds of millions of users around the world. Today we’re delighted to announce we’ve now paid out in excess of $2,000,000 (USD) across Google’s security reward initiatives. Broken down, this total includes more than $1,000,000 (USD) for the <a href="https://sites.google.com/a/chromium.org/dev/Home/chromium-security/hall-of-fame">Chromium VRP</a> / <a href="http://blog.chromium.org/2012/02/pwnium-rewards-for-exploits.html">Pwnium</a> rewards, and in excess of $1,000,000 (USD) for the <a href="https://www.google.com/about/appsecurity/hall-of-fame/reward/">Google Web VRP</a> rewards.<br /> <br /> Today, the Chromium program is raising reward levels significantly. In a nutshell, bugs previously rewarded at the $1,000 level will now be considered for reward at up to $5,000. In many cases, this will be a 5x increase in reward level! We’ll issue higher rewards for bugs we believe present a more significant threat to user safety, and when the researcher provides an accurate analysis of exploitability and severity. We will continue to pay <a href="http://blog.chromium.org/2012/08/chromium-vulnerability-rewards-program.html">previously announced bonuses</a> on top, such as those for <a href="https://code.google.com/p/chromium/issues/detail?id=74991">providing a patch</a> or finding an issue in a critical piece of open source software.<br /> <br /> Interested Chromium researchers should familiarize themselves with our documentation on <a href="http://www.chromium.org/Home/chromium-security/reporting-security-bugs">how to report a security bug well</a> and <a href="http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program/reward-nomination-process">how we determine higher reward eligibility</a>.<br /> <br /> These Chromium reward level increases follow on from similar <a href="http://googleonlinesecurity.blogspot.com/2013/06/increased-rewards-for-googles-web.html">increases under the Google Web program</a>. With all these new levels, we’re excited to march towards the new milestones and a more secure web.<br /> <br /> Posted by Chris Evans and and Adam Mein, Master of Coin <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <i>[Cross-posted from the <a href="http://googleonlinesecurity.blogspot.com/2013/08/security-rewards-at-google-two.html">Google Online Security Blog</a>]</i><br /> <br /> One of Google’s core security principles is to engage the community, to better protect our users and build relationships with security researchers. We had this principle in mind as we launched our <a href="http://blog.chromium.org/2010/01/encouraging-more-chromium-security.html">Chromium</a> and <a href="http://googleonlinesecurity.blogspot.com/2010/11/rewarding-web-application-security.html">Google Web</a> Vulnerability Reward Programs. We didn’t know what to expect, but in the three years since launch, we’ve rewarded (and fixed!) more than 2,000 security bug reports and also received recognition for setting <a href="http://www.cs.berkeley.edu/~devdatta/papers/vrp-paper.pdf">leading standards for response time</a>.<br /> <br /> The collective creativity of the wider security community has surpassed all expectations, and their expertise has helped make Chrome even safer for hundreds of millions of users around the world. Today we’re delighted to announce we’ve now paid out in excess of $2,000,000 (USD) across Google’s security reward initiatives. Broken down, this total includes more than $1,000,000 (USD) for the <a href="https://sites.google.com/a/chromium.org/dev/Home/chromium-security/hall-of-fame">Chromium VRP</a> / <a href="http://blog.chromium.org/2012/02/pwnium-rewards-for-exploits.html">Pwnium</a> rewards, and in excess of $1,000,000 (USD) for the <a href="https://www.google.com/about/appsecurity/hall-of-fame/reward/">Google Web VRP</a> rewards.<br /> <br /> Today, the Chromium program is raising reward levels significantly. In a nutshell, bugs previously rewarded at the $1,000 level will now be considered for reward at up to $5,000. In many cases, this will be a 5x increase in reward level! We’ll issue higher rewards for bugs we believe present a more significant threat to user safety, and when the researcher provides an accurate analysis of exploitability and severity. We will continue to pay <a href="http://blog.chromium.org/2012/08/chromium-vulnerability-rewards-program.html">previously announced bonuses</a> on top, such as those for <a href="https://code.google.com/p/chromium/issues/detail?id=74991">providing a patch</a> or finding an issue in a critical piece of open source software.<br /> <br /> Interested Chromium researchers should familiarize themselves with our documentation on <a href="http://www.chromium.org/Home/chromium-security/reporting-security-bugs">how to report a security bug well</a> and <a href="http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program/reward-nomination-process">how we determine higher reward eligibility</a>.<br /> <br /> These Chromium reward level increases follow on from similar <a href="http://googleonlinesecurity.blogspot.com/2013/06/increased-rewards-for-googles-web.html">increases under the Google Web program</a>. With all these new levels, we’re excited to march towards the new milestones and a more secure web.<br /> <br /> Posted by Chris Evans and and Adam Mein, Master of Coin <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Security rewards at Google: Two MEEELLION Dollars Later&url=https://blog.chromium.org/2013/08/security-rewards-at-google-two.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/security-rewards-at-google-two.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/security-rewards-at-google-two.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://blog.chromium.org/search/label/security' rel='tag'> security </a> </span> </div> </div> </div> <div class='post' data-id='7591079209596767916' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/long-live-chrome-web-lab.html' itemprop='url' title='Long live Chrome Web Lab'> Long live Chrome Web Lab </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, August 9, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> After just one short year and over half a million visitors to the <a href="http://www.chromeweblab.com/">Web Lab</a> exhibition in the <a href="http://www.sciencemuseum.org.uk/">Science Museum in London</a>, the lab will close it doors to the public this coming Sunday evening. <br /> <br /> Today, with the help of our friends at <a href="http://tellart.com/" target="_blank">Tellart</a> and <a href="http://b-reel.com/" target="_blank">B-Reel</a>, we are <a href="https://github.com/GoogleChrome/ChromeWebLab">open sourcing</a> the two most popular and interactive experiments of the Chrome Web Lab: <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/">Universal Orchestra</a> and <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/">Sketchbots</a>. <br /> <br /> Web Lab was hosted both physically in the museum and virtually online. We learned a lot about building physical exhibits that interact with App Engine and use the latest web technology in Chrome to let users control real hardware. Now that we've open sourced the code, we're excited to show you how we did it. <br /> <br /> <b>The Orchestra</b> <br /> <b><br /></b> <a href="//www.youtube.com/watch?v=EK4rLaGmObU">The Orchestra</a> was made up of eight custom-built robotic instruments that let you make music with others from anywhere in the world. Now, you can use the same code that was deployed in the exhibit and host your own miniature Orchestra. All you'll need is an Arduino and the plans for a new <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/hw/tutorial">dinky replica</a> we created especially for this open source project. We have even <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/sw/realtimeserver">integrated WebRTC</a> so you can form your own band from anywhere in the world. Don’t worry if you're not a hardware expert because we have a full software version too.<br /> <br /> <div style="text-align: center;"> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/MxbYEo85gAY" width="560"></iframe> </div> <b> <br /> </b> <b>The Sketchbot</b><br /> <b><br /></b> <a href="//www.youtube.com/watch?v=QIGSfz4pXDY">The Sketchbot</a> was an <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/hw/HomebrewGalil/arm_renders">electronic arm</a> that received over 5,000 commands per second to etch an outline of your face in the sand. The Open Source project includes the code and the <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/hw/HomebrewGalil/arm_renders">hardware designs</a> to build a replica of the Web Lab. For developers like me who are soldering iron challenged, we have also included instructions and code to build a <a href="https://github.com/GoogleChrome/ChromeWebLab/blob/master/Sketchbots/sw/robotcontrol/src/draw_machines/LittlePrinter/DrawMachine.js">BergCloud LittlePrinter</a> and a pure software only version.<br /> <br /> <center> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0WRTdMid8Ir-5Y_SRQEp_DXWVCqmKLUQM_e8U-AhmCer3UieiIXDGuFoI5WDLdu1O7cqeuroIk0rFwq3rdASatX8r5LX_OQVS2FBF5YSFU7cKmLRUxsK-XuKMdWFXYXEgfYKrK6SEReit/s1600/weblab.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img align="center" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0WRTdMid8Ir-5Y_SRQEp_DXWVCqmKLUQM_e8U-AhmCer3UieiIXDGuFoI5WDLdu1O7cqeuroIk0rFwq3rdASatX8r5LX_OQVS2FBF5YSFU7cKmLRUxsK-XuKMdWFXYXEgfYKrK6SEReit/s1600/weblab.gif" /></a></center> <br /> <br /> If you’ve got the maker itch and want to build a Web Lab replica, integrate hardware that we had never envisaged, or are just curious about how we made the Web Lab, you can grab the code from <a href="http://github.com/GoogleChrome/ChromeWebLab">Github</a>. <br /> Be sure to share what you do with the code in our <a href="https://plus.google.com/communities/105191425897664173386">G+ Community</a>.<br /> <br /> <a href="https://google.com/+PaulKinlan">Paul Kinlan</a> - Chrome Developer Advocate, Open Sourcerer and Wannabe Maker. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> After just one short year and over half a million visitors to the <a href="http://www.chromeweblab.com/">Web Lab</a> exhibition in the <a href="http://www.sciencemuseum.org.uk/">Science Museum in London</a>, the lab will close it doors to the public this coming Sunday evening. <br /> <br /> Today, with the help of our friends at <a href="http://tellart.com/" target="_blank">Tellart</a> and <a href="http://b-reel.com/" target="_blank">B-Reel</a>, we are <a href="https://github.com/GoogleChrome/ChromeWebLab">open sourcing</a> the two most popular and interactive experiments of the Chrome Web Lab: <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/">Universal Orchestra</a> and <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/">Sketchbots</a>. <br /> <br /> Web Lab was hosted both physically in the museum and virtually online. We learned a lot about building physical exhibits that interact with App Engine and use the latest web technology in Chrome to let users control real hardware. Now that we've open sourced the code, we're excited to show you how we did it. <br /> <br /> <b>The Orchestra</b> <br /> <b><br /></b> <a href="//www.youtube.com/watch?v=EK4rLaGmObU">The Orchestra</a> was made up of eight custom-built robotic instruments that let you make music with others from anywhere in the world. Now, you can use the same code that was deployed in the exhibit and host your own miniature Orchestra. All you'll need is an Arduino and the plans for a new <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/hw/tutorial">dinky replica</a> we created especially for this open source project. We have even <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Orchestra/sw/realtimeserver">integrated WebRTC</a> so you can form your own band from anywhere in the world. Don’t worry if you're not a hardware expert because we have a full software version too.<br /> <br /> <div style="text-align: center;"> <iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/MxbYEo85gAY" width="560"></iframe> </div> <b> <br /> </b> <b>The Sketchbot</b><br /> <b><br /></b> <a href="//www.youtube.com/watch?v=QIGSfz4pXDY">The Sketchbot</a> was an <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/hw/HomebrewGalil/arm_renders">electronic arm</a> that received over 5,000 commands per second to etch an outline of your face in the sand. The Open Source project includes the code and the <a href="https://github.com/GoogleChrome/ChromeWebLab/tree/master/Sketchbots/hw/HomebrewGalil/arm_renders">hardware designs</a> to build a replica of the Web Lab. For developers like me who are soldering iron challenged, we have also included instructions and code to build a <a href="https://github.com/GoogleChrome/ChromeWebLab/blob/master/Sketchbots/sw/robotcontrol/src/draw_machines/LittlePrinter/DrawMachine.js">BergCloud LittlePrinter</a> and a pure software only version.<br /> <br /> <center> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0WRTdMid8Ir-5Y_SRQEp_DXWVCqmKLUQM_e8U-AhmCer3UieiIXDGuFoI5WDLdu1O7cqeuroIk0rFwq3rdASatX8r5LX_OQVS2FBF5YSFU7cKmLRUxsK-XuKMdWFXYXEgfYKrK6SEReit/s1600/weblab.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img align="center" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0WRTdMid8Ir-5Y_SRQEp_DXWVCqmKLUQM_e8U-AhmCer3UieiIXDGuFoI5WDLdu1O7cqeuroIk0rFwq3rdASatX8r5LX_OQVS2FBF5YSFU7cKmLRUxsK-XuKMdWFXYXEgfYKrK6SEReit/s1600/weblab.gif" /></a></center> <br /> <br /> If you’ve got the maker itch and want to build a Web Lab replica, integrate hardware that we had never envisaged, or are just curious about how we made the Web Lab, you can grab the code from <a href="http://github.com/GoogleChrome/ChromeWebLab">Github</a>. <br /> Be sure to share what you do with the code in our <a href="https://plus.google.com/communities/105191425897664173386">G+ Community</a>.<br /> <br /> <a href="https://google.com/+PaulKinlan">Paul Kinlan</a> - Chrome Developer Advocate, Open Sourcerer and Wannabe Maker. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Long live Chrome Web Lab&url=https://blog.chromium.org/2013/08/long-live-chrome-web-lab.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/long-live-chrome-web-lab.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/long-live-chrome-web-lab.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='1160833841681756665' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/introducing-new-chromium-web-platform.html' itemprop='url' title='Introducing the (New) Chromium Web Platform Feature Dashboard'> Introducing the (New) Chromium Web Platform Feature Dashboard </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, August 8, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <strong id="docs-internal-guid-21df5236-5eb3-133b-12ea-668cf5c1dff8"> </strong> <br /> <div style="text-align: center;"> <div style="text-align: start;"> <span id="docs-internal-guid-21df5236-5eb3-133b-12ea-668cf5c1dff8">As web developers, it’s important to stay up to date about the evolution of the web. A few months ago we <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/E6lCV7diafU/d94uq5HYE5kJ">started</a> a simple dashboard on <a href="http://www.chromestatus.com/">chromestatus.com</a> to track new feature development within Blink. It’s become a valuable tool for us, so today we’re excited to introduce the first iteration of a new, easier-to-use version.</span></div> <div style="text-align: start;"> <br /></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4cAyt8aErke9wR6IqVgjzxu2R9B8xgWGkpZp50X44WPrGAo2RGDEqNvBdY7M4g1zYHUlftKznrLysDd_T5QPxvBKhjphlmMOsbTrZbZg_w7aaNFbyUjhDgZLmkZjJG0CuYPWaVnbumyWV/s1600/image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4cAyt8aErke9wR6IqVgjzxu2R9B8xgWGkpZp50X44WPrGAo2RGDEqNvBdY7M4g1zYHUlftKznrLysDd_T5QPxvBKhjphlmMOsbTrZbZg_w7aaNFbyUjhDgZLmkZjJG0CuYPWaVnbumyWV/s400/image.png" width="400" /></a></div> <br /> <div> <div dir="ltr"> The dashboard is designed to encourage transparency and to consolidate web platform feature tracking. For each feature, it shows useful details such as:</div> <ul> <li dir="ltr"> <div dir="ltr"> A short description and owner email address</div> </li> <li dir="ltr"> <div dir="ltr"> Implementation status in Chromium</div> </li> <li dir="ltr"> <div dir="ltr"> Progress through the standards process</div> </li> <li dir="ltr"> <div dir="ltr"> Our understanding of the opinion of other browser vendors</div> </li> </ul> <div dir="ltr"> Values are associated with a shade of <span style="color: red;">red</span>, <span style="color: #f1c232;">yellow</span>, or <span style="color: #38761d;">green</span> based on how they affect the likelihood that a feature will ship in other browsers. For example, the <a href="http://chromestatus.com/features/4837301406400512">entry for CSS Flexbox</a> is entirely green, indicating that the spec is stable and publicly endorsed by other browser vendors. In general, we like to see a lot of green because it indicates that we’re minimizing <a href="http://www.chromium.org/blink#compatibility">compatibility risk</a> and preserving the interoperability that makes the web platform so powerful. </div> <br /> <div dir="ltr"> This is the first iteration of the new version, and we plan to explore different ways of exposing the data, including a better aggregate view. If you’re curious, the code is available <a href="https://github.com/GoogleChrome/chromium-dashboard">on Github</a>. We used a new framework called <a href="http://polymer-project.org/">Polymer</a>, which is built on the emerging <a href="http://www.w3.org/TR/2013/WD-components-intro-20130606/">Web Components</a> standards. Although Polymer is in early development, we decided this was a perfect place to experiment with it.</div> <br /> <div dir="ltr"> We’ve had a few external contributions to the original site and <a href="https://github.com/GoogleChrome/chromium-dashboard/issues?state=open">would love more help</a>. To get involved with either content curation or coding, please submit <a href="https://docs.google.com/a/chromium.org/forms/d/1djZD0COt4NgRwDYesNLkYAb_O8YL39eEvF78vk06R9c/viewform">this form</a> or a pull request. We’d love your help. If you’d just like to stay up to date, subscribe to the site’s <a href="http://chromestatus.com/features.xml">firehose RSS feed</a> or the <a href="http://chromestatus.com/features.xml?category=css">filtered feeds for specific types of features</a>. Go web!</div> <br /> <div dir="ltr"> Posted by Eric Bidelman, Developer Programs Engineer and Web Platform Correspondent </div> </div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <strong id="docs-internal-guid-21df5236-5eb3-133b-12ea-668cf5c1dff8"> </strong> <br /> <div style="text-align: center;"> <div style="text-align: start;"> <span id="docs-internal-guid-21df5236-5eb3-133b-12ea-668cf5c1dff8">As web developers, it’s important to stay up to date about the evolution of the web. A few months ago we <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/E6lCV7diafU/d94uq5HYE5kJ">started</a> a simple dashboard on <a href="http://www.chromestatus.com/">chromestatus.com</a> to track new feature development within Blink. It’s become a valuable tool for us, so today we’re excited to introduce the first iteration of a new, easier-to-use version.</span></div> <div style="text-align: start;"> <br /></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4cAyt8aErke9wR6IqVgjzxu2R9B8xgWGkpZp50X44WPrGAo2RGDEqNvBdY7M4g1zYHUlftKznrLysDd_T5QPxvBKhjphlmMOsbTrZbZg_w7aaNFbyUjhDgZLmkZjJG0CuYPWaVnbumyWV/s1600/image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4cAyt8aErke9wR6IqVgjzxu2R9B8xgWGkpZp50X44WPrGAo2RGDEqNvBdY7M4g1zYHUlftKznrLysDd_T5QPxvBKhjphlmMOsbTrZbZg_w7aaNFbyUjhDgZLmkZjJG0CuYPWaVnbumyWV/s400/image.png" width="400" /></a></div> <br /> <div> <div dir="ltr"> The dashboard is designed to encourage transparency and to consolidate web platform feature tracking. For each feature, it shows useful details such as:</div> <ul> <li dir="ltr"> <div dir="ltr"> A short description and owner email address</div> </li> <li dir="ltr"> <div dir="ltr"> Implementation status in Chromium</div> </li> <li dir="ltr"> <div dir="ltr"> Progress through the standards process</div> </li> <li dir="ltr"> <div dir="ltr"> Our understanding of the opinion of other browser vendors</div> </li> </ul> <div dir="ltr"> Values are associated with a shade of <span style="color: red;">red</span>, <span style="color: #f1c232;">yellow</span>, or <span style="color: #38761d;">green</span> based on how they affect the likelihood that a feature will ship in other browsers. For example, the <a href="http://chromestatus.com/features/4837301406400512">entry for CSS Flexbox</a> is entirely green, indicating that the spec is stable and publicly endorsed by other browser vendors. In general, we like to see a lot of green because it indicates that we’re minimizing <a href="http://www.chromium.org/blink#compatibility">compatibility risk</a> and preserving the interoperability that makes the web platform so powerful. </div> <br /> <div dir="ltr"> This is the first iteration of the new version, and we plan to explore different ways of exposing the data, including a better aggregate view. If you’re curious, the code is available <a href="https://github.com/GoogleChrome/chromium-dashboard">on Github</a>. We used a new framework called <a href="http://polymer-project.org/">Polymer</a>, which is built on the emerging <a href="http://www.w3.org/TR/2013/WD-components-intro-20130606/">Web Components</a> standards. Although Polymer is in early development, we decided this was a perfect place to experiment with it.</div> <br /> <div dir="ltr"> We’ve had a few external contributions to the original site and <a href="https://github.com/GoogleChrome/chromium-dashboard/issues?state=open">would love more help</a>. To get involved with either content curation or coding, please submit <a href="https://docs.google.com/a/chromium.org/forms/d/1djZD0COt4NgRwDYesNLkYAb_O8YL39eEvF78vk06R9c/viewform">this form</a> or a pull request. We’d love your help. If you’d just like to stay up to date, subscribe to the site’s <a href="http://chromestatus.com/features.xml">firehose RSS feed</a> or the <a href="http://chromestatus.com/features.xml?category=css">filtered feeds for specific types of features</a>. Go web!</div> <br /> <div dir="ltr"> Posted by Eric Bidelman, Developer Programs Engineer and Web Platform Correspondent </div> </div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Introducing the (New) Chromium Web Platform Feature Dashboard&url=https://blog.chromium.org/2013/08/introducing-new-chromium-web-platform.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/introducing-new-chromium-web-platform.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/introducing-new-chromium-web-platform.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='4138264591003263694' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/group-based-publishing-in-chrome-web.html' itemprop='url' title='Group-Based Publishing in the Chrome Web Store'> Group-Based Publishing in the Chrome Web Store </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, August 6, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> The <a href="https://chrome.google.com/webstore">Chrome Web Store</a> has become the home for many different <a href="https://chrome.google.com/webstore/category/packaged_apps">apps</a>, <a href="https://chrome.google.com/webstore/category/extensions">extensions</a>, <a href="https://chrome.google.com/webstore/category/apps">websites</a>, and <a href="https://chrome.google.com/webstore/category/themes">themes</a> from a wide variety of publishers. Until now, the Chrome Web Store was only able to associate a single email address with a publisher’s account, which made it challenging to give more than one person access to the account to manage the inventory. That’s why today we’re introducing <a href="https://support.google.com/chrome_webstore/answer/3052863?p=group_publishing">Group Publishing</a>, a new feature intended to simplify the management of multiple people accessing an organization’s CWS account.<br /> <br /> Many organizations have multiple items that they need to manage—updates need to be published, testers need to be assigned, promotional images need to be rotated, marketing text needs to be tweaked, and so on. With the addition of this much-requested feature, an organization can simply create a <a href="http://groups.google.com/">Google Group</a> and designate it as the account owner, then add and remove people from the Group as needed.<br /> <br /> On the developer dashboard page, click the link to either associate an existing group as the Group Publisher, or create a new one:<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYpqpMX-sZ8cMJYgIT6hJ4M842aGTGibJpJ-JN5ljZG9VnVStNY5d_CqznMD9JXNmlAEcdqLLGAOoS141Dn2PXIA4LhWyIAQ0RWew440Lpt9EvzA4wwesRXaAqUXgC5KJWTyaR8-ziBgA/s1600/blog+post+image.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYpqpMX-sZ8cMJYgIT6hJ4M842aGTGibJpJ-JN5ljZG9VnVStNY5d_CqznMD9JXNmlAEcdqLLGAOoS141Dn2PXIA4LhWyIAQ0RWew440Lpt9EvzA4wwesRXaAqUXgC5KJWTyaR8-ziBgA/s1600/blog+post+image.jpg" width="400" /></a></div> <br /> <br /> Members of a given group can add, edit, and otherwise work with the store items and overall account-related properties that the particular group has responsibility for.<br /> <br /> With the new Group Publishing capability, an organization’s engineering, marketing and product management teams can now collaborate much more effectively to better manage their Chrome Web Store presence. Have questions about this or any other Chrome Web Store Feature? We always welcome your feedback on our <a href="https://plus.google.com/+GoogleChromeDevelopers/">G+ Developers page</a> or our <a href="http://groups.google.com/a/chromium.org/group/chromium-apps/topics">developer forum</a>.<br /> <br /> Wei Zheng, Software Engineer and Google Group Maestro<br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> The <a href="https://chrome.google.com/webstore">Chrome Web Store</a> has become the home for many different <a href="https://chrome.google.com/webstore/category/packaged_apps">apps</a>, <a href="https://chrome.google.com/webstore/category/extensions">extensions</a>, <a href="https://chrome.google.com/webstore/category/apps">websites</a>, and <a href="https://chrome.google.com/webstore/category/themes">themes</a> from a wide variety of publishers. Until now, the Chrome Web Store was only able to associate a single email address with a publisher’s account, which made it challenging to give more than one person access to the account to manage the inventory. That’s why today we’re introducing <a href="https://support.google.com/chrome_webstore/answer/3052863?p=group_publishing">Group Publishing</a>, a new feature intended to simplify the management of multiple people accessing an organization’s CWS account.<br /> <br /> Many organizations have multiple items that they need to manage—updates need to be published, testers need to be assigned, promotional images need to be rotated, marketing text needs to be tweaked, and so on. With the addition of this much-requested feature, an organization can simply create a <a href="http://groups.google.com/">Google Group</a> and designate it as the account owner, then add and remove people from the Group as needed.<br /> <br /> On the developer dashboard page, click the link to either associate an existing group as the Group Publisher, or create a new one:<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYpqpMX-sZ8cMJYgIT6hJ4M842aGTGibJpJ-JN5ljZG9VnVStNY5d_CqznMD9JXNmlAEcdqLLGAOoS141Dn2PXIA4LhWyIAQ0RWew440Lpt9EvzA4wwesRXaAqUXgC5KJWTyaR8-ziBgA/s1600/blog+post+image.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYpqpMX-sZ8cMJYgIT6hJ4M842aGTGibJpJ-JN5ljZG9VnVStNY5d_CqznMD9JXNmlAEcdqLLGAOoS141Dn2PXIA4LhWyIAQ0RWew440Lpt9EvzA4wwesRXaAqUXgC5KJWTyaR8-ziBgA/s1600/blog+post+image.jpg" width="400" /></a></div> <br /> <br /> Members of a given group can add, edit, and otherwise work with the store items and overall account-related properties that the particular group has responsibility for.<br /> <br /> With the new Group Publishing capability, an organization’s engineering, marketing and product management teams can now collaborate much more effectively to better manage their Chrome Web Store presence. Have questions about this or any other Chrome Web Store Feature? We always welcome your feedback on our <a href="https://plus.google.com/+GoogleChromeDevelopers/">G+ Developers page</a> or our <a href="http://groups.google.com/a/chromium.org/group/chromium-apps/topics">developer forum</a>.<br /> <br /> Wei Zheng, Software Engineer and Google Group Maestro<br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:Group-Based Publishing in the Chrome Web Store&url=https://blog.chromium.org/2013/08/group-based-publishing-in-chrome-web.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/group-based-publishing-in-chrome-web.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/group-based-publishing-in-chrome-web.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='3650254601138159682' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://blog.chromium.org/2013/08/an-improved-devtools-editing-workflow.html' itemprop='url' title='An Improved DevTools Editing Workflow'> An Improved DevTools Editing Workflow </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, August 5, 2013 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> With Chrome DevTools our goal is to make your experience as a web developer as productive as possible. In the most recent version of Chrome we've added three major new features that will improve your authoring experience more than ever before.<br /> <br /> <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-workspaces">Workspaces</a> allows you to live-edit source files within DevTools with bidirectional disk persistence. CSS preprocessor mapping supports <a href="http://sass-lang.com/">Sass</a> file <a href="//www.youtube.com/watch?feature=player_detailpage&v=x6qe_kVaBpg#t=374s">live-editing</a> in the DevTools, allowing you to instantly see your changes. Finally <a href="https://developers.google.com/chrome-developer-tools/docs/authoring-development-workflow#snippets">snippets</a> lets you create, edit, save and execute custom JavaScript snippets.<br /> <b><br /></b> <b>Workspaces</b><br /> <br /> Within <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-workspaces">Workspaces</a> you can load complete local filesystem folders (including back-end files such as scripts and build/deployment files) into the DevTools editor and <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-mapping-folder">map</a> these to network resources. This enables you to author and tweak your scripts and styles, instantly see those changes reflected in the browser and have them transparently persist to disk—no more switching back and forth between browser and editor. The editor now supports syntax highlighting for a number of languages including PHP, Python, Java, CSS, HTML and of course JavaScript.<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCRr8xLcAh1n7xdQkpMr_evt52V0OVoVFJfgeJISE34ZJEiMAbRNAfh4Kw2l_PlL4pk_Lk3PQYsP4l60ic-SjIF-95ySWHLJAKY474q1K_XEkmOQj96HHE-oC0m5hVdO0yrFgMPXrNY35a/s1600/Screen+Shot+2013-07-29+at+12.40.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCRr8xLcAh1n7xdQkpMr_evt52V0OVoVFJfgeJISE34ZJEiMAbRNAfh4Kw2l_PlL4pk_Lk3PQYsP4l60ic-SjIF-95ySWHLJAKY474q1K_XEkmOQj96HHE-oC0m5hVdO0yrFgMPXrNY35a/s1600/Screen+Shot+2013-07-29+at+12.40.jpg" width="400" /></a></div> <br /> <br /> <b>CSS preprocessor mapping</b><br /> <br /> CSS preprocessors like <a href="http://sass-lang.com/">Sass</a> make it easier to organize your CSS, but until now tweaking your styles required switching to another program and refreshing Chrome. CSS preprocessor <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-sass-debugging">mapping</a> enables live-editing of these sources directly within the Sources panel. To see it in action, just map the .scss file, then Ctrl-click on a property or value to jump to the variable, mixin or function that defined it. Support for other <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors#toc-css-preprocessor-support">pre-processors</a> such as <a href="http://lesscss.org/">Less</a>, <a href="http://learnboost.github.io/stylus/">Stylus</a> and <a href="http://compass-style.org/">Compass</a> is in the works. Refer to the improved <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors">DevTools css-preprocessor documentation</a> for more details and setup instructions.<br /> <br /> <b>Snippets</b><br /> <br /> There are times when you want to be able to save smaller scripts, bookmarklets and utilities so that you always have them available while debugging in the browser. <a href="https://developers.google.com/chrome-developer-tools/docs/authoring-development-workflow#snippets">Snippets</a> is a new DevTools feature that makes it possible. It allows you to create, store and run JavaScript within the Sources tab. It gives you a multi-line console with syntax-highlight and persistence, making it convenient for prototyping code that is more than a one-liner. There's also a community-curated <a href="http://bgrins.github.io/devtools-snippets/">repository</a> of snippets for developers that contains useful snippets such as color pickers, CSS prettyfiers, logging helpers and much more.<br /> <br /> Today’s new features should help make web developers even more productive with DevTools. Please follow us on Google+ at <a href="https://plus.sandbox.google.com/+GoogleChromeDevelopers/">Google Chrome Developers</a> or on Twitter at <a href="https://twitter.com/ChromiumDev">@ChromiumDev</a> and send feedback at <a href="http://crbug.com/">crbug.comhttps://code.google.com/p/chromium/issues/list</a>.<br /> <br /> Posted by Vsevolod Vlasov, DevTools Software Engineer and Workspace Ninja<br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> With Chrome DevTools our goal is to make your experience as a web developer as productive as possible. In the most recent version of Chrome we've added three major new features that will improve your authoring experience more than ever before.<br /> <br /> <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-workspaces">Workspaces</a> allows you to live-edit source files within DevTools with bidirectional disk persistence. CSS preprocessor mapping supports <a href="http://sass-lang.com/">Sass</a> file <a href="//www.youtube.com/watch?feature=player_detailpage&v=x6qe_kVaBpg#t=374s">live-editing</a> in the DevTools, allowing you to instantly see your changes. Finally <a href="https://developers.google.com/chrome-developer-tools/docs/authoring-development-workflow#snippets">snippets</a> lets you create, edit, save and execute custom JavaScript snippets.<br /> <b><br /></b> <b>Workspaces</b><br /> <br /> Within <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-workspaces">Workspaces</a> you can load complete local filesystem folders (including back-end files such as scripts and build/deployment files) into the DevTools editor and <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-mapping-folder">map</a> these to network resources. This enables you to author and tweak your scripts and styles, instantly see those changes reflected in the browser and have them transparently persist to disk—no more switching back and forth between browser and editor. The editor now supports syntax highlighting for a number of languages including PHP, Python, Java, CSS, HTML and of course JavaScript.<br /> <br /> <div style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCRr8xLcAh1n7xdQkpMr_evt52V0OVoVFJfgeJISE34ZJEiMAbRNAfh4Kw2l_PlL4pk_Lk3PQYsP4l60ic-SjIF-95ySWHLJAKY474q1K_XEkmOQj96HHE-oC0m5hVdO0yrFgMPXrNY35a/s1600/Screen+Shot+2013-07-29+at+12.40.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCRr8xLcAh1n7xdQkpMr_evt52V0OVoVFJfgeJISE34ZJEiMAbRNAfh4Kw2l_PlL4pk_Lk3PQYsP4l60ic-SjIF-95ySWHLJAKY474q1K_XEkmOQj96HHE-oC0m5hVdO0yrFgMPXrNY35a/s1600/Screen+Shot+2013-07-29+at+12.40.jpg" width="400" /></a></div> <br /> <br /> <b>CSS preprocessor mapping</b><br /> <br /> CSS preprocessors like <a href="http://sass-lang.com/">Sass</a> make it easier to organize your CSS, but until now tweaking your styles required switching to another program and refreshing Chrome. CSS preprocessor <a href="http://www.html5rocks.com/en/tutorials/developertools/revolutions2013/#toc-sass-debugging">mapping</a> enables live-editing of these sources directly within the Sources panel. To see it in action, just map the .scss file, then Ctrl-click on a property or value to jump to the variable, mixin or function that defined it. Support for other <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors#toc-css-preprocessor-support">pre-processors</a> such as <a href="http://lesscss.org/">Less</a>, <a href="http://learnboost.github.io/stylus/">Stylus</a> and <a href="http://compass-style.org/">Compass</a> is in the works. Refer to the improved <a href="https://developers.google.com/chrome-developer-tools/docs/css-preprocessors">DevTools css-preprocessor documentation</a> for more details and setup instructions.<br /> <br /> <b>Snippets</b><br /> <br /> There are times when you want to be able to save smaller scripts, bookmarklets and utilities so that you always have them available while debugging in the browser. <a href="https://developers.google.com/chrome-developer-tools/docs/authoring-development-workflow#snippets">Snippets</a> is a new DevTools feature that makes it possible. It allows you to create, store and run JavaScript within the Sources tab. It gives you a multi-line console with syntax-highlight and persistence, making it convenient for prototyping code that is more than a one-liner. There's also a community-curated <a href="http://bgrins.github.io/devtools-snippets/">repository</a> of snippets for developers that contains useful snippets such as color pickers, CSS prettyfiers, logging helpers and much more.<br /> <br /> Today’s new features should help make web developers even more productive with DevTools. Please follow us on Google+ at <a href="https://plus.sandbox.google.com/+GoogleChromeDevelopers/">Google Chrome Developers</a> or on Twitter at <a href="https://twitter.com/ChromiumDev">@ChromiumDev</a> and send feedback at <a href="http://crbug.com/">crbug.comhttps://code.google.com/p/chromium/issues/list</a>.<br /> <br /> Posted by Vsevolod Vlasov, DevTools Software Engineer and Workspace Ninja<br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Chromium Blog:An Improved DevTools Editing Workflow&url=https://blog.chromium.org/2013/08/an-improved-devtools-editing-workflow.html&via=ChromiumDev'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://blog.chromium.org/2013/08/an-improved-devtools-editing-workflow.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://blog.chromium.org/2013/08/an-improved-devtools-editing-workflow.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='blog-pager' id='blog-pager'> <a class='home-link' href='https://blog.chromium.org/'> <i class='material-icons'>  </i> </a> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://blog.chromium.org/search?updated-max=2014-02-27T10:11:00-08:00&max-results=7&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'> <i class='material-icons'>  </i> </a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://blog.chromium.org/search?updated-max=2013-08-05T10:00:00-07:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'> <i class='material-icons'>  </i> </a> </span> </div> <div class='clear'></div> </div></div> </div> </div> <div class='col-right'> <div class='section' id='sidebar-top'><div class='widget HTML' data-version='1' id='HTML8'> <div class='widget-content'> <div class='searchBox'> <input type='text' title='Search This Blog' placeholder='Search blog ...' /> </div> </div> <div class='clear'></div> </div></div> <div id='aside'> <div class='section' id='sidebar'><div class='widget Label' data-version='1' id='Label1'> <div class='tab'> <img class='sidebar-icon' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYpJREFUeNrs2aFuwzAQBmAvKRkMKRjZA4QMDJaWFgyMjuzFRg37DIUlA3uFkoGQSaWzJU+tpri5O9+l/zSfdFJlpe59yTmyVedq1PjfcZMZ70NuQnaF8w8htyE/rABtpviXkLcK88c5HhLkMBfgVan43zfFBNGMjHVGT/s55KP2pAvidbGHd+nzKt1RKSLG3rKF1iPFv6UWiPke8i7kEqGdGsI1O+LYVdqJAjgirwkKYD0ytkJBUNbAMvX8V3q9PhUsYvU1sWD8SO/sQvx2ahxOiNoJCSBCoAHYCEQAC4EKICOQASQEOmAS8RcAFxFN5hiIiugpgC3wk9hQAHH/70EBHXUN7IER5EWMiBgo2+nzOKQv9SCAeEM/OQAkhE/ncccFICB87qzQMia5FsJfOui0zMnmRvipU1ormHQuxGTxUsAcCFLxJQBLBLn4UoAFglW8BkATwS5eC6CBEBWvCShBiIvXBkgQRcVbADiI4uKtABSESvGWgB9EzHt3+tNwyO0qa9SoIYtvAQYAqDJhaWWeMecAAAAASUVORK5CYII='/> <h2> Labels </h2> <i class='material-icons arrow'>  </i> </div> <div class='widget-content list-label-widget-content'> <ul> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/%24200K'> $200K </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/10th%20birthday'> 10th birthday </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/abusive%20ads'> abusive ads </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/abusive%20notifications'> abusive notifications </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/accessibility'> accessibility </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/ad%20blockers'> ad blockers </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/ad%20blocking'> ad blocking </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/advanced%20capabilities'> advanced capabilities </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/android'> android </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/anti%20abuse'> anti abuse </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/anti-deception'> anti-deception </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/background%20periodic%20sync'> background periodic sync </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/badging'> badging </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/benchmarks'> benchmarks </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/beta'> beta </a> <span dir='ltr'> 83 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/better%20ads%20standards'> better ads standards </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/billing'> billing </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/birthday'> birthday </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/blink'> blink </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/browser'> browser </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/browser%20interoperability'> browser interoperability </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/bundles'> bundles </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/capabilities'> capabilities </a> <span dir='ltr'> 6 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/capable%20web'> capable web </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cds'> cds </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cds18'> cds18 </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cds2018'> cds2018 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome'> chrome </a> <span dir='ltr'> 35 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%2081'> chrome 81 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%2083'> chrome 83 </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%2084'> chrome 84 </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20ads'> chrome ads </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20apps'> chrome apps </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20dev'> Chrome dev </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20dev%20summit'> chrome dev summit </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20dev%20summit%202018'> chrome dev summit 2018 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20dev%20summit%202019'> chrome dev summit 2019 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20developer'> chrome developer </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20Developer%20Center'> Chrome Developer Center </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20developer%20summit'> chrome developer summit </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20devtools'> chrome devtools </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20extension'> Chrome extension </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20extensions'> chrome extensions </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20Frame'> Chrome Frame </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20lite'> Chrome lite </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20on%20Android'> Chrome on Android </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20on%20ios'> chrome on ios </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20on%20Mac'> Chrome on Mac </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Chrome%20OS'> Chrome OS </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20privacy'> chrome privacy </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20releases'> chrome releases </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20security'> chrome security </a> <span dir='ltr'> 10 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chrome%20web%20store'> chrome web store </a> <span dir='ltr'> 32 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chromedevtools'> chromedevtools </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chromeframe'> chromeframe </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chromeos'> chromeos </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chromeos.dev'> chromeos.dev </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/chromium'> chromium </a> <span dir='ltr'> 9 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cloud%20print'> cloud print </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/coalition'> coalition </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/coalition%20for%20better%20ads'> coalition for better ads </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/contact%20picker'> contact picker </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/content%20indexing'> content indexing </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cookies'> cookies </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/core%20web%20vitals'> core web vitals </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/csrf'> csrf </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/css'> css </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/cumulative%20layout%20shift'> cumulative layout shift </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/custom%20tabs'> custom tabs </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/dart'> dart </a> <span dir='ltr'> 8 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/dashboard'> dashboard </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Data%20Saver'> Data Saver </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Data%20saver%20desktop%20extension'> Data saver desktop extension </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/day%202'> day 2 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/deceptive%20installation'> deceptive installation </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/declarative%20net%20request%20api'> declarative net request api </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/design'> design </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/developer%20dashboard'> developer dashboard </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Developer%20Program%20Policy'> Developer Program Policy </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/developer%20website'> developer website </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/devtools'> devtools </a> <span dir='ltr'> 13 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/digital%20event'> digital event </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/discoverability'> discoverability </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/DNS-over-HTTPS'> DNS-over-HTTPS </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/DoH'> DoH </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/emoji'> emoji </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/emscriptem'> emscriptem </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/enterprise'> enterprise </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/extensions'> extensions </a> <span dir='ltr'> 27 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Fast%20badging'> Fast badging </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/faster%20web'> faster web </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/features'> features </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/feedback'> feedback </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/field%20data'> field data </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/first%20input%20delay'> first input delay </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Follow'> Follow </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/fonts'> fonts </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/form%20controls'> form controls </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/frameworks'> frameworks </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/fugu'> fugu </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/fund'> fund </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/funding'> funding </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/gdd'> gdd </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/google%20earth'> google earth </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/google%20event'> google event </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/google%20io%202019'> google io 2019 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/google%20web%20developer'> google web developer </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/googlechrome'> googlechrome </a> <span dir='ltr'> 12 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/harmful%20ads'> harmful ads </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/html5'> html5 </a> <span dir='ltr'> 11 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/HTTP%2F3'> HTTP/3 </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/HTTPS'> HTTPS </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/iframes'> iframes </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/images'> images </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/incognito'> incognito </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/insecure%20forms'> insecure forms </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/intent%20to%20explain'> intent to explain </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/ios'> ios </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/ios%20Chrome'> ios Chrome </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/issue%20tracker'> issue tracker </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/jank'> jank </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/javascript'> javascript </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/lab%20data'> lab data </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/labelling'> labelling </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/largest%20contentful%20paint'> largest contentful paint </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/launch'> launch </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/lazy-loading'> lazy-loading </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/lighthouse'> lighthouse </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/linux'> linux </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Lite%20Mode'> Lite Mode </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Lite%20pages'> Lite pages </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/loading%20interventions'> loading interventions </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/loading%20optimizations'> loading optimizations </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/lock%20icon'> lock icon </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/long-tail'> long-tail </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/mac'> mac </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/manifest%20v3'> manifest v3 </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/metrics'> metrics </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/microsoft%20edge'> microsoft edge </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/mixed%20forms'> mixed forms </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/mobile'> mobile </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/na'> na </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/native%20client'> native client </a> <span dir='ltr'> 8 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/native%20file%20system'> native file system </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/New%20Features'> New Features </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/notifications'> notifications </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/octane'> octane </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/open%20web'> open web </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/origin%20trials'> origin trials </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/pagespeed%20insights'> pagespeed insights </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/pagespeedinsights'> pagespeedinsights </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/passwords'> passwords </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/payment%20handler'> payment handler </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/payment%20request'> payment request </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/payments'> payments </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/performance'> performance </a> <span dir='ltr'> 20 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/performance%20tools'> performance tools </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/permission%20UI'> permission UI </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/permissions'> permissions </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/play%20store'> play store </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/portals'> portals </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/prefetching'> prefetching </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/privacy'> privacy </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/privacy%20sandbox'> privacy sandbox </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/private%20prefetch%20proxy'> private prefetch proxy </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/profile%20guided%20optimization'> profile guided optimization </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/progressive%20web%20apps'> progressive web apps </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Project%20Strobe'> Project Strobe </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/protection'> protection </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/pwa'> pwa </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/QUIC'> QUIC </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/quieter%20permissions'> quieter permissions </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/releases'> releases </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/removals'> removals </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/rlz'> rlz </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/root%20program'> root program </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/safe%20browsing'> safe browsing </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/Secure%20DNS'> Secure DNS </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/security'> security </a> <span dir='ltr'> 36 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/site%20isolation'> site isolation </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/slow%20loading'> slow loading </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/sms%20receiver'> sms receiver </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/spam%20policy'> spam policy </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/spdy'> spdy </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/spectre'> spectre </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/speed'> speed </a> <span dir='ltr'> 4 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/ssl'> ssl </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/store%20listing'> store listing </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/strobe'> strobe </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/subscription%20pages'> subscription pages </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/suspicious%20site%20reporter%20extension'> suspicious site reporter extension </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/TCP'> TCP </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/the%20fast%20and%20the%20curious'> the fast and the curious </a> <span dir='ltr'> 23 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/TLS'> TLS </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/tools'> tools </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/tracing'> tracing </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/transparency'> transparency </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/trusted%20web%20activities'> trusted web activities </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/twa'> twa </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/user%20agent%20string'> user agent string </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/user%20data%20policy'> user data policy </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/v8'> v8 </a> <span dir='ltr'> 6 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/video'> video </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/wasm'> wasm </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web'> web </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20apps'> web apps </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20assembly'> web assembly </a> <span dir='ltr'> 2 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20developers'> web developers </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20intents'> web intents </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20packaging'> web packaging </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20payments'> web payments </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20platform'> web platform </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20request%20api'> web request api </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web%20vitals'> web vitals </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web.dev'> web.dev </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/web.dev%20live'> web.dev live </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webapi'> webapi </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webassembly'> webassembly </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webaudio'> webaudio </a> <span dir='ltr'> 3 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webgl'> webgl </a> <span dir='ltr'> 7 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webkit'> webkit </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/WebM'> WebM </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webmaster'> webmaster </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webp'> webp </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webrtc'> webrtc </a> <span dir='ltr'> 6 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/websockets'> websockets </a> <span dir='ltr'> 5 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/webtiming'> webtiming </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/writable-files'> writable-files </a> <span dir='ltr'> 1 </span> </li> <li> <a dir='ltr' href='https://blog.chromium.org/search/label/yerba%20beuna%20center%20for%20the%20arts'> yerba beuna center for the arts </a> <span dir='ltr'> 1 </span> </li> </ul> <div class='clear'></div> </div> </div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <div class='tab'> <i class='material-icons icon'>  </i> <h2> Archive </h2> <i class='material-icons arrow'>  </i> </div> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2024/'> 2024 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2024/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2023/'> 2023 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2023/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2022/'> 2022 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2022/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2021/'> 2021 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2021/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2020/'> 2020 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2020/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2019/'> 2019 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2019/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2018/'> 2018 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2018/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2017/'> 2017 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2017/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2016/'> 2016 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2016/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2015/'> 2015 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2015/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2014/'> 2014 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2014/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy toggle-open'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2013/'> 2013 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate expanded'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2013/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2012/'> 2012 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2012/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2011/'> 2011 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2011/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2010/'> 2010 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2010/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2009/'> 2009 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2009/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://blog.chromium.org/2008/'> 2008 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2008/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2008/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2008/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://blog.chromium.org/2008/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> </div> </div> <div class='clear'></div> </div> </div><div class='widget HTML' data-version='1' id='HTML6'> <div class='widget-content'> <a href="http://blog.chromium.org/atom.xml"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAihJREFUeNrsWa9Pw0AU7viRMDFRBAkzJDMIBIhJJhCzk7NILIqMv4AEhdz+BCY3OYssAlGBoAJREpZwAlHEBO8lr8nSvNeVbu1dyX3JlzTrXfa+u/e9d7c5joWFhYVO1Fa8PwH2gK6m+BRwAvSlAdsrgr8E1jUuMH73GTAEzrkBWymTewZlihhLmgDXIAFuHgGVQOUF7OSYM1p6PgTuA1vAZlUEvAnPdapcMY0VICECekQ0XRfYrqoHsAGNgXfAoMomRiFDEhOZkkL3S88hMaB2LwXp0bj+ps2edpToZpjfoIDQtBeU+xjoDzP2G/gCPKZ5f8WsCAFJoJgOCcFdWSTeL9YQMSvTA1h9BkI5jaiXhLpSCL/8mVZY0UpyJ9ZdOkniu1dmJ96BpzQu9w6s28gcOq9j6pwLdR8/36NK5CQKwJSMrb2MhhSglBpt4UjsrdsnNu0B3J0HCozbCc4TjyY2srEgos/4RQljCzNxl4ireQD8FOq+T+W0mTB2g7njhlR+Sy2jsXFvU658U8YTbeaGpdIu7mWkEAq5ZtIjIhFZdtfX7QHckSvB2B6zC3VdAkZk0kAQwaXTk/CzTXK3wjIExCs6ZJpTnE4uY1KV+KzFzA3KTiFPENHJkOPcsfpLhwe4btoSuvUqAR+6TOxlCE6ZfKUsJLgsqGW8OpqAGx2X+sLxrwUog+JUeQRMDBIwyXOcnlPtPnL0/UsT/8LnOxYWFhZG4leAAQAAQHEaYuzHbAAAAABJRU5ErkJggg==" class="sidebar-icon" /> <h2>Feed</h2> </a> </div> <div class='clear'></div> </div></div> <div class='section' id='sidebar-bottom'><div class='widget HTML' data-version='1' id='HTML4'> <div class='widget-content'> <div class="share followgooglewrapper"> <button data-href="https://twitter.com/intent/follow?original_referer=http://blog.chromium.org/&screen_name=ChromiumDev" onclick='sharingPopup(this);' id='twitter-share'><span class="twitter-follow">Follow @ChromiumDev</span></button> <script> function sharingPopup (button) { var url = button.getAttribute("data-href"); window.open( url,'popUpWindow','height=500,width=500,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes'); } </script> </div> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML1'> <div class='widget-content'> Give us feedback in our <a href="http://support.google.com/bin/static.py?hl=en&page=portal_groups.cs">Product Forums</a>. </div> <div class='clear'></div> </div></div> </div> </div> <div style='clear:both;'></div> </div> <!-- Footer --> <div class='google-footer-outer loading'> <div id='google-footer'> <a href='//www.google.com/'> <img class='google-logo-dark' height='36' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAABICAYAAABFoT/eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACLVJREFUeNrsXd+L20YQ3vOprdLqiMXFXE2qB7dcwEcTSB7ykIc+9A/PQx/yEMq1TWhNuYIpJriNr7XpmZ5IxFEvmW2EKs3Ornb1w50PxIFP0kiz387OzM6uhGAwGAxGP3Ho+f7x7ri1O7LdccPqZjSNA4dEHsLfaHcEFedJom93x9Xu2OyOFTcBo6sED3fHZHeMEELrkAHJF0B8Rr+gDFsZ5n0luLTQ95AXs4W06D/tjpR50xtM4CjD0y48YGB4rnyZxNOzyA7zBHr+nLnDaJLg0mo/ALekCasg3Z4XbM0ZdTEgnDPeHY8bIne+Qz2GvwyGNwsuyT218KWvIIBMcwGpLiipcolecjMxfBDchNyS1EvxLiOSIecp31q6IJ/C3yrIrMqMm4jhg+AxkdwbIO3aUO4KjqqMjCT3uaazMBhWBJfuxH3CtRfiXf66DhSRZWbmlMnNaILgZxrXJQO/eO3wORZwvwm4JUxuhheCjzVBYAbW1ces45YDSoZrFNOEE835M8FT6oyeEnws8Fz3QnBxFKPHBMem4GU+m6fPGb0leCTwWcM5B36MPgeZI01gudyDdw3hPeXfo8L/rmCUWnuMMdqUL2WqWeRbhf+twfVsO7YagZGNC79fw7OthEVtkiJ4jJzTd3KPwf3CRqhhiTu23AP5sl0/0xiwISQXpNwLIJK87mHF+U8ddzzdmgKlGzlPYjyxGJQouIhNT4k9AqWEFkqfguIvagTWbcq3KW1WE3xS3m8NtA9WS451xofwjKT5kkDoK/b6mDk5FfXr1lWDL4BofZEv2/SRsK/EHGlGdBdu8QNRb8HMCFwt7Yy3DDI/QP7fx5z3VLhdlJEIs4rKNuXXJXdxZPdB7kfCzWqwCO4V1LHgLjInX3tQ1KzCR52Cz+vDj1dydeRuS74rcvs2Pi6fT5H8OaaUQPQPYcWwRSGXyhhscn5dpAnEFMkuEZetbfkTAnlSuH4DxisE+aMGeJAQ3lFl7C4LJE6QWCaCd583ORQ1jYAwjFctal7nOs2ZZvicwvlZx+RHGrcoAwKUVX8uwcc/9TT65INeDOr5shL9LDRB6QTeIy3zwfdh3WOi6axLCEhSjXU7F3h6LqggUtvyJxpynwu8tDkD98fXApOxRj8zoZ9MnGveYVIVZKaGrkBXCY65BCYNN9NkjpKOyQ81Q79JgdxS+Jn3SDTEXRI7SWzaiSTB32oI3nU3BvMfM0urhOVYgwKhuiAfc4tM07wXwm1ZRoQYSl2NUwiu01fEAHVcpixd745FvVz4dzUUc0o8rwoLy8ZSwU6CyFx1RP5II9+1bFPEFs9HWbNLiimDXE+vCm7u1CS47cofzD3aEhVY57mxRo5zlqdt+RFC1JUH2S7bcVXg4liTMakaBZZVxiTICRoivcn1sEUBlk24JmaC6kxUbYmWoqvyfck2xZGGnDFYa9MMzkYQ1ijkCX6qidybrgePiQ0QIQqoi6qRLeqQfIoRsEHaQJLBdHOnLGetSdm/IPcymJuS1PAnbQPH0MOw/39C1vL11DiLOqIsbDI8QcHvGiLnySi2qUXBicaqUSxN5LEB0g7Jt3ENXJLPJ5S1tnaZBoWbpRqrmjRE7qHmpSmNHdQcYrEUadoh+TbBnc9ri7iycI1kzPeNcLDIvbiqXpez9Tmdq6zGREPuzECBoxrPMiI2WtvyNwhJba2wy3JZ6ky5dD1lSvmZS3e4SPA1wcf1VTFHKX+cGwZzdUYcqpvUtvwrD/InDttVlyZeAKlNN5MKbAiurHhKIPlUuJvlTCCiDjSKSCsUmCFWbGLZwCESfK07JB8LvMYWVtw0D00JEHV8Mq2HkqPbE0oHLvvK2g0o8ETg+4cfwTlZDT9JDoWygu4uQQE/ivIvtcnfPkaCqhiupz7jWOAzqL/vjtcdkv9G4MVMt+EaylfuImiPAXEUjRF3pjjaHiPPZ6If9TGGAO4ZY0am6jOCb+DQ+ZCqLkIpOIPrdNfIjnFPY6nyFut7TS/fanrziOBOKMupKw94WaLMtuVnSFt9CPrWWdJE6PeltCX432DEBoh+5Dv8RRhdis8YAv9uyq4/JAwtlEApgBe9Cw9xDD3tdk4Jn0MDfiHwPHcRPxBePCMER3GuIx7kGlv9fkZ4V9lolx2Uv4X7hEj7qJ3LDoAMGbTRMRibu4L2xQ8bgt8AyU+Q+x7nYrvDnH4iuO5LxKsYwPVbkPMvKF9Zky9wXzRfVWizi62r9X5VHf55h+WHhDjGBZ4WRhyTr6z5SlCoLMxLSpBZFsQ9F80uQFbF/6aFWi+Ev51vzzsuX+msyzuQXXjUz8zEBy+zpq9yweXAoxJW4JbYrDS6gYDqGHxPl+TKeiBfxj9/EBIElPYeOA4y8/qRQfknjvSzgRgtq0Pw/M1eQeMdOSb2Bnrhr6Led+1vcp2x7oTFHMnedFW+Ivlty062BUt74oHgSj+vHepnhunn0JJAMtBZgDI/qmGtMujRv8DDpo47zBJ8UtPOuAR/7rKn8t9AJ0tBdmBAmJ/Fu71yxp4I3qh+DhyRqbi5Y1ShVPlSb8X7bRNcfgZFl+WRGYo7uecrWq1r8X5bhmzP5OdlDwsGRm1suSxkg5rYm7ConyGQ3Zl+DgSD8V/kPwrWBMG9YcBtyShBnTLdTiHgttw7qAW7cqh/ZnmPKr/6ignOaKsdyxbsToT5UkPsW00bJjijDXficcX/JsLs6w2BwGtherdckH3w/kNXRPVI0OqJQoHX42/66IMfMj/2huRjxIidgKV/W0JS+bsstDoTeAHcrI8E5zTh/sDkqxL5rZup55/3USlswfcHf4IrQplVDgW9XFlOqnwr6pVPMMEZTuC60EttvdzbLbaZ4PsFVa3nohhO+vW+yn/ZB2fUhpysmQrzBcTSai9EszuZMcEZ1lCFVrp9zGXhm69iLyY4oxFIa178lPe12I/P2DAYDAaDwWAwGAwGg8FgMBgMBoPBYDD2Cf8IMADDRGoQTe+E9AAAAABJRU5ErkJggg==' style='margin-top: -16px;' width='92'/> </a> <ul> <li> <a href='//www.google.com/'> Google </a> </li> <li> <a href='//www.google.com/policies/privacy/'> Privacy </a> </li> <li> <a href='//www.google.com/policies/terms/'> Terms </a> </li> </ul> </div> </div> <script type='text/javascript'> //<![CDATA[ // Social sharing popups. var postEl = document.getElementsByClassName('social-wrapper'); var postCount = postEl.length; for(i=0; i<postCount;i++){ postEl[i].addEventListener("click", function(event){ var postUrl = this.getAttribute("data-href"); window.open( postUrl,'popUpWindow','height=500,width=500,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes'); });} //]]> </script> <script type='text/javascript'> //<![CDATA[ var BreakpointHandler = function() { this.initted = false; this.isHomePage = false; this.isMobile = false; }; BreakpointHandler.prototype.finalizeSummary = function(summaryHtml, lastNode) { // Use $.trim for IE8 compatibility summaryHtml = $.trim(summaryHtml).replace(/(<br>|\s)+$/,''); if (lastNode.nodeType == 3) { var lastChar = summaryHtml.slice(-1); if (!lastChar.match(/[.”"?]/)) { if (!lastChar.match(/[A-Za-z]/)) { summaryHtml = summaryHtml.slice(0, -1); } summaryHtml += ' ...'; } } else if (lastNode.nodeType == 1 && (lastNode.nodeName == 'I' || lastNode.nodeName == 'A')) { summaryHtml += ' ...'; } return summaryHtml; }; BreakpointHandler.prototype.generateSummaryFromContent = function(content, numWords) { var seenWords = 0; var summaryHtml = ''; for (var i=0; i < content.childNodes.length; i++) { var node = content.childNodes[i]; var nodeText; if (node.nodeType == 1) { if (node.hasAttribute('data-about-pullquote')) { continue; } nodeText = node.textContent; if (nodeText === undefined) { // innerText for IE8 nodeText = node.innerText; } if (node.nodeName == 'DIV' || node.nodeName == 'B') { // Don't end early if we haven't seen enough words. if (seenWords < 10) { continue; } if (i > 0) { summaryHtml = this.finalizeSummary(summaryHtml, content.childNodes[i-1]); } break; } summaryHtml += node.outerHTML; } else if (node.nodeType == 3) { nodeText = node.nodeValue; summaryHtml += nodeText + ' '; } var words = nodeText.match(/\S+\s*/g); if (!words) { continue; } var remain = numWords - seenWords; if (words.length >= remain) { summaryHtml = this.finalizeSummary(summaryHtml, node); break; } seenWords += words.length; } return summaryHtml; }; BreakpointHandler.prototype.detect = function() { var match, pl = /\+/g, search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); var urlParams = {}; while (match = search.exec(query)) urlParams[decode(match[1])] = decode(match[2]); this.isListPage = $('html').hasClass('list-page'); this.isMobile = urlParams['m'] === '1'; this.isHomePage = window.location.pathname == '/'; }; BreakpointHandler.prototype.initContent = function() { var self = this; $('.post').each(function(index) { var body = $(this).children('.post-body')[0]; var content = $(body).children('.post-content')[0]; $(content).addClass('post-original'); var data = $(content).children('script').html(); data = self.rewriteForSSL(data); // If exists, extract specified editor's preview. var match = data.match(/([\s\S]+?)<div data-is-preview.+?>([\s\S]+)<\/div>/m); if (match) { data = match[1]; } // Prevent big images from loading when they aren't needed. // This must be done as a pre-injection step, since image loading can't be // canceled once embedded into the DOM. if (self.isListPage && self.isMobile) { data = data.replace(/<(img|iframe) .+?>/g, ''); } // Insert template to be rendered as nodes. content.innerHTML = data; if (self.isListPage) { var summary = document.createElement('div'); $(summary).addClass('post-content'); $(summary).addClass('post-summary'); body.insertBefore(summary, content); if (match) { // Use provided summary. summary.innerHTML = match[2]; } else { // Generate a summary. // Summary generation relies on DOM, so it must occur after content is // inserted into the page. summary.innerHTML = self.generateSummaryFromContent(content, 30); } // Add read more link to summary. var titleAnchor = $(this).find('.title a')[0]; var link = titleAnchor.cloneNode(true); link.innerHTML = 'Read More'; $(link).addClass('read-more'); summary.appendChild(link); } }); // Firefox does not allow for proper styling of BR. if (navigator.userAgent.indexOf('Firefox') > -1) { $('.post-content br').replaceWith('<span class="space"></span>'); } $('.loading').removeClass('loading'); }; BreakpointHandler.prototype.process = function() { if (!this.initted) { var makeInsecureImageRegex = function(hosts) { var whitelist = hosts.join('|').replace(/\./g,'\\.'); // Normal image tags, plus input images (yes, this is possible!) return new RegExp('(<(img|input)[^>]+?src=("|\'))http:\/\/(' + whitelist +')', 'g'); }; this.sslImageRegex = makeInsecureImageRegex(BreakpointHandler.KNOWN_HTTPS_HOSTS); this.sslImageCurrentDomainRegex = makeInsecureImageRegex([window.location.hostname]); this.detect(); this.initContent(); this.initted = true; } }; BreakpointHandler.KNOWN_HTTPS_HOSTS = [ "www.google.org", "www.google.com", "services.google.com", "blogger.com", "draft.blogger.com", "www.blogger.com", "photos1.blogger.com", "photos2.blogger.com", "photos3.blogger.com", "blogblog.com", "img1.blogblog.com", "img2.blogblog.com", "www.blogblog.com", "www1.blogblog.com", "www2.blogblog.com", "0.bp.blogspot.com", "1.bp.blogspot.com", "2.bp.blogspot.com", "3.bp.blogspot.com", "4.bp.blogspot.com", "lh3.googleusercontent.com", "lh4.googleusercontent.com", "lh5.googleusercontent.com", "lh6.googleusercontent.com", "themes.googleusercontent.com", ]; BreakpointHandler.prototype.rewriteForSSL = function(html) { // Handle HTTP -> HTTPS source replacement of images, movies, and other embedded content. return html.replace(this.sslImageRegex, '$1https://$4') .replace(this.sslImageCurrentDomainRegex, '$1//$4') .replace(/(<(embed|iframe)[^>]+?src=("|'))http:\/\/([^"']*?(youtube|picasaweb\.google)\.com)/g, '$1https://$4') // Slideshow SWF takes a image host, so we need to rewrite that parameter. .replace(/(<embed[^>]+?feed=http(?=[^s]))/g, '$1s'); }; $(document).ready(function() { var handler = new BreakpointHandler(); handler.process(); // Top-level navigation. $(".BlogArchive .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); $(".Label .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); // Blog archive year expansion. $('.BlogArchive .intervalToggle').click(function(ev) { ev.preventDefault(); if ($(this).parent().hasClass('collapsed')) { $(this).parent().removeClass('collapsed'); $(this).parent().addClass('expanded'); } else { $(this).parent().removeClass('expanded'); $(this).parent().addClass('collapsed'); } }); // Reverse order of months. $('.BlogArchive .intervalToggle + div').each(function(_, items) { var year = $(this); year.children().each(function(_, month) { year.prepend(month); }); }); // Set anchors to open in new tab. $('.post-content img').parent().each(function(_, node) { if (node.nodeName == 'A') { $(this).attr('target', '_blank'); } }); // Process search requests. $('.searchBox input').on("keypress", function(ev) { if (ev.which == 13) { window.location.href = 'https://www.google.com/search?q=site%3A' + window.location.hostname + '%20' + encodeURIComponent ($(this).val()); } }); }); //]]> </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/984859869-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY6K9ZqKW0udVuenzdF8JIW9390Auw:1732401933875';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d2471378914199150966','//blog.chromium.org/2013/','2471378914199150966'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '2471378914199150966', 'title': 'Chromium Blog', 'url': 'https://blog.chromium.org/2013/', 'canonicalUrl': 'https://blog.chromium.org/2013/', 'homepageUrl': 'https://blog.chromium.org/', 'searchUrl': 'https://blog.chromium.org/search', 'canonicalHomepageUrl': 'https://blog.chromium.org/', 'blogspotFaviconUrl': 'https://blog.chromium.org/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-37592578-1', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Chromium Blog - Atom\x22 href\x3d\x22https://blog.chromium.org/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Chromium Blog - RSS\x22 href\x3d\x22https://blog.chromium.org/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Chromium Blog - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/2471378914199150966/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/d78375fb222d99b3', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'archive', 'pageName': '2013', 'pageTitle': 'Chromium Blog: 2013'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Chromium Blog', 'description': 'News and developments from the open source browser project', 'url': 'https://blog.chromium.org/2013/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2013, 'rangeMessage': 'Showing posts from 2013'}}}]); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML8', 'sidebar-top', document.getElementById('HTML8'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_LabelView', new _WidgetInfo('Label1', 'sidebar', document.getElementById('Label1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML6', 'sidebar', document.getElementById('HTML6'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML4', 'sidebar-bottom', document.getElementById('HTML4'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-bottom', document.getElementById('HTML1'), {}, 'displayModeFull')); </script> </body> </html>