1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/webui/memory_internals/memory_internals_handler.h" 6 7 #include <vector> 8 9 #include "base/bind.h" 10 #include "base/bind_helpers.h" 11 #include "base/strings/string16.h" 12 #include "base/values.h" 13 #include "chrome/browser/ui/webui/memory_internals/memory_internals_proxy.h" 14 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/render_frame_host.h" 16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_ui.h" 18 19 MemoryInternalsHandler::MemoryInternalsHandler() 20 : proxy_(new MemoryInternalsProxy()) {} 21 22 MemoryInternalsHandler::~MemoryInternalsHandler() { 23 proxy_->Detach(); 24 } 25 26 void MemoryInternalsHandler::RegisterMessages() { 27 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 28 proxy_->Attach(this); 29 30 // Set callback functions called by JavaScript messages. 31 web_ui()->RegisterMessageCallback( 32 "update", 33 base::Bind(&MemoryInternalsHandler::OnJSUpdate, 34 base::Unretained(this))); 35 } 36 37 void MemoryInternalsHandler::OnJSUpdate(const base::ListValue* list) { 38 proxy_->StartFetch(list); 39 } 40 41 void MemoryInternalsHandler::OnUpdate(const base::string16& update) { 42 // Don't try to execute JavaScript in a RenderFrame that no longer exists. 43 content::RenderFrameHost* frame = web_ui()->GetWebContents()->GetMainFrame(); 44 if (frame) 45 frame->ExecuteJavaScript(update); 46 } 47