172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// found in the LICENSE file. 4513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/textfields_ui.h" 6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <algorithm> 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <string> 9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/string_piece.h" 12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/values.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/profiles/profile.h" 14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/jstemplate_builder.h" 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/url_constants.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "grit/browser_resources.h" 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch/** 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch * TextfieldsUIHTMLSource implementation. 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch */ 24513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTextfieldsUIHTMLSource::TextfieldsUIHTMLSource() 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch : DataSource(chrome::kChromeUITextfieldsHost, MessageLoop::current()) { 26513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 28513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TextfieldsUIHTMLSource::StartDataRequest(const std::string& path, 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito, 30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int request_id) { 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string full_html = ResourceBundle::GetSharedInstance() 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .GetRawDataResource(IDR_TEXTFIELDS_HTML).as_string(); 33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch html_bytes->data.resize(full_html.size()); 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); 37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SendResponse(request_id, html_bytes); 39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdochstd::string TextfieldsUIHTMLSource::GetMimeType( 42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& /* path */) const { 43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return "text/html"; 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 46513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTextfieldsUIHTMLSource::~TextfieldsUIHTMLSource() {} 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch/** 49513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch * TextfieldsDOMHandler implementation. 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch */ 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTextfieldsDOMHandler::TextfieldsDOMHandler() : WebUIMessageHandler() {} 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 53513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TextfieldsDOMHandler::RegisterMessages() { 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("textfieldValue", 55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NewCallback(this, &TextfieldsDOMHandler::HandleTextfieldValue)); 56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TextfieldsDOMHandler::HandleTextfieldValue(const ListValue* args) { 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static_cast<TextfieldsUI*>(web_ui_)->set_text( 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UTF16ToWideHack(ExtractStringValue(args))); 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch/** 64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch * TextfieldsUI implementation. 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch */ 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTextfieldsUI::TextfieldsUI(TabContents* contents) : WebUI(contents) { 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TextfieldsDOMHandler* handler = new TextfieldsDOMHandler(); 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddMessageHandler(handler); 69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch handler->Attach(this); 70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TextfieldsUIHTMLSource* html_source = new TextfieldsUIHTMLSource(); 72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Set up the chrome://textfields/ source. 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); 75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 76