| Index: chrome/renderer/render_view.cc
 | 
| ===================================================================
 | 
| --- chrome/renderer/render_view.cc	(revision 30634)
 | 
| +++ chrome/renderer/render_view.cc	(working copy)
 | 
| @@ -2422,6 +2422,31 @@
 | 
|        origin.toString().utf8()));
 | 
|  }
 | 
|  
 | 
| +bool RenderView::allowScript(WebFrame* frame, bool enabled_per_settings) {
 | 
| +  if (enabled_per_settings)
 | 
| +    return true;
 | 
| +
 | 
| +  WebSecurityOrigin origin = frame->securityOrigin();
 | 
| +  if (origin.isEmpty())
 | 
| +    return false;  // Uninitialized document?
 | 
| +
 | 
| +  if (EqualsASCII(origin.protocol(), chrome::kChromeUIScheme))
 | 
| +    return true;  // Browser UI elements should still work.
 | 
| +
 | 
| +  // If the scheme is ftp: or file:, an empty file name indicates a directory
 | 
| +  // listing, which requires JavaScript to function properly.
 | 
| +  GURL frame_url = frame->url();
 | 
| +  const char* kDirProtocols[] = { "ftp", "file" };
 | 
| +  for (size_t i = 0; i < arraysize(kDirProtocols); ++i) {
 | 
| +    if (EqualsASCII(origin.protocol(), kDirProtocols[i])) {
 | 
| +      return frame_url.SchemeIs(kDirProtocols[i]) &&
 | 
| +             frame_url.ExtractFileName().empty();
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  return false;  // Other protocols fall through here.
 | 
| +}
 | 
| +
 | 
|  void RenderView::didExhaustMemoryAvailableForScript(WebFrame* frame) {
 | 
|    Send(new ViewHostMsg_JSOutOfMemory(routing_id_));
 | 
|  }
 | 
| 
 |