diff options
author | Kristian Monsen <kristianm@google.com> | 2011-06-28 21:49:31 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-07-08 17:55:00 +0100 |
commit | ddb351dbec246cf1fab5ec20d2d5520909041de1 (patch) | |
tree | 158e3fb57bdcac07c7f1e767fde3c70687c9fbb1 /webkit | |
parent | 6b92e04f5f151c896e3088e86f70db7081009308 (diff) | |
download | external_chromium-ddb351dbec246cf1fab5ec20d2d5520909041de1.zip external_chromium-ddb351dbec246cf1fab5ec20d2d5520909041de1.tar.gz external_chromium-ddb351dbec246cf1fab5ec20d2d5520909041de1.tar.bz2 |
Merge Chromium at r12.0.742.93: Initial merge by git
Change-Id: Ic5ee2fec31358bbee305f7e915442377bfa6cda6
Diffstat (limited to 'webkit')
140 files changed, 3213 insertions, 1912 deletions
diff --git a/webkit/glue/alt_error_page_resource_fetcher.cc b/webkit/glue/alt_error_page_resource_fetcher.cc index 4e1867d..da95e47 100644 --- a/webkit/glue/alt_error_page_resource_fetcher.cc +++ b/webkit/glue/alt_error_page_resource_fetcher.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -9,6 +9,7 @@ using WebKit::WebFrame; using WebKit::WebURLError; +using WebKit::WebURLRequest; using WebKit::WebURLResponse; namespace webkit_glue { @@ -26,7 +27,7 @@ AltErrorPageResourceFetcher::AltErrorPageResourceFetcher( callback_(callback), original_error_(original_error) { fetcher_.reset(new ResourceFetcherWithTimeout( - url, frame, kDownloadTimeoutSec, + url, frame, WebURLRequest::TargetIsMainFrame, kDownloadTimeoutSec, NewCallback(this, &AltErrorPageResourceFetcher::OnURLFetchComplete))); } diff --git a/webkit/glue/alt_error_page_resource_fetcher.h b/webkit/glue/alt_error_page_resource_fetcher.h index 3cccaf4..60dca47 100644 --- a/webkit/glue/alt_error_page_resource_fetcher.h +++ b/webkit/glue/alt_error_page_resource_fetcher.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,7 +6,7 @@ #define WEBKIT_GLUE_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ #include "base/callback.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "googleurl/src/gurl.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" diff --git a/webkit/glue/context_menu.cc b/webkit/glue/context_menu.cc index 6db5c51..ad0d70a 100644 --- a/webkit/glue/context_menu.cc +++ b/webkit/glue/context_menu.cc @@ -1,14 +1,18 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "webkit/glue/context_menu.h" +#include "webkit/glue/glue_serialize.h" namespace webkit_glue { +const int32 CustomContextMenuContext::kCurrentRenderWidget = kint32max; + CustomContextMenuContext::CustomContextMenuContext() : is_pepper_menu(false), - request_id(0) { + request_id(0), + render_widget_id(kCurrentRenderWidget) { } } // namespace webkit_glue @@ -39,9 +43,17 @@ ContextMenuParams::ContextMenuParams(const WebKit::WebContextMenuData& data) edit_flags(data.editFlags), security_info(data.securityInfo), frame_charset(data.frameEncoding.utf8()) { + for (size_t i = 0; i < data.dictionarySuggestions.size(); ++i) + dictionary_suggestions.push_back(data.dictionarySuggestions[i]); + custom_context.is_pepper_menu = false; for (size_t i = 0; i < data.customItems.size(); ++i) custom_items.push_back(WebMenuItem(data.customItems[i])); + + if (!data.frameHistoryItem.isNull()) { + frame_content_state = + webkit_glue::HistoryItemToString(data.frameHistoryItem); + } } ContextMenuParams::~ContextMenuParams() { diff --git a/webkit/glue/context_menu.h b/webkit/glue/context_menu.h index 2f38807..e8441e5 100644 --- a/webkit/glue/context_menu.h +++ b/webkit/glue/context_menu.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -19,6 +19,11 @@ namespace webkit_glue { struct CustomContextMenuContext { bool is_pepper_menu; int request_id; + // The routing ID of the render widget on which the context menu is shown. + // It could also be |kCurrentRenderWidget|, which means the render widget that + // the corresponding ViewHostMsg_ContextMenu is sent to. + int32 render_widget_id; + static const int32 kCurrentRenderWidget; CustomContextMenuContext(); }; @@ -64,6 +69,10 @@ struct ContextMenuParams { // This is the URL of the subframe that the context menu was invoked on. GURL frame_url; + // This is the history item state of the subframe that the context menu was + // invoked on. + std::string frame_content_state; + // These are the parameters for the media element that the context menu // was invoked on. int media_flags; diff --git a/webkit/glue/cpp_bound_class.h b/webkit/glue/cpp_bound_class.h index 06662ce..8335a0a 100644 --- a/webkit/glue/cpp_bound_class.h +++ b/webkit/glue/cpp_bound_class.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -24,7 +24,7 @@ #include "webkit/glue/cpp_variant.h" #include "base/callback.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" namespace WebKit { class WebFrame; diff --git a/webkit/glue/form_field.cc b/webkit/glue/form_field.cc index 82cac6a..0de8446 100644 --- a/webkit/glue/form_field.cc +++ b/webkit/glue/form_field.cc @@ -20,41 +20,41 @@ using WebKit::WebVector; namespace webkit_glue { FormField::FormField() - : max_length_(0), - is_autofilled_(false) { + : max_length(0), + is_autofilled(false) { } // TODO(jhawkins): This constructor should probably be deprecated and the // functionality moved to FormManager. FormField::FormField(WebFormControlElement element) - : max_length_(0), - is_autofilled_(false) { - name_ = element.nameForAutofill(); + : max_length(0), + is_autofilled(false) { + name = element.nameForAutofill(); // TODO(jhawkins): Extract the field label. For now we just use the field // name. - label_ = name_; + label = name; - form_control_type_ = element.formControlType(); - if (form_control_type_ == ASCIIToUTF16("text")) { + form_control_type = element.formControlType(); + if (form_control_type == ASCIIToUTF16("text")) { const WebInputElement& input_element = element.toConst<WebInputElement>(); - value_ = input_element.value(); - max_length_ = input_element.size(); - is_autofilled_ = input_element.isAutofilled(); - } else if (form_control_type_ == ASCIIToUTF16("select-one")) { + value = input_element.value(); + max_length = input_element.size(); + is_autofilled = input_element.isAutofilled(); + } else if (form_control_type == ASCIIToUTF16("select-one")) { WebSelectElement select_element = element.to<WebSelectElement>(); - value_ = select_element.value(); + value = select_element.value(); // For select-one elements copy option strings. WebVector<WebElement> list_items = select_element.listItems(); - option_strings_.reserve(list_items.size()); + option_strings.reserve(list_items.size()); for (size_t i = 0; i < list_items.size(); ++i) { if (list_items[i].hasTagName("option")) - option_strings_.push_back(list_items[i].to<WebOptionElement>().value()); + option_strings.push_back(list_items[i].to<WebOptionElement>().value()); } } - TrimWhitespace(value_, TRIM_LEADING, &value_); + TrimWhitespace(value, TRIM_LEADING, &value); } FormField::FormField(const string16& label, @@ -63,12 +63,12 @@ FormField::FormField(const string16& label, const string16& form_control_type, int max_length, bool is_autofilled) - : label_(label), - name_(name), - value_(value), - form_control_type_(form_control_type), - max_length_(max_length), - is_autofilled_(is_autofilled) { + : label(label), + name(name), + value(value), + form_control_type(form_control_type), + max_length(max_length), + is_autofilled(is_autofilled) { } FormField::~FormField() { @@ -77,10 +77,10 @@ FormField::~FormField() { bool FormField::operator==(const FormField& field) const { // A FormField stores a value, but the value is not part of the identity of // the field, so we don't want to compare the values. - return (label_ == field.label_ && - name_ == field.name_ && - form_control_type_ == field.form_control_type_ && - max_length_ == field.max_length_); + return (label == field.label && + name == field.name && + form_control_type == field.form_control_type && + max_length == field.max_length); } bool FormField::operator!=(const FormField& field) const { @@ -88,24 +88,24 @@ bool FormField::operator!=(const FormField& field) const { } bool FormField::StrictlyEqualsHack(const FormField& field) const { - return (label_ == field.label_ && - name_ == field.name_ && - value_ == field.value_ && - form_control_type_ == field.form_control_type_ && - max_length_ == field.max_length_); + return (label == field.label && + name == field.name && + value == field.value && + form_control_type == field.form_control_type && + max_length == field.max_length); } std::ostream& operator<<(std::ostream& os, const FormField& field) { return os - << UTF16ToUTF8(field.label()) + << UTF16ToUTF8(field.label) << " " - << UTF16ToUTF8(field.name()) + << UTF16ToUTF8(field.name) << " " - << UTF16ToUTF8(field.value()) + << UTF16ToUTF8(field.value) << " " - << UTF16ToUTF8(field.form_control_type()) + << UTF16ToUTF8(field.form_control_type) << " " - << field.max_length(); + << field.max_length; } } // namespace webkit_glue diff --git a/webkit/glue/form_field.h b/webkit/glue/form_field.h index 1874c44..c246091 100644 --- a/webkit/glue/form_field.h +++ b/webkit/glue/form_field.h @@ -13,8 +13,7 @@ namespace webkit_glue { // Stores information about a field in a form. -class FormField { - public: +struct FormField { FormField(); explicit FormField(WebKit::WebFormControlElement element); FormField(const string16& label, @@ -25,31 +24,6 @@ class FormField { bool is_autofilled); virtual ~FormField(); - const string16& label() const { return label_; } - const string16& name() const { return name_; } - const string16& value() const { return value_; } - const string16& form_control_type() const { return form_control_type_; } - int max_length() const { return max_length_; } - bool is_autofilled() const { return is_autofilled_; } - - // Returns option string for elements for which they make sense (select-one, - // for example) for the rest of elements return an empty array. - const std::vector<string16>& option_strings() const { - return option_strings_; - } - - void set_label(const string16& label) { label_ = label; } - void set_name(const string16& name) { name_ = name; } - void set_value(const string16& value) { value_ = value; } - void set_form_control_type(const string16& form_control_type) { - form_control_type_ = form_control_type; - } - void set_max_length(int max_length) { max_length_ = max_length; } - void set_autofilled(bool is_autofilled) { is_autofilled_ = is_autofilled; } - void set_option_strings(const std::vector<string16>& strings) { - option_strings_ = strings; - } - // Equality tests for identity which does not include |value_| or |size_|. // Use |StrictlyEqualsHack| method to test all members. // TODO(dhollowa): These operators need to be revised when we implement field @@ -61,14 +35,13 @@ class FormField { // TODO(dhollowa): This will be removed when we implement field ids. bool StrictlyEqualsHack(const FormField& field) const; - private: - string16 label_; - string16 name_; - string16 value_; - string16 form_control_type_; - int max_length_; - bool is_autofilled_; - std::vector<string16> option_strings_; + string16 label; + string16 name; + string16 value; + string16 form_control_type; + int max_length; + bool is_autofilled; + std::vector<string16> option_strings; }; // So we can compare FormFields with EXPECT_EQ(). diff --git a/webkit/glue/ftp_directory_listing_response_delegate.cc b/webkit/glue/ftp_directory_listing_response_delegate.cc index 0a2542b..33a3f8c 100644 --- a/webkit/glue/ftp_directory_listing_response_delegate.cc +++ b/webkit/glue/ftp_directory_listing_response_delegate.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -17,7 +17,6 @@ #include "net/base/net_errors.h" #include "net/base/net_util.h" #include "net/ftp/ftp_directory_listing_parser.h" -#include "net/ftp/ftp_server_type_histograms.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderClient.h" @@ -60,37 +59,40 @@ FtpDirectoryListingResponseDelegate::FtpDirectoryListingResponseDelegate( WebURLLoader* loader, const WebURLResponse& response) : client_(client), - loader_(loader), - original_response_(response), - buffer_(base::Time::Now()), - updated_histograms_(false), - had_parsing_error_(false) { - Init(); + loader_(loader) { + Init(response.url()); } void FtpDirectoryListingResponseDelegate::OnReceivedData(const char* data, int data_len) { - if (had_parsing_error_) - return; - - if (buffer_.ConsumeData(data, data_len) == net::OK) - ProcessReceivedEntries(); - else - had_parsing_error_ = true; + buffer_.append(data, data_len); } void FtpDirectoryListingResponseDelegate::OnCompletedRequest() { - if (!had_parsing_error_ && buffer_.ProcessRemainingData() == net::OK) - ProcessReceivedEntries(); - else - had_parsing_error_ = true; - - if (had_parsing_error_) + std::vector<FtpDirectoryListingEntry> entries; + int rv = net::ParseFtpDirectoryListing(buffer_, base::Time::Now(), &entries); + if (rv != net::OK) { SendDataToClient("<script>onListingParsingError();</script>\n"); + return; + } + for (size_t i = 0; i < entries.size(); i++) { + FtpDirectoryListingEntry entry = entries[i]; + + // Skip the current and parent directory entries in the listing. Our header + // always includes them. + if (EqualsASCII(entry.name, ".") || EqualsASCII(entry.name, "..")) + continue; + + bool is_directory = (entry.type == FtpDirectoryListingEntry::DIRECTORY); + int64 size = entry.size; + if (entry.type != FtpDirectoryListingEntry::FILE) + size = 0; + SendDataToClient(net::GetDirectoryListingEntry( + entry.name, entry.raw_name, is_directory, size, entry.last_modified)); + } } -void FtpDirectoryListingResponseDelegate::Init() { - GURL response_url(original_response_.url()); +void FtpDirectoryListingResponseDelegate::Init(const GURL& response_url) { UnescapeRule::Type unescape_rules = UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS; std::string unescaped_path = UnescapeURLComponent(response_url.path(), @@ -106,54 +108,9 @@ void FtpDirectoryListingResponseDelegate::Init() { } } -bool FtpDirectoryListingResponseDelegate::ConvertToServerEncoding( - const string16& filename, std::string* raw_bytes) const { - if (buffer_.encoding().empty()) { - *raw_bytes = std::string(); - return true; - } - - return base::UTF16ToCodepage(filename, buffer_.encoding().c_str(), - base::OnStringConversionError::FAIL, - raw_bytes); -} - -void FtpDirectoryListingResponseDelegate::ProcessReceivedEntries() { - if (!updated_histograms_ && buffer_.EntryAvailable()) { - // Only log the server type if we got enough data to reliably detect it. - net::UpdateFtpServerTypeHistograms(buffer_.GetServerType()); - updated_histograms_ = true; - } - - while (buffer_.EntryAvailable()) { - FtpDirectoryListingEntry entry = buffer_.PopEntry(); - - // Skip the current and parent directory entries in the listing. Our header - // always includes them. - if (EqualsASCII(entry.name, ".") || EqualsASCII(entry.name, "..")) - continue; - - bool is_directory = (entry.type == FtpDirectoryListingEntry::DIRECTORY); - int64 size = entry.size; - if (entry.type != FtpDirectoryListingEntry::FILE) - size = 0; - std::string raw_bytes; - if (ConvertToServerEncoding(entry.name, &raw_bytes)) { - SendDataToClient(net::GetDirectoryListingEntry( - entry.name, raw_bytes, is_directory, size, entry.last_modified)); - } else { - // Consider an encoding problem a non-fatal error. The server's support - // for non-ASCII characters might be buggy. Display an error message, - // but keep trying to display the rest of the listing (most file names - // are ASCII anyway, we could be just unlucky with this one). - had_parsing_error_ = true; - } - } -} - void FtpDirectoryListingResponseDelegate::SendDataToClient( const std::string& data) { - client_->didReceiveData(loader_, data.data(), data.length()); + client_->didReceiveData(loader_, data.data(), data.length(), -1); } } // namespace webkit_glue diff --git a/webkit/glue/ftp_directory_listing_response_delegate.h b/webkit/glue/ftp_directory_listing_response_delegate.h index 9502761..402d618 100644 --- a/webkit/glue/ftp_directory_listing_response_delegate.h +++ b/webkit/glue/ftp_directory_listing_response_delegate.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -10,7 +10,7 @@ #include <string> -#include "net/ftp/ftp_directory_listing_buffer.h" +#include "base/basictypes.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" namespace WebKit { @@ -18,6 +18,8 @@ class WebURLLoader; class WebURLLoaderClient; } +class GURL; + namespace webkit_glue { class FtpDirectoryListingResponseDelegate { @@ -31,16 +33,7 @@ class FtpDirectoryListingResponseDelegate { void OnCompletedRequest(); private: - void Init(); - - // Converts |filename| to detected server encoding and puts the result - // in |raw_bytes| (if no conversion is necessary, an empty string is used). - // Returns true on success. - bool ConvertToServerEncoding(const string16& filename, - std::string* raw_bytes) const; - - // Fetches the listing entries from the buffer and sends them to the client. - void ProcessReceivedEntries(); + void Init(const GURL& response_url); void SendDataToClient(const std::string& data); @@ -49,18 +42,8 @@ class FtpDirectoryListingResponseDelegate { WebKit::WebURLLoaderClient* client_; WebKit::WebURLLoader* loader_; - // The original resource response for this request. We use this as a - // starting point for each parts response. - WebKit::WebURLResponse original_response_; - - // Data buffer also responsible for parsing the listing data. - net::FtpDirectoryListingBuffer buffer_; - - // True if we updated histogram data (we only want to do it once). - bool updated_histograms_; - - // True if we got an error when parsing the response. - bool had_parsing_error_; + // Buffer for data received from the network. + std::string buffer_; DISALLOW_COPY_AND_ASSIGN(FtpDirectoryListingResponseDelegate); }; diff --git a/webkit/glue/gl_bindings_skia_cmd_buffer.cc b/webkit/glue/gl_bindings_skia_cmd_buffer.cc new file mode 100644 index 0000000..06010cb --- /dev/null +++ b/webkit/glue/gl_bindings_skia_cmd_buffer.cc @@ -0,0 +1,122 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +#include "webkit/glue/gl_bindings_skia_cmd_buffer.h" + +#define GL_GLEXT_PROTOTYPES +#include "gpu/GLES2/gl2.h" +#include "gpu/GLES2/gl2ext.h" + +#include "third_party/skia/gpu/include/GrGLInterface.h" + +namespace webkit_glue { + +void BindSkiaToCommandBufferGL() { + static GrGLInterface cmd_buffer_interface = { + kES2_GrGLBinding, + + glActiveTexture, + glAttachShader, + glBindAttribLocation, + glBindBuffer, + glBindTexture, + glBlendColor, + glBlendFunc, + glBufferData, + glBufferSubData, + glClear, + glClearColor, + glClearStencil, + NULL, // glClientActiveTexture + NULL, // glColor4ub + glColorMask, + NULL, // glColorPointer + glCompileShader, + glCompressedTexImage2D, + glCreateProgram, + glCreateShader, + glCullFace, + glDeleteBuffers, + glDeleteProgram, + glDeleteShader, + glDeleteTextures, + glDepthMask, + glDisable, + NULL, // glDisableClientState + glDisableVertexAttribArray, + glDrawArrays, + glDrawElements, + glEnable, + NULL, // glEnableClientState + glEnableVertexAttribArray, + glFrontFace, + glGenBuffers, + glGenTextures, + glGetBufferParameteriv, + glGetError, + glGetIntegerv, + glGetProgramInfoLog, + glGetProgramiv, + glGetShaderInfoLog, + glGetShaderiv, + glGetString, + glGetUniformLocation, + glLineWidth, + glLinkProgram, + NULL, // glLoadMatrixf + NULL, // glMatrixMode + glPixelStorei, + NULL, // glPointSize + glReadPixels, + glScissor, + NULL, // glShadeModel + glShaderSource, + glStencilFunc, + glStencilFuncSeparate, + glStencilMask, + glStencilMaskSeparate, + glStencilOp, + glStencilOpSeparate, + NULL, // glTexCoordPointer + NULL, // glTexEnvi + glTexImage2D, + glTexParameteri, + glTexSubImage2D, + glUniform1fv, + glUniform1i, + glUniform4fv, + glUniformMatrix3fv, + glUseProgram, + glVertexAttrib4fv, + glVertexAttribPointer, + NULL, // glVertexPointer + glViewport, + glBindFramebuffer, + glBindRenderbuffer, + glCheckFramebufferStatus, + glDeleteFramebuffers, + glDeleteRenderbuffers, + glFramebufferRenderbuffer, + glFramebufferTexture2D, + glGenFramebuffers, + glGenRenderbuffers, + glRenderbufferStorage, + glRenderbufferStorageMultisampleEXT, + glBlitFramebufferEXT, + NULL, // glResolveMultisampleFramebuffer + NULL, // glMapBuffer + NULL, // glUnmapBuffer + + GrGLInterface::kStaticInitEndGuard + }; + static bool host_StubGL_initialized = false; + if (!host_StubGL_initialized) { + GrGLSetGLInterface(&cmd_buffer_interface); + host_StubGL_initialized = true; + } +} + +} // namespace webkit_glue + diff --git a/webkit/glue/gl_bindings_skia_cmd_buffer.h b/webkit/glue/gl_bindings_skia_cmd_buffer.h new file mode 100644 index 0000000..206e4f9 --- /dev/null +++ b/webkit/glue/gl_bindings_skia_cmd_buffer.h @@ -0,0 +1,18 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEBKIT_GLUE_GL_BINDINGS_SKIA_CMD_BUFFER_H_ +#define WEBKIT_GLUE_GL_BINDINGS_SKIA_CMD_BUFFER_H_ +#pragma once + +namespace webkit_glue { + +// The GPU back-end for skia requires pointers to GL functions. This function +// binds skia-gpu to the cmd buffers GL. +void BindSkiaToCommandBufferGL(); + +} // namespace webkit_glue + +#endif // WEBKIT_GLUE_GL_BINDINGS_SKIA_CMD_BUFFER_H_ + diff --git a/webkit/glue/glue_serialize.cc b/webkit/glue/glue_serialize.cc index df055fe..54ba743 100644 --- a/webkit/glue/glue_serialize.cc +++ b/webkit/glue/glue_serialize.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -112,10 +112,10 @@ inline void WriteReal(double data, SerializeObject* obj) { } inline double ReadReal(const SerializeObject* obj) { - const void* tmp; + const void* tmp = NULL; int length = 0; ReadData(obj, &tmp, &length); - if (length > 0 && length >= static_cast<int>(sizeof(0.0))) + if (tmp && length > 0 && length >= static_cast<int>(sizeof(0.0))) return *static_cast<const double*>(tmp); else return 0.0; diff --git a/webkit/glue/idb_bindings.cc b/webkit/glue/idb_bindings.cc index 633045e..3149c52 100644 --- a/webkit/glue/idb_bindings.cc +++ b/webkit/glue/idb_bindings.cc @@ -1,18 +1,17 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "webkit/glue/idb_bindings.h" #include "base/basictypes.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "base/string16.h" #include "base/utf_string_conversions.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKey.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyPath.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" -#include "v8/include/v8.h" namespace webkit_glue { @@ -24,7 +23,6 @@ bool IDBKeysFromValuesAndKeyPath( const std::vector<WebSerializedScriptValue>& serialized_script_values, const string16& idb_key_path, std::vector<WebIDBKey>* values) { - v8::Locker lock; WebIDBKeyPath web_idb_key_path = WebIDBKeyPath::create(idb_key_path); bool error = web_idb_key_path.parseError() != 0; // TODO(bulach): what to do when we have a parse error? For now, setting @@ -46,7 +44,6 @@ WebSerializedScriptValue InjectIDBKey( const WebIDBKey& key, const WebSerializedScriptValue& value, const string16& idb_key_path) { - v8::Locker lock; return WebIDBKey::injectIDBKeyIntoSerializedValue( key, value, WebIDBKeyPath::create(idb_key_path)); } diff --git a/webkit/glue/image_resource_fetcher.cc b/webkit/glue/image_resource_fetcher.cc index 65d80bd..6a37a34 100644 --- a/webkit/glue/image_resource_fetcher.cc +++ b/webkit/glue/image_resource_fetcher.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,6 +11,8 @@ #include "third_party/skia/include/core/SkBitmap.h" using WebKit::WebFrame; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; namespace webkit_glue { @@ -19,13 +21,14 @@ ImageResourceFetcher::ImageResourceFetcher( WebFrame* frame, int id, int image_size, + WebURLRequest::TargetType target_type, Callback* callback) : callback_(callback), id_(id), image_url_(image_url), image_size_(image_size) { fetcher_.reset(new ResourceFetcher( - image_url, frame, + image_url, frame, target_type, NewCallback(this, &ImageResourceFetcher::OnURLFetchComplete))); } @@ -35,7 +38,7 @@ ImageResourceFetcher::~ImageResourceFetcher() { } void ImageResourceFetcher::OnURLFetchComplete( - const WebKit::WebURLResponse& response, + const WebURLResponse& response, const std::string& data) { SkBitmap bitmap; if (!response.isNull() && response.httpStatusCode() == 200) { diff --git a/webkit/glue/image_resource_fetcher.h b/webkit/glue/image_resource_fetcher.h index 8c6f70c..ff69bdb 100644 --- a/webkit/glue/image_resource_fetcher.h +++ b/webkit/glue/image_resource_fetcher.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -24,6 +24,7 @@ class ImageResourceFetcher { WebKit::WebFrame* frame, int id, int image_size, + WebKit::WebURLRequest::TargetType target_type, Callback* callback); virtual ~ImageResourceFetcher(); diff --git a/webkit/glue/inspector_strings.grd b/webkit/glue/inspector_strings.grd index d545158..d65dcaa 100644 --- a/webkit/glue/inspector_strings.grd +++ b/webkit/glue/inspector_strings.grd @@ -121,6 +121,7 @@ so we include the original license below: <file path="../../third_party/launchpad_translations/inspector_strings_da.xtb" lang="da" /> <file path="../../third_party/launchpad_translations/inspector_strings_de.xtb" lang="de" /> <file path="../../third_party/launchpad_translations/inspector_strings_es.xtb" lang="es" /> + <file path="../../third_party/launchpad_translations/inspector_strings_et.xtb" lang="et" /> <file path="../../third_party/launchpad_translations/inspector_strings_eu.xtb" lang="eu" /> <file path="../../third_party/launchpad_translations/inspector_strings_fi.xtb" lang="fi" /> <file path="../../third_party/launchpad_translations/inspector_strings_fr.xtb" lang="fr" /> diff --git a/webkit/glue/media/buffered_data_source.cc b/webkit/glue/media/buffered_data_source.cc index 7902221..8aafd26 100644 --- a/webkit/glue/media/buffered_data_source.cc +++ b/webkit/glue/media/buffered_data_source.cc @@ -6,6 +6,7 @@ #include "media/base/filter_host.h" #include "net/base/net_errors.h" +#include "webkit/glue/media/web_data_source_factory.h" #include "webkit/glue/webkit_glue.h" using WebKit::WebFrame; @@ -27,10 +28,25 @@ static const int kReadTrials = 3; // of FFmpeg. static const int kInitialReadBufferSize = 32768; +static WebDataSource* NewBufferedDataSource(MessageLoop* render_loop, + WebKit::WebFrame* frame) { + return new BufferedDataSource(render_loop, frame); +} + +// static +media::DataSourceFactory* BufferedDataSource::CreateFactory( + MessageLoop* render_loop, + WebKit::WebFrame* frame, + WebDataSourceBuildObserverHack* build_observer) { + return new WebDataSourceFactory(render_loop, frame, &NewBufferedDataSource, + build_observer); +} + BufferedDataSource::BufferedDataSource( MessageLoop* render_loop, WebFrame* frame) : total_bytes_(kPositionNotSpecified), + buffered_bytes_(0), loaded_(false), streaming_(false), frame_(frame), @@ -48,6 +64,8 @@ BufferedDataSource::BufferedDataSource( stop_signal_received_(false), stopped_on_render_loop_(false), media_is_paused_(true), + media_has_played_(false), + preload_(media::METADATA), using_range_request_(true) { } @@ -73,18 +91,25 @@ base::TimeDelta BufferedDataSource::GetTimeoutMilliseconds() { return base::TimeDelta::FromMilliseconds(kTimeoutMilliseconds); } -///////////////////////////////////////////////////////////////////////////// -// media::Filter implementation. +void BufferedDataSource::set_host(media::FilterHost* host) { + DataSource::set_host(host); + + if (loader_.get()) + UpdateHostState(); +} + void BufferedDataSource::Initialize(const std::string& url, - media::FilterCallback* callback) { + media::PipelineStatusCallback* callback) { // Saves the url. url_ = GURL(url); - if (!IsProtocolSupportedForMedia(url_)) { - // This method is called on the thread where host() lives so it is safe - // to make this call. - host()->SetError(media::PIPELINE_ERROR_NETWORK); - callback->Run(); + // This data source doesn't support data:// protocol so reject it. + if (url_.SchemeIs(kDataScheme)) { + callback->Run(media::DATASOURCE_ERROR_URL_NOT_SUPPORTED); + delete callback; + return; + } else if (!IsProtocolSupportedForMedia(url_)) { + callback->Run(media::PIPELINE_ERROR_NETWORK); delete callback; return; } @@ -92,8 +117,6 @@ void BufferedDataSource::Initialize(const std::string& url, DCHECK(callback); initialize_callback_.reset(callback); - media_format_.SetAsString(media::MediaFormat::kMimeType, - media::mime_type::kApplicationOctetStream); media_format_.SetAsString(media::MediaFormat::kURL, url); // Post a task to complete the initialization task. @@ -101,13 +124,18 @@ void BufferedDataSource::Initialize(const std::string& url, NewRunnableMethod(this, &BufferedDataSource::InitializeTask)); } -bool BufferedDataSource::IsUrlSupported(const std::string& url) { - GURL gurl(url); +void BufferedDataSource::CancelInitialize() { + base::AutoLock auto_lock(lock_); + DCHECK(initialize_callback_.get()); - // This data source doesn't support data:// protocol so reject it. - return IsProtocolSupportedForMedia(gurl) && !gurl.SchemeIs(kDataScheme); + initialize_callback_.reset(); + + render_loop_->PostTask( + FROM_HERE, NewRunnableMethod(this, &BufferedDataSource::CleanupTask)); } +///////////////////////////////////////////////////////////////////////////// +// media::Filter implementation. void BufferedDataSource::Stop(media::FilterCallback* callback) { { base::AutoLock auto_lock(lock_); @@ -128,6 +156,12 @@ void BufferedDataSource::SetPlaybackRate(float playback_rate) { playback_rate)); } +void BufferedDataSource::SetPreload(media::Preload preload) { + render_loop_->PostTask(FROM_HERE, + NewRunnableMethod(this, &BufferedDataSource::SetPreloadTask, + preload)); +} + ///////////////////////////////////////////////////////////////////////////// // media::DataSource implementation. void BufferedDataSource::Read(int64 position, size_t size, uint8* data, @@ -174,15 +208,6 @@ bool BufferedDataSource::HasSingleOrigin() { void BufferedDataSource::Abort() { DCHECK(MessageLoop::current() == render_loop_); - { - base::AutoLock auto_lock(lock_); - - // If we are told to abort, immediately return from any pending read - // with an error. - if (read_callback_.get()) - DoneRead_Locked(net::ERR_FAILED); - } - CleanupTask(); frame_ = NULL; } @@ -192,7 +217,7 @@ void BufferedDataSource::Abort() { void BufferedDataSource::InitializeTask() { DCHECK(MessageLoop::current() == render_loop_); DCHECK(!loader_.get()); - if (stopped_on_render_loop_) + if (stopped_on_render_loop_ || !initialize_callback_.get()) return; // Kick starts the watch dog task that will handle connection timeout. @@ -256,7 +281,13 @@ void BufferedDataSource::CleanupTask() { if (stopped_on_render_loop_) return; - read_callback_.reset(); + // Signal that stop task has finished execution. + // NOTE: it's vital that this be set under lock, as that's how Read() tests + // before registering a new |read_callback_| (which is cleared below). + stopped_on_render_loop_ = true; + + if (read_callback_.get()) + DoneRead_Locked(net::ERR_FAILED); } // Stop the watch dog. @@ -272,9 +303,6 @@ void BufferedDataSource::CleanupTask() { read_buffer_ = 0; read_submitted_time_ = base::Time(); read_attempts_ = 0; - - // Signal that stop task has finished execution. - stopped_on_render_loop_ = true; } void BufferedDataSource::RestartLoadingTask() { @@ -290,7 +318,8 @@ void BufferedDataSource::RestartLoadingTask() { } loader_ = CreateResourceLoader(read_position_, kPositionNotSpecified); - loader_->SetAllowDefer(!media_is_paused_); + BufferedResourceLoader::DeferStrategy strategy = ChooseDeferStrategy(); + loader_->UpdateDeferStrategy(strategy); loader_->Start( NewCallback(this, &BufferedDataSource::PartialReadStartCallback), NewCallback(this, &BufferedDataSource::NetworkEventCallback), @@ -326,7 +355,8 @@ void BufferedDataSource::WatchDogTask() { // retry the request. loader_->Stop(); loader_ = CreateResourceLoader(read_position_, kPositionNotSpecified); - loader_->SetAllowDefer(!media_is_paused_); + BufferedResourceLoader::DeferStrategy strategy = ChooseDeferStrategy(); + loader_->UpdateDeferStrategy(strategy); loader_->Start( NewCallback(this, &BufferedDataSource::PartialReadStartCallback), NewCallback(this, &BufferedDataSource::NetworkEventCallback), @@ -340,13 +370,37 @@ void BufferedDataSource::SetPlaybackRateTask(float playback_rate) { bool previously_paused = media_is_paused_; media_is_paused_ = (playback_rate == 0.0); - // Disallow deferring data when we are pausing, allow deferring data - // when we resume playing. - if (previously_paused && !media_is_paused_) { - loader_->SetAllowDefer(true); - } else if (!previously_paused && media_is_paused_) { - loader_->SetAllowDefer(false); + if (!media_has_played_ && previously_paused && !media_is_paused_) + media_has_played_ = true; + + BufferedResourceLoader::DeferStrategy strategy = ChooseDeferStrategy(); + loader_->UpdateDeferStrategy(strategy); +} + +void BufferedDataSource::SetPreloadTask(media::Preload preload) { + DCHECK(MessageLoop::current() == render_loop_); + preload_ = preload; +} + +BufferedResourceLoader::DeferStrategy +BufferedDataSource::ChooseDeferStrategy() { + // If the user indicates preload=metadata, then just load exactly + // what is needed for starting the pipeline and prerolling frames. + if (preload_ == media::METADATA && !media_has_played_) + return BufferedResourceLoader::kReadThenDefer; + + // In general, we want to try to buffer the entire video when the video + // is paused. But we don't want to do this if the video hasn't played yet + // and preload!=auto. + if (media_is_paused_ && + (preload_ == media::AUTO || media_has_played_)) { + return BufferedResourceLoader::kNeverDefer; } + + // When the video is playing, regardless of preload state, we buffer up + // to a hard limit and enable/disable deferring when the buffer is + // depleted/full. + return BufferedResourceLoader::kThresholdDefer; } // This method is the place where actual read happens, |loader_| must be valid @@ -386,13 +440,15 @@ void BufferedDataSource::DoneRead_Locked(int error) { read_buffer_ = 0; } -void BufferedDataSource::DoneInitialization_Locked() { +void BufferedDataSource::DoneInitialization_Locked( + media::PipelineStatus status) { DCHECK(MessageLoop::current() == render_loop_); DCHECK(initialize_callback_.get()); lock_.AssertAcquired(); - initialize_callback_->Run(); - initialize_callback_.reset(); + scoped_ptr<media::PipelineStatusCallback> initialize_callback( + initialize_callback_.release()); + initialize_callback->Run(status); } ///////////////////////////////////////////////////////////////////////////// @@ -402,15 +458,20 @@ void BufferedDataSource::HttpInitialStartCallback(int error) { DCHECK(loader_.get()); int64 instance_size = loader_->instance_size(); - bool partial_response = loader_->partial_response(); bool success = error == net::OK; + if (!initialize_callback_.get()) { + loader_->Stop(); + return; + } + if (success) { // TODO(hclam): Needs more thinking about supporting servers without range // request or their partial response is not complete. total_bytes_ = instance_size; loaded_ = false; - streaming_ = (instance_size == kPositionNotSpecified) || !partial_response; + streaming_ = (instance_size == kPositionNotSpecified) || + !loader_->range_supported(); } else { // TODO(hclam): In case of failure, we can retry several times. loader_->Stop(); @@ -429,85 +490,90 @@ void BufferedDataSource::HttpInitialStartCallback(int error) { return; } - // We need to prevent calling to filter host and running the callback if - // we have received the stop signal. We need to lock down the whole callback - // method to prevent bad things from happening. The reason behind this is - // that we cannot guarantee tasks on render thread have completely stopped - // when we receive the Stop() method call. The only way to solve this is to - // let tasks on render thread to run but make sure they don't call outside - // this object when Stop() method is ever called. Locking this method is safe - // because |lock_| is only acquired in tasks on render thread. - base::AutoLock auto_lock(lock_); - if (stop_signal_received_) - return; + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + // TODO: Review locking in this class and figure out a way to run the callback + // w/o the lock. + scoped_refptr<BufferedDataSource> destruction_guard(this); + { + // We need to prevent calling to filter host and running the callback if + // we have received the stop signal. We need to lock down the whole callback + // method to prevent bad things from happening. The reason behind this is + // that we cannot guarantee tasks on render thread have completely stopped + // when we receive the Stop() method call. The only way to solve this is to + // let tasks on render thread to run but make sure they don't call outside + // this object when Stop() method is ever called. Locking this method is + // safe because |lock_| is only acquired in tasks on render thread. + base::AutoLock auto_lock(lock_); + if (stop_signal_received_) + return; - if (!success) { - host()->SetError(media::PIPELINE_ERROR_NETWORK); - DoneInitialization_Locked(); - return; - } + if (!success) { + DoneInitialization_Locked(media::PIPELINE_ERROR_NETWORK); + return; + } - if (streaming_) { - // If the server didn't reply with an instance size, it is likely this - // is a streaming response. - host()->SetStreaming(true); - } else { - // This value governs the range that we can seek to. - // TODO(hclam): Report the correct value of buffered bytes. - host()->SetTotalBytes(total_bytes_); - host()->SetBufferedBytes(0); + UpdateHostState(); + DoneInitialization_Locked(media::PIPELINE_OK); } - - // Currently, only files can be used reliably w/o a network. - host()->SetLoaded(false); - DoneInitialization_Locked(); } void BufferedDataSource::NonHttpInitialStartCallback(int error) { DCHECK(MessageLoop::current() == render_loop_); DCHECK(loader_.get()); + if (!initialize_callback_.get()) { + loader_->Stop(); + return; + } + int64 instance_size = loader_->instance_size(); bool success = error == net::OK && instance_size != kPositionNotSpecified; if (success) { total_bytes_ = instance_size; + buffered_bytes_ = total_bytes_; loaded_ = true; } else { loader_->Stop(); } - // We need to prevent calling to filter host and running the callback if - // we have received the stop signal. We need to lock down the whole callback - // method to prevent bad things from happening. The reason behind this is - // that we cannot guarantee tasks on render thread have completely stopped - // when we receive the Stop() method call. The only way to solve this is to - // let tasks on render thread to run but make sure they don't call outside - // this object when Stop() method is ever called. Locking this method is safe - // because |lock_| is only acquired in tasks on render thread. - base::AutoLock auto_lock(lock_); - if (stop_signal_received_) - return; + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + // TODO: Review locking in this class and figure out a way to run the callback + // w/o the lock. + scoped_refptr<BufferedDataSource> destruction_guard(this); + { + // We need to prevent calling to filter host and running the callback if + // we have received the stop signal. We need to lock down the whole callback + // method to prevent bad things from happening. The reason behind this is + // that we cannot guarantee tasks on render thread have completely stopped + // when we receive the Stop() method call. The only way to solve this is to + // let tasks on render thread to run but make sure they don't call outside + // this object when Stop() method is ever called. Locking this method is + // safe because |lock_| is only acquired in tasks on render thread. + base::AutoLock auto_lock(lock_); + if (stop_signal_received_ || !initialize_callback_.get()) + return; - if (success) { - host()->SetTotalBytes(total_bytes_); - host()->SetBufferedBytes(total_bytes_); - host()->SetLoaded(loaded_); - } else { - host()->SetError(media::PIPELINE_ERROR_NETWORK); + if (!success) { + DoneInitialization_Locked(media::PIPELINE_ERROR_NETWORK); + return; + } + + UpdateHostState(); + DoneInitialization_Locked(media::PIPELINE_OK); } - DoneInitialization_Locked(); } void BufferedDataSource::PartialReadStartCallback(int error) { DCHECK(MessageLoop::current() == render_loop_); DCHECK(loader_.get()); - // This callback method is invoked after we have verified the server has - // range request capability, so as a safety guard verify again the response - // is partial. - if (error == net::OK && loader_->partial_response()) { - // Once the range request has started successfully, we can proceed with + if (error == net::OK) { + // Once the request has started successfully, we can proceed with // reading from it. ReadInternal(); return; @@ -562,6 +628,14 @@ void BufferedDataSource::ReadCallback(int error) { // If a position error code is received, read was successful. So copy // from intermediate read buffer to the target read buffer. memcpy(read_buffer_, intermediate_read_buffer_.get(), error); + } else if (error == 0 && total_bytes_ == kPositionNotSpecified) { + // We've reached the end of the file and we didn't know the total size + // before. Update the total size so Read()s past the end of the file will + // fail like they would if we had known the file size at the beginning. + total_bytes_ = loader_->instance_size(); + + if (host() && total_bytes_ != kPositionNotSpecified) + host()->SetTotalBytes(total_bytes_); } DoneRead_Locked(error); } @@ -596,9 +670,28 @@ void BufferedDataSource::NetworkEventCallback() { if (network_activity != network_activity_) { network_activity_ = network_activity; - host()->SetNetworkActivity(network_activity); + if (host()) + host()->SetNetworkActivity(network_activity); + } + + buffered_bytes_ = buffered_position + 1; + if (host()) + host()->SetBufferedBytes(buffered_bytes_); +} + +void BufferedDataSource::UpdateHostState() { + media::FilterHost* filter_host = host(); + if (!filter_host) + return; + + filter_host->SetLoaded(loaded_); + + if (streaming_) { + filter_host->SetStreaming(true); + } else { + filter_host->SetTotalBytes(total_bytes_); + filter_host->SetBufferedBytes(buffered_bytes_); } - host()->SetBufferedBytes(buffered_position + 1); } } // namespace webkit_glue diff --git a/webkit/glue/media/buffered_data_source.h b/webkit/glue/media/buffered_data_source.h index 895b259..933ffb9 100644 --- a/webkit/glue/media/buffered_data_source.h +++ b/webkit/glue/media/buffered_data_source.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,23 +8,29 @@ #include <string> #include "base/callback.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "base/synchronization/lock.h" +#include "media/base/filter_factories.h" +#include "media/base/filters.h" #include "webkit/glue/media/buffered_resource_loader.h" namespace webkit_glue { class BufferedDataSource : public WebDataSource { public: + // Creates a DataSourceFactory for building BufferedDataSource objects. + static media::DataSourceFactory* CreateFactory( + MessageLoop* render_loop, + WebKit::WebFrame* frame, + WebDataSourceBuildObserverHack* build_observer); + BufferedDataSource(MessageLoop* render_loop, WebKit::WebFrame* frame); virtual ~BufferedDataSource(); // media::Filter implementation. - virtual void Initialize(const std::string& url, - media::FilterCallback* callback); - virtual bool IsUrlSupported(const std::string& url); + virtual void set_host(media::FilterHost* host); virtual void Stop(media::FilterCallback* callback); virtual void SetPlaybackRate(float playback_rate); @@ -35,12 +41,16 @@ class BufferedDataSource : public WebDataSource { media::DataSource::ReadCallback* read_callback); virtual bool GetSize(int64* size_out); virtual bool IsStreaming(); + virtual void SetPreload(media::Preload preload); const media::MediaFormat& media_format() { return media_format_; } // webkit_glue::WebDataSource implementation. + virtual void Initialize(const std::string& url, + media::PipelineStatusCallback* callback); + virtual void CancelInitialize(); virtual bool HasSingleOrigin(); virtual void Abort(); @@ -82,6 +92,13 @@ class BufferedDataSource : public WebDataSource { // and signals the buffered resource loader accordingly. void SetPlaybackRateTask(float playback_rate); + // This task saves the preload value for the media. + void SetPreloadTask(media::Preload preload); + + // Decides which DeferStrategy to used based on the current state of the + // BufferedDataSource. + BufferedResourceLoader::DeferStrategy ChooseDeferStrategy(); + // The method that performs actual read. This method can only be executed on // the render thread. void ReadInternal(); @@ -90,7 +107,7 @@ class BufferedDataSource : public WebDataSource { void DoneRead_Locked(int error); // Calls |initialize_callback_| and reset it. - void DoneInitialization_Locked(); + void DoneInitialization_Locked(media::PipelineStatus status); // Callback method for |loader_| if URL for the resource requested is using // HTTP protocol. This method is called when response for initial request is @@ -116,6 +133,8 @@ class BufferedDataSource : public WebDataSource { // Callback method when a network event is received. void NetworkEventCallback(); + void UpdateHostState(); + media::MediaFormat media_format_; // URL of the resource requested. @@ -126,6 +145,7 @@ class BufferedDataSource : public WebDataSource { // member is guaranteed to happen after it is first written, so we don't // need to protect it. int64 total_bytes_; + int64 buffered_bytes_; // True if this data source is considered loaded. bool loaded_; @@ -144,7 +164,7 @@ class BufferedDataSource : public WebDataSource { bool network_activity_; // Callback method from the pipeline for initialization. - scoped_ptr<media::FilterCallback> initialize_callback_; + scoped_ptr<media::PipelineStatusCallback> initialize_callback_; // Read parameters received from the Read() method call. scoped_ptr<media::DataSource::ReadCallback> read_callback_; @@ -185,6 +205,14 @@ class BufferedDataSource : public WebDataSource { // are in a playing state. bool media_is_paused_; + // This variable is true when the user has requested the video to play at + // least once. + bool media_has_played_; + + // This variable holds the value of the preload attribute for the video + // element. + media::Preload preload_; + // This timer is to run the WatchDogTask repeatedly. We use a timer instead // of doing PostDelayedTask() reduce the extra reference held by the message // loop. The RepeatingTimer does PostDelayedTask() internally, by using it diff --git a/webkit/glue/media/buffered_data_source_unittest.cc b/webkit/glue/media/buffered_data_source_unittest.cc index 41f37d6..528a66f 100644 --- a/webkit/glue/media/buffered_data_source_unittest.cc +++ b/webkit/glue/media/buffered_data_source_unittest.cc @@ -76,7 +76,7 @@ class MockBufferedResourceLoader : public BufferedResourceLoader { net::CompletionCallback* callback)); MOCK_METHOD0(content_length, int64()); MOCK_METHOD0(instance_size, int64()); - MOCK_METHOD0(partial_response, bool()); + MOCK_METHOD0(range_supported, bool()); MOCK_METHOD0(network_activity, bool()); MOCK_METHOD0(url, const GURL&()); MOCK_METHOD0(GetBufferedFirstBytePosition, int64()); @@ -164,10 +164,14 @@ class BufferedDataSourceTest : public testing::Test { ON_CALL(*loader_, instance_size()) .WillByDefault(Return(instance_size)); - ON_CALL(*loader_, partial_response()) + + // range_supported() return true if we expect to get a partial response. + ON_CALL(*loader_, range_supported()) .WillByDefault(Return(partial_response)); + ON_CALL(*loader_, url()) .WillByDefault(ReturnRef(gurl_)); + media::PipelineStatus expected_init_status = media::PIPELINE_OK; if (initialized_ok) { // Expected loaded or not. EXPECT_CALL(host_, SetLoaded(loaded)); @@ -183,12 +187,13 @@ class BufferedDataSourceTest : public testing::Test { EXPECT_CALL(host_, SetStreaming(true)); } } else { - EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); + expected_init_status = media::PIPELINE_ERROR_NETWORK; EXPECT_CALL(*loader_, Stop()); } // Actual initialization of the data source. - data_source_->Initialize(url, media::NewExpectedCallback()); + data_source_->Initialize(url, + media::NewExpectedStatusCallback(expected_init_status)); message_loop_->RunAllPending(); if (initialized_ok) { @@ -275,7 +280,7 @@ class BufferedDataSourceTest : public testing::Test { loader_ = NULL; } - void ReadDataSourceMiss(int64 position, int size) { + void ReadDataSourceMiss(int64 position, int size, int start_error) { EXPECT_TRUE(loader_); // 1. Reply with a cache miss for the read. @@ -296,19 +301,26 @@ class BufferedDataSourceTest : public testing::Test { // 3. Then the new loader will be started. EXPECT_CALL(*new_loader, Start(NotNull(), NotNull(), NotNull())) - .WillOnce(DoAll(Assign(&error_, net::OK), + .WillOnce(DoAll(Assign(&error_, start_error), Invoke(this, &BufferedDataSourceTest::InvokeStartCallback))); - EXPECT_CALL(*new_loader, partial_response()) - .WillRepeatedly(Return(loader_->partial_response())); - // 4. Then again a read request is made to the new loader. - EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull())) - .WillOnce(DoAll(Assign(&error_, size), - Invoke(this, - &BufferedDataSourceTest::InvokeReadCallback))); + if (start_error == net::OK) { + EXPECT_CALL(*new_loader, range_supported()) + .WillRepeatedly(Return(loader_->range_supported())); - EXPECT_CALL(*this, ReadCallback(size)); + // 4a. Then again a read request is made to the new loader. + EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull())) + .WillOnce(DoAll(Assign(&error_, size), + Invoke(this, + &BufferedDataSourceTest::InvokeReadCallback))); + + EXPECT_CALL(*this, ReadCallback(size)); + } else { + // 4b. The read callback is called with an error because Start() on the + // new loader returned an error. + EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError)); + } data_source_->Read( position, size, buffer_, @@ -316,7 +328,8 @@ class BufferedDataSourceTest : public testing::Test { message_loop_->RunAllPending(); // Make sure data is correct. - EXPECT_EQ(0, memcmp(buffer_, data_ + static_cast<int>(position), size)); + if (start_error == net::OK) + EXPECT_EQ(0, memcmp(buffer_, data_ + static_cast<int>(position), size)); loader_ = new_loader; } @@ -365,8 +378,8 @@ class BufferedDataSourceTest : public testing::Test { .WillOnce(DoAll(Assign(&error_, net::OK), Invoke(this, &BufferedDataSourceTest::InvokeStartCallback))); - EXPECT_CALL(*new_loader, partial_response()) - .WillRepeatedly(Return(loader_->partial_response())); + EXPECT_CALL(*new_loader, range_supported()) + .WillRepeatedly(Return(loader_->range_supported())); // 4. Then again a read request is made to the new loader. EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull())) @@ -457,8 +470,17 @@ TEST_F(BufferedDataSourceTest, ReadCacheHit) { TEST_F(BufferedDataSourceTest, ReadCacheMiss) { InitializeDataSource(kHttpUrl, net::OK, true, 1024, LOADING); - ReadDataSourceMiss(1000, 10); - ReadDataSourceMiss(20, 10); + ReadDataSourceMiss(1000, 10, net::OK); + ReadDataSourceMiss(20, 10, net::OK); + StopDataSource(); +} + +// Test the case where the initial response from the server indicates that +// Range requests are supported, but a later request prove otherwise. +TEST_F(BufferedDataSourceTest, ServerLiesAboutRangeSupport) { + InitializeDataSource(kHttpUrl, net::OK, true, 1024, LOADING); + ReadDataSourceHit(10, 10, 10); + ReadDataSourceMiss(1000, 10, net::ERR_INVALID_RESPONSE); StopDataSource(); } diff --git a/webkit/glue/media/buffered_resource_loader.cc b/webkit/glue/media/buffered_resource_loader.cc index 4a3ae8b..8d7f1dd 100644 --- a/webkit/glue/media/buffered_resource_loader.cc +++ b/webkit/glue/media/buffered_resource_loader.cc @@ -50,10 +50,10 @@ BufferedResourceLoader::BufferedResourceLoader( int64 last_byte_position) : buffer_(new media::SeekableBuffer(kBackwardCapcity, kForwardCapacity)), deferred_(false), - defer_allowed_(true), + defer_strategy_(kReadThenDefer), completed_(false), range_requested_(false), - partial_response_(false), + range_supported_(false), url_(url), first_byte_position_(first_byte_position), last_byte_position_(last_byte_position), @@ -90,7 +90,6 @@ void BufferedResourceLoader::Start(net::CompletionCallback* start_callback, event_callback_.reset(event_callback); if (first_byte_position_ != kPositionNotSpecified) { - range_requested_ = true; // TODO(hclam): server may not support range request so |offset_| may not // equal to |first_byte_position_|. offset_ = first_byte_position_; @@ -103,10 +102,14 @@ void BufferedResourceLoader::Start(net::CompletionCallback* start_callback, // Prepare the request. WebURLRequest request(url_); request.setTargetType(WebURLRequest::TargetIsMedia); - request.setHTTPHeaderField(WebString::fromUTF8("Range"), - WebString::fromUTF8(GenerateHeaders( - first_byte_position_, - last_byte_position_))); + + if (IsRangeRequest()) { + range_requested_ = true; + request.setHTTPHeaderField(WebString::fromUTF8("Range"), + WebString::fromUTF8(GenerateHeaders( + first_byte_position_, + last_byte_position_))); + } frame->setReferrerForRequest(request, WebKit::WebURL()); // This flag is for unittests as we don't want to reset |url_loader| @@ -180,10 +183,15 @@ void BufferedResourceLoader::Read(int64 position, // If we can serve the request now, do the actual read. if (CanFulfillRead()) { ReadInternal(); - DisableDeferIfNeeded(); + UpdateDeferBehavior(); return; } + // If you're deferred and you can't fulfill the read because you don't have + // enough data, you will never fulfill the read. + // Update defer behavior to re-enable deferring if need be. + UpdateDeferBehavior(); + // If we expected the read request to be fulfilled later, returns // immediately and let more data to flow in. if (WillFulfillRead()) @@ -199,11 +207,6 @@ int64 BufferedResourceLoader::GetBufferedPosition() { return kPositionNotSpecified; } -void BufferedResourceLoader::SetAllowDefer(bool is_allowed) { - defer_allowed_ = is_allowed; - DisableDeferIfNeeded(); -} - int64 BufferedResourceLoader::content_length() { return content_length_; } @@ -212,8 +215,8 @@ int64 BufferedResourceLoader::instance_size() { return instance_size_; } -bool BufferedResourceLoader::partial_response() { - return partial_response_; +bool BufferedResourceLoader::range_supported() { + return range_supported_; } bool BufferedResourceLoader::network_activity() { @@ -244,7 +247,7 @@ void BufferedResourceLoader::willSendRequest( return; } - // Only allow |single_origin_| if we haven't seen a different origin yet. + // Only allow |single_origin_| if we haven't seen a different origin yet. if (single_origin_) single_origin_ = url_.GetOrigin() == GURL(newRequest.url()).GetOrigin(); @@ -274,6 +277,8 @@ void BufferedResourceLoader::didReceiveResponse( if (!start_callback_.get()) return; + bool partial_response = false; + // We make a strong assumption that when we reach here we have either // received a response from HTTP/HTTPS protocol or the request was // successful (in particular range request). So we only verify the partial @@ -281,13 +286,20 @@ void BufferedResourceLoader::didReceiveResponse( if (url_.SchemeIs(kHttpScheme) || url_.SchemeIs(kHttpsScheme)) { int error = net::OK; - if (response.httpStatusCode() == kHttpPartialContent) - partial_response_ = true; + // Check to see whether the server supports byte ranges. + std::string accept_ranges = + response.httpHeaderField("Accept-Ranges").utf8(); + range_supported_ = (accept_ranges.find("bytes") != std::string::npos); + + partial_response = (response.httpStatusCode() == kHttpPartialContent); - if (range_requested_ && partial_response_) { + if (range_requested_) { // If we have verified the partial response and it is correct, we will - // return net::OK. - if (!VerifyPartialResponse(response)) + // return net::OK. It's also possible for a server to support range + // requests without advertising Accept-Ranges: bytes. + if (partial_response && VerifyPartialResponse(response)) + range_supported_ = true; + else error = net::ERR_INVALID_RESPONSE; } else if (response.httpStatusCode() != kHttpOK) { // We didn't request a range but server didn't reply with "200 OK". @@ -302,7 +314,7 @@ void BufferedResourceLoader::didReceiveResponse( } else { // For any protocol other than HTTP and HTTPS, assume range request is // always fulfilled. - partial_response_ = range_requested_; + partial_response = range_requested_; } // Expected content length can be |kPositionNotSpecified|, in that case @@ -311,7 +323,7 @@ void BufferedResourceLoader::didReceiveResponse( // If we have not requested a range, then the size of the instance is equal // to the content length. - if (!partial_response_) + if (!partial_response) instance_size_ = content_length_; // Calls with a successful response. @@ -321,7 +333,8 @@ void BufferedResourceLoader::didReceiveResponse( void BufferedResourceLoader::didReceiveData( WebURLLoader* loader, const char* data, - int data_length) { + int data_length, + int encoded_data_length) { DCHECK(!completed_); DCHECK_GT(data_length, 0); @@ -334,21 +347,19 @@ void BufferedResourceLoader::didReceiveData( buffer_->Append(reinterpret_cast<const uint8*>(data), data_length); // If there is an active read request, try to fulfill the request. - if (HasPendingRead() && CanFulfillRead()) { + if (HasPendingRead() && CanFulfillRead()) ReadInternal(); - } else if (!defer_allowed_) { - // If we're not allowed to defer, slide the buffer window forward instead - // of deferring. - if (buffer_->forward_bytes() > buffer_->forward_capacity()) { - size_t excess = buffer_->forward_bytes() - buffer_->forward_capacity(); - bool success = buffer_->Seek(excess); - DCHECK(success); - offset_ += first_offset_ + excess; - } - } // At last see if the buffer is full and we need to defer the downloading. - EnableDeferIfNeeded(); + UpdateDeferBehavior(); + + // Consume excess bytes from our in-memory buffer if necessary. + if (buffer_->forward_bytes() > buffer_->forward_capacity()) { + size_t excess = buffer_->forward_bytes() - buffer_->forward_capacity(); + bool success = buffer_->Seek(excess); + DCHECK(success); + offset_ += first_offset_ + excess; + } // Notify that we have received some data. NotifyNetworkEvent(); @@ -373,6 +384,11 @@ void BufferedResourceLoader::didFinishLoading( DCHECK(!completed_); completed_ = true; + // If we didn't know the |instance_size_| we do now. + if (instance_size_ == kPositionNotSpecified) { + instance_size_ = offset_ + buffer_->forward_bytes(); + } + // If there is a start callback, calls it. if (start_callback_.get()) { DoneStart(net::OK); @@ -431,32 +447,83 @@ bool BufferedResourceLoader::HasSingleOrigin() const { ///////////////////////////////////////////////////////////////////////////// // Helper methods. -void BufferedResourceLoader::EnableDeferIfNeeded() { - if (!defer_allowed_) +void BufferedResourceLoader::UpdateDeferBehavior() { + if (!url_loader_.get() || !buffer_.get()) return; - if (!deferred_ && - buffer_->forward_bytes() >= buffer_->forward_capacity()) { - deferred_ = true; + if ((deferred_ && ShouldDisableDefer()) || + (!deferred_ && ShouldEnableDefer())) { + bool eventOccurred = ToggleDeferring(); + if (eventOccurred) + NotifyNetworkEvent(); + } +} - if (url_loader_.get()) - url_loader_->setDefersLoading(true); +void BufferedResourceLoader::UpdateDeferStrategy(DeferStrategy strategy) { + defer_strategy_ = strategy; + UpdateDeferBehavior(); +} - NotifyNetworkEvent(); +bool BufferedResourceLoader::ShouldEnableDefer() { + // If we're already deferring, then enabling makes no sense. + if (deferred_) + return false; + + switch(defer_strategy_) { + // Never defer at all, so never enable defer. + case kNeverDefer: + return false; + + // Defer if nothing is being requested. + case kReadThenDefer: + return !read_callback_.get(); + + // Defer if we've reached the max capacity of the threshold. + case kThresholdDefer: + return buffer_->forward_bytes() >= buffer_->forward_capacity(); } + // Otherwise don't enable defer. + return false; } -void BufferedResourceLoader::DisableDeferIfNeeded() { - if (deferred_ && - (!defer_allowed_ || - buffer_->forward_bytes() < buffer_->forward_capacity() / 2)) { - deferred_ = false; +bool BufferedResourceLoader::ShouldDisableDefer() { + // If we're not deferring, then disabling makes no sense. + if (!deferred_) + return false; - if (url_loader_.get()) - url_loader_->setDefersLoading(false); + switch(defer_strategy_) { + // Always disable deferring. + case kNeverDefer: + return true; + + // We have an outstanding read request, and we have not buffered enough + // yet to fulfill the request; disable defer to get more data. + case kReadThenDefer: { + size_t amount_buffered = buffer_->forward_bytes(); + size_t amount_to_read = static_cast<size_t>(read_size_); + return read_callback_.get() && amount_buffered < amount_to_read; + } - NotifyNetworkEvent(); + // We have less than half the capacity of our threshold, so + // disable defer to get more data. + case kThresholdDefer: { + size_t amount_buffered = buffer_->forward_bytes(); + size_t half_capacity = buffer_->forward_capacity() / 2; + return amount_buffered < half_capacity; + } } + + // Otherwise keep deferring. + return false; +} + +bool BufferedResourceLoader::ToggleDeferring() { + deferred_ = !deferred_; + if (url_loader_.get()) { + url_loader_->setDefersLoading(deferred_); + return true; + } + return false; } bool BufferedResourceLoader::CanFulfillRead() { @@ -579,4 +646,8 @@ void BufferedResourceLoader::NotifyNetworkEvent() { event_callback_->Run(); } +bool BufferedResourceLoader::IsRangeRequest() const { + return first_byte_position_ != kPositionNotSpecified; +} + } // namespace webkit_glue diff --git a/webkit/glue/media/buffered_resource_loader.h b/webkit/glue/media/buffered_resource_loader.h index fe01fb4..39e89d8 100644 --- a/webkit/glue/media/buffered_resource_loader.h +++ b/webkit/glue/media/buffered_resource_loader.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,7 +8,7 @@ #include <string> #include "base/callback.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "base/timer.h" #include "googleurl/src/gurl.h" #include "media/base/seekable_buffer.h" @@ -36,6 +36,15 @@ class BufferedResourceLoader : public base::RefCountedThreadSafe<BufferedResourceLoader>, public WebKit::WebURLLoaderClient { public: + // kNeverDefer - Aggresively buffer; never defer loading while paused. + // kReadThenDefer - Request only enough data to fulfill read requests. + // kThresholdDefer - Try to keep amount of buffered data at a threshold. + enum DeferStrategy { + kNeverDefer, + kReadThenDefer, + kThresholdDefer, + }; + typedef Callback0::Type NetworkEventCallback; // |url| - URL for the resource to be loaded. @@ -85,9 +94,6 @@ class BufferedResourceLoader : // |kPositionNotSpecified| if such value is not available. virtual int64 GetBufferedPosition(); - // Sets whether deferring data is allowed or disallowed. - virtual void SetAllowDefer(bool is_allowed); - // Gets the content length in bytes of the instance after this loader has been // started. If this value is |kPositionNotSpecified|, then content length is // unknown. @@ -97,9 +103,8 @@ class BufferedResourceLoader : // |kPositionNotSpecified|, then the size is unknown. virtual int64 instance_size(); - // Returns true if the response for this loader is a partial response. - // It means a 206 response in HTTP/HTTPS protocol. - virtual bool partial_response(); + // Returns true if the server supports byte range requests. + virtual bool range_supported(); // Returns true if network is currently active. virtual bool network_activity(); @@ -124,11 +129,12 @@ class BufferedResourceLoader : const WebKit::WebURLResponse& response); virtual void didDownloadData( WebKit::WebURLLoader* loader, - int dataLength); + int data_length); virtual void didReceiveData( WebKit::WebURLLoader* loader, const char* data, - int dataLength); + int data_length, + int encoded_data_length); virtual void didReceiveCachedMetadata( WebKit::WebURLLoader* loader, const char* data, int dataLength); @@ -141,19 +147,30 @@ class BufferedResourceLoader : bool HasSingleOrigin() const; + // Sets the defer strategy to the given value. + void UpdateDeferStrategy(DeferStrategy strategy); + protected: friend class base::RefCountedThreadSafe<BufferedResourceLoader>; - virtual ~BufferedResourceLoader(); private: friend class BufferedResourceLoaderTest; - // Defer the resource loading if the buffer is full. - void EnableDeferIfNeeded(); + // Toggles whether the resource loading is deferred or not. + // Returns true if a network event was fired. + bool ToggleDeferring(); - // Disable defer loading if we are under-buffered. - void DisableDeferIfNeeded(); + // Returns true if we should defer resource loading, based + // on current buffering scheme. + bool ShouldEnableDefer(); + + // Returns true if we should enable resource loading, based + // on current buffering scheme. + bool ShouldDisableDefer(); + + // Updates deferring behavior based on current buffering scheme. + void UpdateDeferBehavior(); // Returns true if the current read request can be fulfilled by what is in // the buffer. @@ -190,14 +207,17 @@ class BufferedResourceLoader : bool HasPendingRead() { return read_callback_.get() != NULL; } + // Helper function that returns true if a range request was specified. + bool IsRangeRequest() const; + // A sliding window of buffer. scoped_ptr<media::SeekableBuffer> buffer_; // True if resource loading was deferred. bool deferred_; - // True if resource loader is allowed to defer, false otherwise. - bool defer_allowed_; + // Current buffering algorithm in place for resource loading. + DeferStrategy defer_strategy_; // True if resource loading has completed. bool completed_; @@ -205,8 +225,8 @@ class BufferedResourceLoader : // True if a range request was made. bool range_requested_; - // True if response data received is a partial range. - bool partial_response_; + // True if Range header is supported. + bool range_supported_; // Does the work of loading and sends data back to this client. scoped_ptr<WebKit::WebURLLoader> url_loader_; diff --git a/webkit/glue/media/buffered_resource_loader_unittest.cc b/webkit/glue/media/buffered_resource_loader_unittest.cc index aef44ca..03fd360 100644 --- a/webkit/glue/media/buffered_resource_loader_unittest.cc +++ b/webkit/glue/media/buffered_resource_loader_unittest.cc @@ -103,7 +103,15 @@ class BufferedResourceLoaderTest : public testing::Test { } void FullResponse(int64 instance_size) { - EXPECT_CALL(*this, StartCallback(net::OK)); + FullResponse(instance_size, net::OK); + } + + void FullResponse(int64 instance_size, int status) { + EXPECT_CALL(*this, StartCallback(status)); + if (status != net::OK) { + EXPECT_CALL(*url_loader_, cancel()) + .WillOnce(RequestCanceled(loader_)); + } WebURLResponse response(gurl_); response.setHTTPHeaderField(WebString::fromUTF8("Content-Length"), @@ -112,15 +120,23 @@ class BufferedResourceLoaderTest : public testing::Test { response.setExpectedContentLength(instance_size); response.setHTTPStatusCode(kHttpOK); loader_->didReceiveResponse(url_loader_, response); - EXPECT_EQ(instance_size, loader_->content_length()); - EXPECT_EQ(instance_size, loader_->instance_size()); - EXPECT_FALSE(loader_->partial_response()); + + if (status == net::OK) { + EXPECT_EQ(instance_size, loader_->content_length()); + EXPECT_EQ(instance_size, loader_->instance_size()); + } + + EXPECT_FALSE(loader_->range_supported()); } void PartialResponse(int64 first_position, int64 last_position, int64 instance_size) { + PartialResponse(first_position, last_position, instance_size, false, true); + } + + void PartialResponse(int64 first_position, int64 last_position, + int64 instance_size, bool chunked, bool accept_ranges) { EXPECT_CALL(*this, StartCallback(net::OK)); - int64 content_length = last_position - first_position + 1; WebURLResponse response(gurl_); response.setHTTPHeaderField(WebString::fromUTF8("Content-Range"), @@ -129,12 +145,36 @@ class BufferedResourceLoaderTest : public testing::Test { first_position, last_position, instance_size))); + + // HTTP 1.1 doesn't permit Content-Length with Transfer-Encoding: chunked. + int64 content_length = -1; + if (chunked) { + response.setHTTPHeaderField(WebString::fromUTF8("Transfer-Encoding"), + WebString::fromUTF8("chunked")); + } else { + content_length = last_position - first_position + 1; + } response.setExpectedContentLength(content_length); + + // A server isn't required to return Accept-Ranges even though it might. + if (accept_ranges) { + response.setHTTPHeaderField(WebString::fromUTF8("Accept-Ranges"), + WebString::fromUTF8("bytes")); + } + response.setHTTPStatusCode(kHttpPartialContent); loader_->didReceiveResponse(url_loader_, response); + + // XXX: what's the difference between these two? For example in the chunked + // range request case, Content-Length is unspecified (because it's chunked) + // but Content-Range: a-b/c can be returned, where c == Content-Length + // + // Can we eliminate one? EXPECT_EQ(content_length, loader_->content_length()); EXPECT_EQ(instance_size, loader_->instance_size()); - EXPECT_TRUE(loader_->partial_response()); + + // A valid partial response should always result in this being true. + EXPECT_TRUE(loader_->range_supported()); } void Redirect(const char* url) { @@ -160,7 +200,9 @@ class BufferedResourceLoaderTest : public testing::Test { EXPECT_CALL(*this, NetworkCallback()) .RetiresOnSaturation(); loader_->didReceiveData(url_loader_, - reinterpret_cast<char*>(data_ + position), size); + reinterpret_cast<char*>(data_ + position), + size, + size); } // Helper method to read from |loader_|. @@ -174,18 +216,8 @@ class BufferedResourceLoaderTest : public testing::Test { EXPECT_EQ(0, memcmp(buffer, data_ + pos, size)); } - // Helper method to disallow deferring in |loader_|. - void DisallowLoaderDefer() { - if (loader_->deferred_) { - EXPECT_CALL(*url_loader_, setDefersLoading(false)); - EXPECT_CALL(*this, NetworkCallback()); - } - loader_->SetAllowDefer(false); - } - - // Helper method to allow deferring in |loader_|. - void AllowLoaderDefer() { - loader_->SetAllowDefer(true); + void ConfirmLoaderDeferredState(bool expectedVal) { + EXPECT_EQ(loader_->deferred_, expectedVal); } MOCK_METHOD1(StartCallback, void(int error)); @@ -232,8 +264,7 @@ TEST_F(BufferedResourceLoaderTest, BadHttpResponse) { TEST_F(BufferedResourceLoaderTest, NotPartialResponse) { Initialize(kHttpUrl, 100, -1); Start(); - FullResponse(1024); - StopWhenLoad(); + FullResponse(1024, net::ERR_INVALID_RESPONSE); } // Tests that a 200 response is received. @@ -252,6 +283,27 @@ TEST_F(BufferedResourceLoaderTest, PartialResponse) { StopWhenLoad(); } +TEST_F(BufferedResourceLoaderTest, PartialResponse_Chunked) { + Initialize(kHttpUrl, 100, 200); + Start(); + PartialResponse(100, 200, 1024, true, true); + StopWhenLoad(); +} + +TEST_F(BufferedResourceLoaderTest, PartialResponse_NoAcceptRanges) { + Initialize(kHttpUrl, 100, 200); + Start(); + PartialResponse(100, 200, 1024, false, false); + StopWhenLoad(); +} + +TEST_F(BufferedResourceLoaderTest, PartialResponse_ChunkedNoAcceptRanges) { + Initialize(kHttpUrl, 100, 200); + Start(); + PartialResponse(100, 200, 1024, true, false); + StopWhenLoad(); +} + // Tests that an invalid partial response is received. TEST_F(BufferedResourceLoaderTest, InvalidPartialResponse) { Initialize(kHttpUrl, 0, 10); @@ -273,6 +325,7 @@ TEST_F(BufferedResourceLoaderTest, InvalidPartialResponse) { // Tests the logic of sliding window for data buffering and reading. TEST_F(BufferedResourceLoaderTest, BufferAndRead) { Initialize(kHttpUrl, 10, 29); + loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); Start(); PartialResponse(10, 29, 30); @@ -323,6 +376,7 @@ TEST_F(BufferedResourceLoaderTest, BufferAndRead) { TEST_F(BufferedResourceLoaderTest, ReadOutsideBuffer) { Initialize(kHttpUrl, 10, 0x00FFFFFF); + loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); Start(); PartialResponse(10, 0x00FFFFFF, 0x01000000); @@ -366,128 +420,86 @@ TEST_F(BufferedResourceLoaderTest, RequestFailedWhenRead) { loader_->didFail(url_loader_, error); } -// Tests the logic of caching data to disk when media is paused. -TEST_F(BufferedResourceLoaderTest, AllowDefer_NoDataReceived) { - Initialize(kHttpUrl, 10, 99); - SetLoaderBuffer(10, 20); - Start(); - PartialResponse(10, 99, 100); - - // Start in undeferred state, then disallow defer, then allow defer - // without receiving data in between. - DisallowLoaderDefer(); - AllowLoaderDefer(); - StopWhenLoad(); -} - -TEST_F(BufferedResourceLoaderTest, AllowDefer_ReadSameWindow) { +// Tests the data buffering logic of NeverDefer strategy. +TEST_F(BufferedResourceLoaderTest, NeverDeferStrategy) { Initialize(kHttpUrl, 10, 99); SetLoaderBuffer(10, 20); + loader_->UpdateDeferStrategy(BufferedResourceLoader::kNeverDefer); Start(); PartialResponse(10, 99, 100); uint8 buffer[10]; - // Start in undeferred state, disallow defer, receive data but don't shift - // buffer window, then allow defer and read. - DisallowLoaderDefer(); - WriteLoader(10, 10); - AllowLoaderDefer(); - - EXPECT_CALL(*this, ReadCallback(10)); - ReadLoader(10, 10, buffer); - VerifyBuffer(buffer, 10, 10); - StopWhenLoad(); -} - -TEST_F(BufferedResourceLoaderTest, AllowDefer_ReadPastWindow) { - Initialize(kHttpUrl, 10, 99); - SetLoaderBuffer(10, 20); - Start(); - PartialResponse(10, 99, 100); - - uint8 buffer[10]; - - // Not deferred, disallow defer, received data and shift buffer window, - // allow defer, then read in area outside of buffer window. - DisallowLoaderDefer(); + // Read past the buffer size; should not defer regardless. WriteLoader(10, 10); WriteLoader(20, 50); - AllowLoaderDefer(); + ConfirmLoaderDeferredState(false); + // Should move past window. EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); ReadLoader(10, 10, buffer); + StopWhenLoad(); } -TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredNoDataReceived) { +// Tests the data buffering logic of ReadThenDefer strategy. +TEST_F(BufferedResourceLoaderTest, ReadThenDeferStrategy) { Initialize(kHttpUrl, 10, 99); SetLoaderBuffer(10, 20); + loader_->UpdateDeferStrategy(BufferedResourceLoader::kReadThenDefer); Start(); PartialResponse(10, 99, 100); uint8 buffer[10]; - // Start in deferred state, then disallow defer, receive no data, and - // allow defer and read. - EXPECT_CALL(*url_loader_, setDefersLoading(true)); + // Make an outstanding read request. + // We should disable deferring after the read request, so expect + // a network event. EXPECT_CALL(*this, NetworkCallback()); - WriteLoader(10, 40); - - DisallowLoaderDefer(); - AllowLoaderDefer(); - - EXPECT_CALL(*this, ReadCallback(10)); - ReadLoader(20, 10, buffer); - VerifyBuffer(buffer, 20, 10); - StopWhenLoad(); -} - -TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadSameWindow) { - Initialize(kHttpUrl, 10, 99); - SetLoaderBuffer(10, 20); - Start(); - PartialResponse(10, 99, 100); + ReadLoader(10, 10, buffer); - uint8 buffer[10]; + // Receive almost enough data to cover, shouldn't defer. + WriteLoader(10, 9); + ConfirmLoaderDeferredState(false); - // Start in deferred state, disallow defer, receive data and shift buffer - // window, allow defer, and read in a place that's still in the window. - EXPECT_CALL(*url_loader_, setDefersLoading(true)); + // As soon as we have received enough data to fulfill the read, defer. EXPECT_CALL(*this, NetworkCallback()); - WriteLoader(10, 30); + EXPECT_CALL(*this, ReadCallback(10)); + WriteLoader(19, 1); - DisallowLoaderDefer(); - WriteLoader(40, 5); - AllowLoaderDefer(); + ConfirmLoaderDeferredState(true); + VerifyBuffer(buffer, 10, 10); - EXPECT_CALL(*this, ReadCallback(10)); - ReadLoader(20, 10, buffer); - VerifyBuffer(buffer, 20, 10); StopWhenLoad(); } -TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadPastWindow) { +// Tests the data buffering logic of ThresholdDefer strategy. +TEST_F(BufferedResourceLoaderTest, ThresholdDeferStrategy) { Initialize(kHttpUrl, 10, 99); SetLoaderBuffer(10, 20); + loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); Start(); PartialResponse(10, 99, 100); uint8 buffer[10]; - // Start in deferred state, disallow defer, receive data and shift buffer - // window, allow defer, and read outside of the buffer window. - EXPECT_CALL(*url_loader_, setDefersLoading(true)); + WriteLoader(10, 5); + // Haven't reached threshold, don't defer. + ConfirmLoaderDeferredState(false); + + // We're at the threshold now, let's defer. EXPECT_CALL(*this, NetworkCallback()); - WriteLoader(10, 40); + WriteLoader(15, 5); + ConfirmLoaderDeferredState(true); - DisallowLoaderDefer(); - WriteLoader(50, 20); - WriteLoader(70, 40); - AllowLoaderDefer(); + // Now we've read over half of the buffer, disable deferring. + EXPECT_CALL(*this, ReadCallback(6)); + EXPECT_CALL(*this, NetworkCallback()); + ReadLoader(10, 6, buffer); + + ConfirmLoaderDeferredState(false); + VerifyBuffer(buffer, 10, 6); - EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); - ReadLoader(20, 5, buffer); StopWhenLoad(); } diff --git a/webkit/glue/media/simple_data_source.cc b/webkit/glue/media/simple_data_source.cc index 5c3eb18..6647e52 100644 --- a/webkit/glue/media/simple_data_source.cc +++ b/webkit/glue/media/simple_data_source.cc @@ -12,12 +12,27 @@ #include "net/url_request/url_request_status.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebKitClient.h" +#include "webkit/glue/media/web_data_source_factory.h" #include "webkit/glue/webkit_glue.h" namespace webkit_glue { static const char kDataScheme[] = "data"; +static WebDataSource* NewSimpleDataSource(MessageLoop* render_loop, + WebKit::WebFrame* frame) { + return new SimpleDataSource(render_loop, frame); +} + +// static +media::DataSourceFactory* SimpleDataSource::CreateFactory( + MessageLoop* render_loop, + WebKit::WebFrame* frame, + WebDataSourceBuildObserverHack* build_observer) { + return new WebDataSourceFactory(render_loop, frame, &NewSimpleDataSource, + build_observer); +} + SimpleDataSource::SimpleDataSource( MessageLoop* render_loop, WebKit::WebFrame* frame) @@ -35,6 +50,15 @@ SimpleDataSource::~SimpleDataSource() { DCHECK(state_ == UNINITIALIZED || state_ == STOPPED); } +void SimpleDataSource::set_host(media::FilterHost* host) { + DataSource::set_host(host); + + base::AutoLock auto_lock(lock_); + if (state_ == INITIALIZED) { + UpdateHostState(); + } +} + void SimpleDataSource::Stop(media::FilterCallback* callback) { base::AutoLock auto_lock(lock_); state_ = STOPPED; @@ -48,26 +72,42 @@ void SimpleDataSource::Stop(media::FilterCallback* callback) { NewRunnableMethod(this, &SimpleDataSource::CancelTask)); } -void SimpleDataSource::Initialize(const std::string& url, - media::FilterCallback* callback) { - base::AutoLock auto_lock(lock_); - DCHECK_EQ(state_, UNINITIALIZED); - DCHECK(callback); - state_ = INITIALIZING; - initialize_callback_.reset(callback); - - // Validate the URL. - SetURL(GURL(url)); - if (!url_.is_valid() || !IsProtocolSupportedForMedia(url_)) { - host()->SetError(media::PIPELINE_ERROR_NETWORK); - initialize_callback_->Run(); - initialize_callback_.reset(); - return; +void SimpleDataSource::Initialize( + const std::string& url, + media::PipelineStatusCallback* callback) { + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + scoped_refptr<SimpleDataSource> destruction_guard(this); + { + base::AutoLock auto_lock(lock_); + DCHECK_EQ(state_, UNINITIALIZED); + DCHECK(callback); + state_ = INITIALIZING; + initialize_callback_.reset(callback); + + // Validate the URL. + SetURL(GURL(url)); + if (!url_.is_valid() || !IsProtocolSupportedForMedia(url_)) { + DoneInitialization_Locked(false); + return; + } + + // Post a task to the render thread to start loading the resource. + render_loop_->PostTask(FROM_HERE, + NewRunnableMethod(this, &SimpleDataSource::StartTask)); } +} - // Post a task to the render thread to start loading the resource. +void SimpleDataSource::CancelInitialize() { + base::AutoLock auto_lock(lock_); + DCHECK(initialize_callback_.get()); + state_ = STOPPED; + initialize_callback_.reset(); + + // Post a task to the render thread to cancel loading the resource. render_loop_->PostTask(FROM_HERE, - NewRunnableMethod(this, &SimpleDataSource::StartTask)); + NewRunnableMethod(this, &SimpleDataSource::CancelTask)); } const media::MediaFormat& SimpleDataSource::media_format() { @@ -99,6 +139,8 @@ bool SimpleDataSource::IsStreaming() { return false; } +void SimpleDataSource::SetPreload(media::Preload preload) {} + void SimpleDataSource::SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader) { url_loader_.reset(mock_loader); keep_test_loader_ = true; @@ -141,7 +183,8 @@ void SimpleDataSource::didDownloadData( void SimpleDataSource::didReceiveData( WebKit::WebURLLoader* loader, const char* data, - int data_length) { + int data_length, + int encoded_data_length) { DCHECK(MessageLoop::current() == render_loop_); data_.append(data, data_length); } @@ -157,44 +200,56 @@ void SimpleDataSource::didFinishLoading( WebKit::WebURLLoader* loader, double finishTime) { DCHECK(MessageLoop::current() == render_loop_); - base::AutoLock auto_lock(lock_); - // It's possible this gets called after Stop(), in which case |host_| is no - // longer valid. - if (state_ == STOPPED) - return; - - // Otherwise we should be initializing and have created a WebURLLoader. - DCHECK_EQ(state_, INITIALIZING); - - // If we don't get a content length or the request has failed, report it - // as a network error. - if (size_ == -1) - size_ = data_.length(); - DCHECK(static_cast<size_t>(size_) == data_.length()); - - DoneInitialization_Locked(true); + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + scoped_refptr<SimpleDataSource> destruction_guard(this); + { + base::AutoLock auto_lock(lock_); + // It's possible this gets called after Stop(), in which case |host_| is no + // longer valid. + if (state_ == STOPPED) + return; + + // Otherwise we should be initializing and have created a WebURLLoader. + DCHECK_EQ(state_, INITIALIZING); + + // If we don't get a content length or the request has failed, report it + // as a network error. + if (size_ == -1) + size_ = data_.length(); + DCHECK(static_cast<size_t>(size_) == data_.length()); + + DoneInitialization_Locked(true); + } } void SimpleDataSource::didFail( WebKit::WebURLLoader* loader, const WebKit::WebURLError& error) { DCHECK(MessageLoop::current() == render_loop_); - base::AutoLock auto_lock(lock_); - // It's possible this gets called after Stop(), in which case |host_| is no - // longer valid. - if (state_ == STOPPED) - return; - - // Otherwise we should be initializing and have created a WebURLLoader. - DCHECK_EQ(state_, INITIALIZING); - - // If we don't get a content length or the request has failed, report it - // as a network error. - if (size_ == -1) - size_ = data_.length(); - DCHECK(static_cast<size_t>(size_) == data_.length()); - - DoneInitialization_Locked(false); + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + scoped_refptr<SimpleDataSource> destruction_guard(this); + { + base::AutoLock auto_lock(lock_); + // It's possible this gets called after Stop(), in which case |host_| is no + // longer valid. + if (state_ == STOPPED) + return; + + // Otherwise we should be initializing and have created a WebURLLoader. + DCHECK_EQ(state_, INITIALIZING); + + // If we don't get a content length or the request has failed, report it + // as a network error. + if (size_ == -1) + size_ = data_.length(); + DCHECK(static_cast<size_t>(size_) == data_.length()); + + DoneInitialization_Locked(false); + } } bool SimpleDataSource::HasSingleOrigin() { @@ -210,44 +265,48 @@ void SimpleDataSource::Abort() { void SimpleDataSource::SetURL(const GURL& url) { url_ = url; media_format_.Clear(); - media_format_.SetAsString(media::MediaFormat::kMimeType, - media::mime_type::kApplicationOctetStream); media_format_.SetAsString(media::MediaFormat::kURL, url.spec()); } void SimpleDataSource::StartTask() { DCHECK(MessageLoop::current() == render_loop_); - base::AutoLock auto_lock(lock_); - - // We may have stopped. - if (state_ == STOPPED) - return; - - CHECK(frame_); - - DCHECK_EQ(state_, INITIALIZING); - - if (url_.SchemeIs(kDataScheme)) { - // If this using data protocol, we just need to decode it. - std::string mime_type, charset; - bool success = net::DataURL::Parse(url_, &mime_type, &charset, &data_); - - // Don't care about the mime-type just proceed if decoding was successful. - size_ = data_.length(); - DoneInitialization_Locked(success); - } else { - // Prepare the request. - WebKit::WebURLRequest request(url_); - request.setTargetType(WebKit::WebURLRequest::TargetIsMedia); - - frame_->setReferrerForRequest(request, WebKit::WebURL()); - - // This flag is for unittests as we don't want to reset |url_loader| - if (!keep_test_loader_) - url_loader_.reset(frame_->createAssociatedURLLoader()); - - // Start the resource loading. - url_loader_->loadAsynchronously(request, this); + // Reference to prevent destruction while inside the |initialize_callback_| + // call. This is a temporary fix to prevent crashes caused by holding the + // lock and running the destructor. + scoped_refptr<SimpleDataSource> destruction_guard(this); + { + base::AutoLock auto_lock(lock_); + + // We may have stopped. + if (state_ == STOPPED) + return; + + CHECK(frame_); + + DCHECK_EQ(state_, INITIALIZING); + + if (url_.SchemeIs(kDataScheme)) { + // If this using data protocol, we just need to decode it. + std::string mime_type, charset; + bool success = net::DataURL::Parse(url_, &mime_type, &charset, &data_); + + // Don't care about the mime-type just proceed if decoding was successful. + size_ = data_.length(); + DoneInitialization_Locked(success); + } else { + // Prepare the request. + WebKit::WebURLRequest request(url_); + request.setTargetType(WebKit::WebURLRequest::TargetIsMedia); + + frame_->setReferrerForRequest(request, WebKit::WebURL()); + + // This flag is for unittests as we don't want to reset |url_loader| + if (!keep_test_loader_) + url_loader_.reset(frame_->createAssociatedURLLoader()); + + // Start the resource loading. + url_loader_->loadAsynchronously(request, this); + } } } @@ -265,17 +324,29 @@ void SimpleDataSource::CancelTask() { void SimpleDataSource::DoneInitialization_Locked(bool success) { lock_.AssertAcquired(); + media::PipelineStatus status = media::PIPELINE_ERROR_NETWORK; if (success) { state_ = INITIALIZED; + + UpdateHostState(); + status = media::PIPELINE_OK; + } else { + state_ = UNINITIALIZED; + url_loader_.reset(); + } + + scoped_ptr<media::PipelineStatusCallback> initialize_callback( + initialize_callback_.release()); + initialize_callback->Run(status); +} + +void SimpleDataSource::UpdateHostState() { + if (host()) { host()->SetTotalBytes(size_); host()->SetBufferedBytes(size_); // If scheme is file or data, say we are loaded. host()->SetLoaded(url_.SchemeIsFile() || url_.SchemeIs(kDataScheme)); - } else { - host()->SetError(media::PIPELINE_ERROR_NETWORK); } - initialize_callback_->Run(); - initialize_callback_.reset(); } } // namespace webkit_glue diff --git a/webkit/glue/media/simple_data_source.h b/webkit/glue/media/simple_data_source.h index 10d93ff..2c4075a 100644 --- a/webkit/glue/media/simple_data_source.h +++ b/webkit/glue/media/simple_data_source.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -13,8 +13,9 @@ #include <algorithm> #include <string> +#include "base/memory/scoped_ptr.h" #include "base/message_loop.h" -#include "base/scoped_ptr.h" +#include "media/base/filter_factories.h" #include "media/base/filters.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" @@ -31,20 +32,26 @@ namespace webkit_glue { class SimpleDataSource : public WebDataSource, public WebKit::WebURLLoaderClient { public: + // Creates a DataSourceFactory for building SimpleDataSource objects. + static media::DataSourceFactory* CreateFactory( + MessageLoop* render_loop, + WebKit::WebFrame* frame, + WebDataSourceBuildObserverHack* build_observer); + SimpleDataSource(MessageLoop* render_loop, WebKit::WebFrame* frame); virtual ~SimpleDataSource(); // media::Filter implementation. + virtual void set_host(media::FilterHost* host); virtual void Stop(media::FilterCallback* callback); // media::DataSource implementation. - virtual void Initialize(const std::string& url, - media::FilterCallback* callback); virtual const media::MediaFormat& media_format(); virtual void Read(int64 position, size_t size, uint8* data, ReadCallback* read_callback); virtual bool GetSize(int64* size_out); virtual bool IsStreaming(); + virtual void SetPreload(media::Preload preload); // Used to inject a mock used for unittests. virtual void SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader); @@ -67,7 +74,8 @@ class SimpleDataSource : public WebDataSource, virtual void didReceiveData( WebKit::WebURLLoader* loader, const char* data, - int dataLength); + int dataLength, + int encodedDataLength); virtual void didReceiveCachedMetadata( WebKit::WebURLLoader* loader, const char* data, int dataLength); @@ -79,6 +87,9 @@ class SimpleDataSource : public WebDataSource, const WebKit::WebURLError&); // webkit_glue::WebDataSource implementation. + virtual void Initialize(const std::string& url, + media::PipelineStatusCallback* callback); + virtual void CancelInitialize(); virtual bool HasSingleOrigin(); virtual void Abort(); @@ -95,6 +106,9 @@ class SimpleDataSource : public WebDataSource, // Perform initialization completion tasks under a lock. void DoneInitialization_Locked(bool success); + // Update host() stats like total bytes & buffered bytes. + void UpdateHostState(); + // Primarily used for asserting the bridge is loading on the render thread. MessageLoop* render_loop_; @@ -123,7 +137,7 @@ class SimpleDataSource : public WebDataSource, base::Lock lock_; // Filter callbacks. - scoped_ptr<media::FilterCallback> initialize_callback_; + scoped_ptr<media::PipelineStatusCallback> initialize_callback_; // Used to ensure mocks for unittests are used instead of reset in Start(). bool keep_test_loader_; diff --git a/webkit/glue/media/simple_data_source_unittest.cc b/webkit/glue/media/simple_data_source_unittest.cc index 977807b..61e41f2 100644 --- a/webkit/glue/media/simple_data_source_unittest.cc +++ b/webkit/glue/media/simple_data_source_unittest.cc @@ -59,7 +59,7 @@ class SimpleDataSourceTest : public testing::Test { } void InitializeDataSource(const char* url, - media::MockCallback* callback) { + media::MockStatusCallback* callback) { gurl_ = GURL(url); frame_.reset(new NiceMock<MockWebFrame>()); @@ -86,7 +86,7 @@ class SimpleDataSourceTest : public testing::Test { EXPECT_EQ(kDataSize, size); for (int i = 0; i < kDataSize; ++i) { - data_source_->didReceiveData(NULL, data_ + i, 1); + data_source_->didReceiveData(NULL, data_ + i, 1, 1); } EXPECT_CALL(host_, SetLoaded(is_loaded)); @@ -103,7 +103,6 @@ class SimpleDataSourceTest : public testing::Test { void RequestFailed() { InSequence s; - EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); WebURLError error; error.reason = net::ERR_FAILED; @@ -158,19 +157,22 @@ class SimpleDataSourceTest : public testing::Test { }; TEST_F(SimpleDataSourceTest, InitializeHTTP) { - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); RequestSucceeded(false); DestroyDataSource(); } TEST_F(SimpleDataSourceTest, InitializeHTTPS) { - InitializeDataSource(kHttpsUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpsUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); RequestSucceeded(false); DestroyDataSource(); } TEST_F(SimpleDataSourceTest, InitializeFile) { - InitializeDataSource(kFileUrl, media::NewExpectedCallback()); + InitializeDataSource(kFileUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); RequestSucceeded(true); DestroyDataSource(); } @@ -181,8 +183,6 @@ TEST_F(SimpleDataSourceTest, InitializeData) { data_source_ = new SimpleDataSource(MessageLoop::current(), frame_.get()); - EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl)); - // There is no need to provide a message loop to data source. data_source_->set_host(&host_); data_source_->SetURLLoaderForTest(url_loader_); @@ -191,14 +191,16 @@ TEST_F(SimpleDataSourceTest, InitializeData) { EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); - data_source_->Initialize(kDataUrl, media::NewExpectedCallback()); + data_source_->Initialize(kDataUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); MessageLoop::current()->RunAllPending(); DestroyDataSource(); } TEST_F(SimpleDataSourceTest, RequestFailed) { - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_ERROR_NETWORK)); RequestFailed(); DestroyDataSource(); } @@ -206,8 +208,8 @@ TEST_F(SimpleDataSourceTest, RequestFailed) { TEST_F(SimpleDataSourceTest, StopWhenDownloading) { // The callback should be deleted, but not executed. // TODO(scherkus): should this really be the behaviour? Seems strange... - StrictMock<media::MockCallback>* callback = - new StrictMock<media::MockCallback>(); + StrictMock<media::MockStatusCallback>* callback = + new StrictMock<media::MockStatusCallback>(); EXPECT_CALL(*callback, Destructor()); InitializeDataSource(kHttpUrl, callback); @@ -217,7 +219,8 @@ TEST_F(SimpleDataSourceTest, StopWhenDownloading) { } TEST_F(SimpleDataSourceTest, AsyncRead) { - InitializeDataSource(kFileUrl, media::NewExpectedCallback()); + InitializeDataSource(kFileUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); RequestSucceeded(true); AsyncRead(); DestroyDataSource(); @@ -228,20 +231,23 @@ TEST_F(SimpleDataSourceTest, AsyncRead) { // is fixed. TEST_F(SimpleDataSourceTest, HasSingleOrigin) { // Make sure no redirect case works as expected. - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); RequestSucceeded(false); EXPECT_TRUE(data_source_->HasSingleOrigin()); DestroyDataSource(); // Test redirect to the same domain. - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); Redirect(kHttpRedirectToSameDomainUrl1); RequestSucceeded(false); EXPECT_TRUE(data_source_->HasSingleOrigin()); DestroyDataSource(); // Test redirect twice to the same domain. - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); Redirect(kHttpRedirectToSameDomainUrl1); Redirect(kHttpRedirectToSameDomainUrl2); RequestSucceeded(false); @@ -249,14 +255,16 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) { DestroyDataSource(); // Test redirect to a different domain. - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); Redirect(kHttpRedirectToDifferentDomainUrl1); RequestSucceeded(false); EXPECT_FALSE(data_source_->HasSingleOrigin()); DestroyDataSource(); // Test redirect to the same domain and then to a different domain. - InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); + InitializeDataSource(kHttpUrl, + media::NewExpectedStatusCallback(media::PIPELINE_OK)); Redirect(kHttpRedirectToSameDomainUrl1); Redirect(kHttpRedirectToDifferentDomainUrl1); RequestSucceeded(false); diff --git a/webkit/glue/media/video_renderer_impl.cc b/webkit/glue/media/video_renderer_impl.cc index 3bbd626..5e159fe 100644 --- a/webkit/glue/media/video_renderer_impl.cc +++ b/webkit/glue/media/video_renderer_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -49,7 +49,7 @@ void VideoRendererImpl::SetRect(const gfx::Rect& rect) { } // This method is always called on the renderer's thread. -void VideoRendererImpl::Paint(skia::PlatformCanvas* canvas, +void VideoRendererImpl::Paint(SkCanvas* canvas, const gfx::Rect& dest_rect) { scoped_refptr<media::VideoFrame> video_frame; GetCurrentFrame(&video_frame); @@ -98,7 +98,7 @@ void VideoRendererImpl::PutCurrentFrame( // 4. Canvas is opaque. // TODO(hclam): The fast paint method should support flipping and mirroring. // Disable the flipping and mirroring checks once we have it. -bool VideoRendererImpl::CanFastPaint(skia::PlatformCanvas* canvas, +bool VideoRendererImpl::CanFastPaint(SkCanvas* canvas, const gfx::Rect& dest_rect) { // Fast paint does not handle opacity value other than 1.0. Hence use slow // paint if opacity is not 1.0. Since alpha = opacity * 0xFF, we check that @@ -152,7 +152,7 @@ bool VideoRendererImpl::CanFastPaint(skia::PlatformCanvas* canvas, } void VideoRendererImpl::SlowPaint(media::VideoFrame* video_frame, - skia::PlatformCanvas* canvas, + SkCanvas* canvas, const gfx::Rect& dest_rect) { // 1. Convert YUV frame to RGB. base::TimeDelta timestamp = video_frame->GetTimestamp(); @@ -199,7 +199,7 @@ void VideoRendererImpl::SlowPaint(media::VideoFrame* video_frame, } void VideoRendererImpl::FastPaint(media::VideoFrame* video_frame, - skia::PlatformCanvas* canvas, + SkCanvas* canvas, const gfx::Rect& dest_rect) { DCHECK(video_frame->format() == media::VideoFrame::YV12 || video_frame->format() == media::VideoFrame::YV16); diff --git a/webkit/glue/media/video_renderer_impl.h b/webkit/glue/media/video_renderer_impl.h index b73c099..b14038b 100644 --- a/webkit/glue/media/video_renderer_impl.h +++ b/webkit/glue/media/video_renderer_impl.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -30,7 +30,7 @@ class VideoRendererImpl : public WebVideoRenderer { // WebVideoRenderer implementation. virtual void SetWebMediaPlayerImplProxy(WebMediaPlayerImpl::Proxy* proxy); virtual void SetRect(const gfx::Rect& rect); - virtual void Paint(skia::PlatformCanvas* canvas, const gfx::Rect& dest_rect); + virtual void Paint(SkCanvas* canvas, const gfx::Rect& dest_rect); virtual void GetCurrentFrame(scoped_refptr<media::VideoFrame>* frame_out); virtual void PutCurrentFrame(scoped_refptr<media::VideoFrame> frame); @@ -47,18 +47,18 @@ class VideoRendererImpl : public WebVideoRenderer { private: // Determine the conditions to perform fast paint. Returns true if we can do // fast paint otherwise false. - bool CanFastPaint(skia::PlatformCanvas* canvas, const gfx::Rect& dest_rect); + bool CanFastPaint(SkCanvas* canvas, const gfx::Rect& dest_rect); // Slow paint does a YUV => RGB, and scaled blit in two separate operations. void SlowPaint(media::VideoFrame* video_frame, - skia::PlatformCanvas* canvas, + SkCanvas* canvas, const gfx::Rect& dest_rect); // Fast paint does YUV => RGB, scaling, blitting all in one step into the // canvas. It's not always safe and appropriate to perform fast paint. // CanFastPaint() is used to determine the conditions. void FastPaint(media::VideoFrame* video_frame, - skia::PlatformCanvas* canvas, + SkCanvas* canvas, const gfx::Rect& dest_rect); void TransformToSkIRect(const SkMatrix& matrix, const gfx::Rect& src_rect, diff --git a/webkit/glue/media/web_data_source.h b/webkit/glue/media/web_data_source.h index 956ac9e..25f1258 100644 --- a/webkit/glue/media/web_data_source.h +++ b/webkit/glue/media/web_data_source.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,6 +6,7 @@ #define WEBKIT_GLUE_MEDIA_WEB_DATA_SOURCE_H_ #include "media/base/filters.h" +#include "media/base/pipeline_status.h" namespace webkit_glue { @@ -16,6 +17,18 @@ class WebDataSource : public media::DataSource { WebDataSource(); virtual ~WebDataSource(); + // Initialize this object using |url|. This object calls |callback| when + // initialization has completed. + virtual void Initialize(const std::string& url, + media::PipelineStatusCallback* callback) = 0; + + // Called to cancel initialization. The callback passed in Initialize() will + // be destroyed and will not be called after this method returns. Once this + // method returns, the object will be in an uninitialized state and + // Initialize() cannot be called again. The caller is expected to release + // its handle to this object and never call it again. + virtual void CancelInitialize() = 0; + // Returns true if the media resource has a single origin, false otherwise. // // Method called on the render thread. @@ -31,6 +44,15 @@ class WebDataSource : public media::DataSource { DISALLOW_COPY_AND_ASSIGN(WebDataSource); }; +// Temporary hack to allow WebMediaPlayerImpl::Proxy::AddDataSource() to +// be called when WebDataSource objects are created. This can be removed +// once WebMediaPlayerImpl::Proxy is fixed so it doesn't have to track +// WebDataSources. Proxy only has to track WebDataSources so it can call Abort() +// on them at shutdown. Once cancellation is added to DataSource and pause +// support in Demuxers cancel pending reads, Proxy shouldn't have to keep +// a WebDataSource list or call Abort(). +typedef Callback1<WebDataSource*>::Type WebDataSourceBuildObserverHack; + } // namespace webkit_glue #endif // WEBKIT_GLUE_MEDIA_WEB_DATA_SOURCE_H_ diff --git a/webkit/glue/media/web_data_source_factory.cc b/webkit/glue/media/web_data_source_factory.cc new file mode 100644 index 0000000..d98e2da --- /dev/null +++ b/webkit/glue/media/web_data_source_factory.cc @@ -0,0 +1,103 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "webkit/glue/media/web_data_source_factory.h" + +#include "base/logging.h" + +namespace webkit_glue { + +class WebDataSourceFactory::BuildRequest + : public media::AsyncDataSourceFactoryBase::BuildRequest { + public: + BuildRequest(const std::string& url, BuildCallback* callback, + WebDataSource* data_source, + WebDataSourceBuildObserverHack* build_observer); + virtual ~BuildRequest(); + + protected: + // AsyncDataSourceFactoryBase::BuildRequest method. + virtual void DoStart(); + + private: + void InitDone(media::PipelineStatus status); + + scoped_refptr<WebDataSource> data_source_; + WebDataSourceBuildObserverHack* build_observer_; + + DISALLOW_COPY_AND_ASSIGN(BuildRequest); +}; + +WebDataSourceFactory::WebDataSourceFactory( + MessageLoop* render_loop, + WebKit::WebFrame* frame, + FactoryFunction factory_function, + WebDataSourceBuildObserverHack* build_observer) + : render_loop_(render_loop), + frame_(frame), + factory_function_(factory_function), + build_observer_(build_observer) { + DCHECK(render_loop_); + DCHECK(frame_); + DCHECK(factory_function_); +} + +WebDataSourceFactory::~WebDataSourceFactory() {} + +media::DataSourceFactory* WebDataSourceFactory::Clone() const { + return new WebDataSourceFactory(render_loop_, frame_, factory_function_, + build_observer_); +} + +bool WebDataSourceFactory::AllowRequests() const { + return true; +} + +media::AsyncDataSourceFactoryBase::BuildRequest* +WebDataSourceFactory::CreateRequest(const std::string& url, + BuildCallback* callback) { + WebDataSource* data_source = factory_function_(render_loop_, frame_); + + return new WebDataSourceFactory::BuildRequest(url, callback, data_source, + build_observer_); +} + +WebDataSourceFactory::BuildRequest::BuildRequest( + const std::string& url, + BuildCallback* callback, + WebDataSource* data_source, + WebDataSourceBuildObserverHack* build_observer) + : AsyncDataSourceFactoryBase::BuildRequest(url, callback), + data_source_(data_source), + build_observer_(build_observer) { +} + +WebDataSourceFactory::BuildRequest::~BuildRequest() { + if (data_source_.get()) { + data_source_->CancelInitialize(); + data_source_ = NULL; + } +} + +void WebDataSourceFactory::BuildRequest::DoStart() { + data_source_->Initialize(url(), NewCallback(this, &BuildRequest::InitDone)); +} + +void WebDataSourceFactory::BuildRequest::InitDone( + media::PipelineStatus status) { + scoped_refptr<WebDataSource> data_source; + + data_source = (status == media::PIPELINE_OK) ? data_source_ : NULL; + data_source_ = NULL; + + if (build_observer_ && data_source.get()) { + build_observer_->Run(data_source.get()); + } + + RequestComplete(status, data_source); + // Don't do anything after this line. This object is deleted by + // RequestComplete(). +} + +} // namespace webkit_glue diff --git a/webkit/glue/media/web_data_source_factory.h b/webkit/glue/media/web_data_source_factory.h new file mode 100644 index 0000000..7163ef4 --- /dev/null +++ b/webkit/glue/media/web_data_source_factory.h @@ -0,0 +1,51 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEBKIT_GLUE_MEDIA_BUFFERED_DATA_SOURCE_FACTORY_H_ +#define WEBKIT_GLUE_MEDIA_BUFFERED_DATA_SOURCE_FACTORY_H_ + +#include "media/base/async_filter_factory_base.h" +#include "webkit/glue/media/web_data_source.h" + +class MessageLoop; + +namespace WebKit { +class WebFrame; +} + +namespace webkit_glue { + +class WebDataSourceFactory : public media::AsyncDataSourceFactoryBase { + public: + typedef WebDataSource* (*FactoryFunction)(MessageLoop* render_loop, + WebKit::WebFrame* frame); + + WebDataSourceFactory(MessageLoop* render_loop, WebKit::WebFrame* frame, + FactoryFunction factory_function, + WebDataSourceBuildObserverHack* build_observer); + virtual ~WebDataSourceFactory(); + + // DataSourceFactory method. + virtual media::DataSourceFactory* Clone() const; + + protected: + // AsyncDataSourceFactoryBase methods. + virtual bool AllowRequests() const; + virtual AsyncDataSourceFactoryBase::BuildRequest* CreateRequest( + const std::string& url, BuildCallback* callback); + + private: + class BuildRequest; + + MessageLoop* render_loop_; + WebKit::WebFrame* frame_; + FactoryFunction factory_function_; + WebDataSourceBuildObserverHack* build_observer_; + + DISALLOW_COPY_AND_ASSIGN(WebDataSourceFactory); +}; + +} // namespace webkit_glue + +#endif // WEBKIT_GLUE_MEDIA_BUFFERED_DATA_SOURCE_FACTORY_H_ diff --git a/webkit/glue/media/web_video_renderer.h b/webkit/glue/media/web_video_renderer.h index efd3109..9e1eed5 100644 --- a/webkit/glue/media/web_video_renderer.h +++ b/webkit/glue/media/web_video_renderer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -32,7 +32,7 @@ class WebVideoRenderer : public media::VideoRendererBase { // |dest_rect|. // // Method called on the render thread. - virtual void Paint(skia::PlatformCanvas* canvas, + virtual void Paint(SkCanvas* canvas, const gfx::Rect& dest_rect) = 0; // Clients of this class (painter/compositor) should use GetCurrentFrame() diff --git a/webkit/glue/multipart_response_delegate.cc b/webkit/glue/multipart_response_delegate.cc index d2c47d7..3a4f053 100644 --- a/webkit/glue/multipart_response_delegate.cc +++ b/webkit/glue/multipart_response_delegate.cc @@ -62,6 +62,7 @@ MultipartResponseDelegate::MultipartResponseDelegate( : client_(client), loader_(loader), original_response_(response), + encoded_data_length_(0), boundary_("--"), first_received_data_(true), processing_headers_(false), @@ -76,7 +77,8 @@ MultipartResponseDelegate::MultipartResponseDelegate( } void MultipartResponseDelegate::OnReceivedData(const char* data, - int data_len) { + int data_len, + int encoded_data_length) { // stop_sending_ means that we've already received the final boundary token. // The server should stop sending us data at this point, but if it does, we // just throw it away. @@ -84,6 +86,7 @@ void MultipartResponseDelegate::OnReceivedData(const char* data, return; data_.append(data, data_len); + encoded_data_length_ += encoded_data_length; if (first_received_data_) { // Some servers don't send a boundary token before the first chunk of // data. We handle this case anyway (Gecko does too). @@ -140,7 +143,9 @@ void MultipartResponseDelegate::OnReceivedData(const char* data, // Send the last data chunk. client_->didReceiveData(loader_, data_.data(), - static_cast<int>(data_length)); + static_cast<int>(data_length), + encoded_data_length_); + encoded_data_length_ = 0; } } size_t boundary_end_pos = boundary_pos + boundary_.length(); @@ -171,8 +176,12 @@ void MultipartResponseDelegate::OnReceivedData(const char* data, if (data_[data_.length() - 1] == '\n') send_length = data_.length(); if (client_) - client_->didReceiveData(loader_, data_.data(), send_length); + client_->didReceiveData(loader_, + data_.data(), + send_length, + encoded_data_length_); data_ = data_.substr(send_length); + encoded_data_length_ = 0; } } @@ -182,7 +191,9 @@ void MultipartResponseDelegate::OnCompletedRequest() { if (!processing_headers_ && !data_.empty() && !stop_sending_ && client_) { client_->didReceiveData(loader_, data_.data(), - static_cast<int>(data_.length())); + static_cast<int>(data_.length()), + encoded_data_length_); + encoded_data_length_ = 0; } } diff --git a/webkit/glue/multipart_response_delegate.h b/webkit/glue/multipart_response_delegate.h index d4583bb..5536d51 100644 --- a/webkit/glue/multipart_response_delegate.h +++ b/webkit/glue/multipart_response_delegate.h @@ -72,7 +72,7 @@ class MultipartResponseDelegate { const std::string& boundary); // Passed through from ResourceHandleInternal - void OnReceivedData(const char* data, int data_len); + void OnReceivedData(const char* data, int data_len, int encoded_data_length); void OnCompletedRequest(); // The request has been canceled, so stop making calls to the client. @@ -120,6 +120,9 @@ class MultipartResponseDelegate { // full token. size_t FindBoundary(); + // Transferred data size accumulated between client callbacks. + int encoded_data_length_; + // A temporary buffer to hold data between reads for multipart data that // gets split in the middle of a header. std::string data_; diff --git a/webkit/glue/multipart_response_delegate_unittest.cc b/webkit/glue/multipart_response_delegate_unittest.cc index fbefaaa..bebb9f0 100644 --- a/webkit/glue/multipart_response_delegate_unittest.cc +++ b/webkit/glue/multipart_response_delegate_unittest.cc @@ -66,17 +66,20 @@ class MockWebURLLoaderClient : public WebURLLoaderClient { response_ = response; data_.clear(); } - virtual void didReceiveData(WebURLLoader* loader, - const char* data, int data_length) { + virtual void didReceiveData( + WebKit::WebURLLoader* loader, + const char* data, + int data_length, + int encoded_data_length) { ++received_data_; data_.append(data, data_length); + total_encoded_data_length_ += encoded_data_length; } - virtual void didFinishLoading(WebURLLoader*, double finishTime) {} virtual void didFail(WebURLLoader*, const WebURLError&) {} void Reset() { - received_response_ = received_data_ = 0; + received_response_ = received_data_ = total_encoded_data_length_ = 0; data_.clear(); response_.reset(); } @@ -85,7 +88,7 @@ class MockWebURLLoaderClient : public WebURLLoaderClient { return string(response_.httpHeaderField(WebString::fromUTF8(name)).utf8()); } - int received_response_, received_data_; + int received_response_, received_data_, total_encoded_data_length_; string data_; WebURLResponse response_; }; @@ -214,11 +217,13 @@ TEST(MultipartResponseTest, MissingBoundaries) { "--bound--" "ignore junk after end token --bound\n\nTest2\n"); delegate.OnReceivedData(no_start_boundary.c_str(), + static_cast<int>(no_start_boundary.length()), static_cast<int>(no_start_boundary.length())); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); - EXPECT_EQ(string("This is a sample response"), - client.data_); + EXPECT_EQ(string("This is a sample response"), client.data_); + EXPECT_EQ(static_cast<int>(no_start_boundary.length()), + client.total_encoded_data_length_); delegate.OnCompletedRequest(); EXPECT_EQ(1, client.received_response_); @@ -231,16 +236,20 @@ TEST(MultipartResponseTest, MissingBoundaries) { "bound\nContent-type: text/plain\n\n" "This is a sample response\n"); delegate2.OnReceivedData(no_end_boundary.c_str(), + static_cast<int>(no_end_boundary.length()), static_cast<int>(no_end_boundary.length())); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); EXPECT_EQ("This is a sample response\n", client.data_); + EXPECT_EQ(static_cast<int>(no_end_boundary.length()), + client.total_encoded_data_length_); delegate2.OnCompletedRequest(); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); - EXPECT_EQ(string("This is a sample response\n"), - client.data_); + EXPECT_EQ(string("This is a sample response\n"), client.data_); + EXPECT_EQ(static_cast<int>(no_end_boundary.length()), + client.total_encoded_data_length_); // Neither boundary client.Reset(); @@ -249,16 +258,20 @@ TEST(MultipartResponseTest, MissingBoundaries) { "Content-type: text/plain\n\n" "This is a sample response\n"); delegate3.OnReceivedData(no_boundaries.c_str(), + static_cast<int>(no_boundaries.length()), static_cast<int>(no_boundaries.length())); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); EXPECT_EQ("This is a sample response\n", client.data_); + EXPECT_EQ(static_cast<int>(no_boundaries.length()), + client.total_encoded_data_length_); delegate3.OnCompletedRequest(); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); - EXPECT_EQ(string("This is a sample response\n"), - client.data_); + EXPECT_EQ(string("This is a sample response\n"), client.data_); + EXPECT_EQ(static_cast<int>(no_boundaries.length()), + client.total_encoded_data_length_); } TEST(MultipartResponseTest, MalformedBoundary) { @@ -278,10 +291,13 @@ TEST(MultipartResponseTest, MalformedBoundary) { "This is a sample response\n" "--bound--" "ignore junk after end token --bound\n\nTest2\n"); - delegate.OnReceivedData(data.c_str(), static_cast<int>(data.length())); + delegate.OnReceivedData(data.c_str(), + static_cast<int>(data.length()), + static_cast<int>(data.length())); EXPECT_EQ(1, client.received_response_); EXPECT_EQ(1, client.received_data_); EXPECT_EQ(string("This is a sample response"), client.data_); + EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_); delegate.OnCompletedRequest(); EXPECT_EQ(1, client.received_response_); @@ -296,11 +312,13 @@ struct TestChunk { const int expected_responses; const int expected_received_data; const char* expected_data; + const int expected_encoded_data_length; }; void VariousChunkSizesTest(const TestChunk chunks[], int chunks_size, int responses, int received_data, - const char* completed_data) { + const char* completed_data, + int completed_encoded_data_length) { const string data( "--bound\n" // 0-7 "Content-type: image/png\n\n" // 8-32 @@ -320,106 +338,107 @@ void VariousChunkSizesTest(const TestChunk chunks[], int chunks_size, ASSERT_TRUE(chunks[i].start_pos < chunks[i].end_pos); string chunk = data.substr(chunks[i].start_pos, chunks[i].end_pos - chunks[i].start_pos); - delegate.OnReceivedData(chunk.c_str(), static_cast<int>(chunk.length())); - EXPECT_EQ(chunks[i].expected_responses, - client.received_response_); - EXPECT_EQ(chunks[i].expected_received_data, - client.received_data_); - EXPECT_EQ(string(chunks[i].expected_data), - client.data_); + delegate.OnReceivedData( + chunk.c_str(), + static_cast<int>(chunk.length()), + static_cast<int>(chunk.length())); + EXPECT_EQ(chunks[i].expected_responses, client.received_response_); + EXPECT_EQ(chunks[i].expected_received_data, client.received_data_); + EXPECT_EQ(string(chunks[i].expected_data), client.data_); + EXPECT_EQ(chunks[i].expected_encoded_data_length, + client.total_encoded_data_length_); } // Check final state delegate.OnCompletedRequest(); - EXPECT_EQ(responses, - client.received_response_); - EXPECT_EQ(received_data, - client.received_data_); - EXPECT_EQ(string(completed_data), - client.data_); + EXPECT_EQ(responses, client.received_response_); + EXPECT_EQ(received_data, client.received_data_); + string completed_data_string(completed_data); + EXPECT_EQ(completed_data_string, client.data_); + EXPECT_EQ(completed_encoded_data_length, client.total_encoded_data_length_); } TEST(MultipartResponseTest, BreakInBoundary) { // Break in the first boundary const TestChunk bound1[] = { - { 0, 4, 0, 0, ""}, - { 4, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 4, 0, 0, "", 0 }, + { 4, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(bound1, arraysize(bound1), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); // Break in first and second const TestChunk bound2[] = { - { 0, 4, 0, 0, ""}, - { 4, 55, 1, 1, "datadatadatadat" }, - { 55, 65, 1, 2, "datadatadatadatadata" }, - { 65, 110, 2, 3, "foofoofoofoofoo" }, + { 0, 4, 0, 0, "", 0 }, + { 4, 55, 1, 1, "datadatadatadat", 55 }, + { 55, 65, 1, 2, "datadatadatadatadata", 65 }, + { 65, 110, 2, 3, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(bound2, arraysize(bound2), - 2, 3, "foofoofoofoofoo"); + 2, 3, "foofoofoofoofoo", 110); // Break in second only const TestChunk bound3[] = { - { 0, 55, 1, 1, "datadatadatadat" }, - { 55, 110, 2, 3, "foofoofoofoofoo" }, + { 0, 55, 1, 1, "datadatadatadat", 55 }, + { 55, 110, 2, 3, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(bound3, arraysize(bound3), - 2, 3, "foofoofoofoofoo"); + 2, 3, "foofoofoofoofoo", 110); } TEST(MultipartResponseTest, BreakInHeaders) { // Break in first header const TestChunk header1[] = { - { 0, 10, 0, 0, "" }, - { 10, 35, 1, 0, "" }, - { 35, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 10, 0, 0, "", 0 }, + { 10, 35, 1, 0, "", 0 }, + { 35, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(header1, arraysize(header1), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); // Break in both headers const TestChunk header2[] = { - { 0, 10, 0, 0, "" }, - { 10, 65, 1, 1, "datadatadatadatadata" }, - { 65, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 10, 0, 0, "", 0 }, + { 10, 65, 1, 1, "datadatadatadatadata", 65 }, + { 65, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(header2, arraysize(header2), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); // Break at end of a header const TestChunk header3[] = { - { 0, 33, 1, 0, "" }, - { 33, 65, 1, 1, "datadatadatadatadata" }, - { 65, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 33, 1, 0, "", 0 }, + { 33, 65, 1, 1, "datadatadatadatadata", 65 }, + { 65, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(header3, arraysize(header3), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); } TEST(MultipartResponseTest, BreakInData) { // All data as one chunk const TestChunk data1[] = { - { 0, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(data1, arraysize(data1), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); // breaks in data segment const TestChunk data2[] = { - { 0, 35, 1, 0, "" }, - { 35, 65, 1, 1, "datadatadatadatadata" }, - { 65, 90, 2, 1, "" }, - { 90, 110, 2, 2, "foofoofoofoofoo" }, + { 0, 35, 1, 0, "", 0 }, + { 35, 65, 1, 1, "datadatadatadatadata", 65 }, + { 65, 90, 2, 1, "", 65 }, + { 90, 110, 2, 2, "foofoofoofoofoo", 110 }, }; VariousChunkSizesTest(data2, arraysize(data2), - 2, 2, "foofoofoofoofoo"); + 2, 2, "foofoofoofoofoo", 110); // Incomplete send const TestChunk data3[] = { - { 0, 35, 1, 0, "" }, - { 35, 90, 2, 1, "" }, + { 0, 35, 1, 0, "", 0 }, + { 35, 90, 2, 1, "", 90 }, }; VariousChunkSizesTest(data3, arraysize(data3), - 2, 2, "foof"); + 2, 2, "foof", 90); } TEST(MultipartResponseTest, SmallChunk) { @@ -438,10 +457,12 @@ TEST(MultipartResponseTest, SmallChunk) { "--boundContent-type: text/plain\n\n" "end--bound--"); delegate.OnReceivedData(data.c_str(), + static_cast<int>(data.length()), static_cast<int>(data.length())); EXPECT_EQ(4, client.received_response_); EXPECT_EQ(2, client.received_data_); EXPECT_EQ(string("end"), client.data_); + EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_); delegate.OnCompletedRequest(); EXPECT_EQ(4, client.received_response_); @@ -457,13 +478,13 @@ TEST(MultipartResponseTest, MultipleBoundaries) { MultipartResponseDelegate delegate(&client, NULL, response, "bound"); string data("--bound\r\n\r\n--bound\r\n\r\nfoofoo--bound--"); - delegate.OnReceivedData(data.c_str(), static_cast<int>(data.length())); - EXPECT_EQ(2, - client.received_response_); - EXPECT_EQ(1, - client.received_data_); - EXPECT_EQ(string("foofoo"), - client.data_); + delegate.OnReceivedData(data.c_str(), + static_cast<int>(data.length()), + static_cast<int>(data.length())); + EXPECT_EQ(2, client.received_response_); + EXPECT_EQ(1, client.received_data_); + EXPECT_EQ(string("foofoo"), client.data_); + EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_); } TEST(MultipartResponseTest, MultipartByteRangeParsingTest) { @@ -626,22 +647,25 @@ TEST(MultipartResponseTest, MultipartPayloadSet) { "Content-type: text/plain\n\n" "response data\n" "--bound\n"); - delegate.OnReceivedData(data.c_str(), static_cast<int>(data.length())); - EXPECT_EQ(1, - client.received_response_); - EXPECT_EQ(string("response data"), - client.data_); + delegate.OnReceivedData(data.c_str(), + static_cast<int>(data.length()), + static_cast<int>(data.length())); + EXPECT_EQ(1, client.received_response_); + EXPECT_EQ(string("response data"), client.data_); + EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_); EXPECT_FALSE(client.response_.isMultipartPayload()); string data2( "Content-type: text/plain\n\n" "response data2\n" "--bound\n"); - delegate.OnReceivedData(data2.c_str(), static_cast<int>(data2.length())); - EXPECT_EQ(2, - client.received_response_); - EXPECT_EQ(string("response data2"), - client.data_); + delegate.OnReceivedData(data2.c_str(), + static_cast<int>(data2.length()), + static_cast<int>(data2.length())); + EXPECT_EQ(2, client.received_response_); + EXPECT_EQ(string("response data2"), client.data_); + EXPECT_EQ(static_cast<int>(data.length()) + static_cast<int>(data2.length()), + client.total_encoded_data_length_); EXPECT_TRUE(client.response_.isMultipartPayload()); } diff --git a/webkit/glue/p2p_transport.h b/webkit/glue/p2p_transport.h new file mode 100644 index 0000000..e80ffb5 --- /dev/null +++ b/webkit/glue/p2p_transport.h @@ -0,0 +1,56 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEBKIT_GLUE_P2P_TRANSPORT_H_ +#define WEBKIT_GLUE_P2P_TRANSPORT_H_ + +#include <string> + +namespace net { +class Socket; +} // namespace net + +namespace webkit_glue { + +// Interface for P2P transport. +class P2PTransport { + public: + enum State { + STATE_NONE = 0, + STATE_WRITABLE = 1, + STATE_READABLE = 2, + }; + + class EventHandler { + public: + virtual ~EventHandler() {} + + // Called for each local candidate. + virtual void OnCandidateReady(const std::string& address) = 0; + + // Called when readable of writable state of the stream changes. + virtual void OnStateChange(State state) = 0; + }; + + virtual ~P2PTransport() {} + + // Initialize transport using specified configuration. Returns true + // if initialization succeeded. + virtual bool Init(const std::string& name, + const std::string& config, + EventHandler* event_handler) = 0; + + // Add candidate received from the remote peer. Returns false if the + // provided address is not in a valid format. + virtual bool AddRemoteCandidate(const std::string& address) = 0; + + // Returns socket interface that can be used to send/receive + // data. Returned object is owned by the transport. Pending calls on + // the socket are canceled when the transport is destroyed. + virtual net::Socket* GetChannel() = 0; +}; + +} // namespace webkit_glue + +#endif // WEBKIT_GLUE_P2P_TRANSPORT_H_ diff --git a/webkit/glue/resource_fetcher.cc b/webkit/glue/resource_fetcher.cc index 39cc59c..28885b4 100644 --- a/webkit/glue/resource_fetcher.cc +++ b/webkit/glue/resource_fetcher.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -23,10 +23,12 @@ using WebKit::WebURLResponse; namespace webkit_glue { ResourceFetcher::ResourceFetcher(const GURL& url, WebFrame* frame, - Callback* c) + WebURLRequest::TargetType target_type, + Callback* callback) : url_(url), + target_type_(target_type), completed_(false), - callback_(c) { + callback_(callback) { // Can't do anything without a frame. However, delegate can be NULL (so we // can do a http request and ignore the results). DCHECK(frame); @@ -47,6 +49,7 @@ void ResourceFetcher::Cancel() { void ResourceFetcher::Start(WebFrame* frame) { WebURLRequest request(url_); + request.setTargetType(target_type_); frame->dispatchWillSendRequest(request); loader_.reset(WebKit::webKitClient()->createURLLoader()); @@ -85,7 +88,8 @@ void ResourceFetcher::didReceiveResponse( } void ResourceFetcher::didReceiveData( - WebURLLoader* loader, const char* data, int data_length) { + WebURLLoader* loader, const char* data, int data_length, + int encoded_data_length) { DCHECK(!completed_); DCHECK(data_length > 0); @@ -120,8 +124,9 @@ void ResourceFetcher::didFail(WebURLLoader* loader, const WebURLError& error) { // A resource fetcher with a timeout ResourceFetcherWithTimeout::ResourceFetcherWithTimeout( - const GURL& url, WebFrame* frame, int timeout_secs, Callback* c) - : ResourceFetcher(url, frame, c) { + const GURL& url, WebFrame* frame, WebURLRequest::TargetType target_type, + int timeout_secs, Callback* callback) + : ResourceFetcher(url, frame, target_type, callback) { timeout_timer_.Start(TimeDelta::FromSeconds(timeout_secs), this, &ResourceFetcherWithTimeout::TimeoutFired); } diff --git a/webkit/glue/resource_fetcher.h b/webkit/glue/resource_fetcher.h index eb9411b..6af9b54 100644 --- a/webkit/glue/resource_fetcher.h +++ b/webkit/glue/resource_fetcher.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -16,10 +16,11 @@ #include "base/basictypes.h" #include "base/callback.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "base/timer.h" #include "googleurl/src/gurl.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderClient.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" class GURL; @@ -27,7 +28,6 @@ class GURL; namespace WebKit { class WebFrame; class WebURLLoader; -class WebURLRequest; struct WebURLError; } @@ -43,7 +43,8 @@ class ResourceFetcher : public WebKit::WebURLLoaderClient { // We need a frame to make requests. ResourceFetcher( - const GURL& url, WebKit::WebFrame* frame, Callback* callback); + const GURL& url, WebKit::WebFrame* frame, + WebKit::WebURLRequest::TargetType target_type, Callback* callback); ~ResourceFetcher(); // Stop the request and don't call the callback. @@ -63,8 +64,10 @@ class ResourceFetcher : public WebKit::WebURLLoaderClient { WebKit::WebURLLoader* loader, const WebKit::WebURLResponse& response); virtual void didReceiveCachedMetadata( WebKit::WebURLLoader* loader, const char* data, int data_length); + virtual void didReceiveData( - WebKit::WebURLLoader* loader, const char* data, int data_length); + WebKit::WebURLLoader* loader, const char* data, int data_length, + int encoded_data_length); virtual void didFinishLoading( WebKit::WebURLLoader* loader, double finishTime); virtual void didFail( @@ -75,6 +78,9 @@ class ResourceFetcher : public WebKit::WebURLLoaderClient { // URL we're fetching GURL url_; + // Target type + WebKit::WebURLRequest::TargetType target_type_; + // A copy of the original resource response WebKit::WebURLResponse response_; @@ -102,8 +108,11 @@ class ResourceFetcher : public WebKit::WebURLLoaderClient { // A resource fetcher with a timeout class ResourceFetcherWithTimeout : public ResourceFetcher { public: - ResourceFetcherWithTimeout(const GURL& url, WebKit::WebFrame* frame, - int timeout_secs, Callback* c); + ResourceFetcherWithTimeout(const GURL& url, + WebKit::WebFrame* frame, + WebKit::WebURLRequest::TargetType target_type, + int timeout_secs, + Callback* callback); virtual ~ResourceFetcherWithTimeout(); private: diff --git a/webkit/glue/resource_fetcher_unittest.cc b/webkit/glue/resource_fetcher_unittest.cc index 965d285..2888a94 100644 --- a/webkit/glue/resource_fetcher_unittest.cc +++ b/webkit/glue/resource_fetcher_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -15,6 +15,7 @@ #include "webkit/tools/test_shell/test_shell_test.h" using WebKit::WebFrame; +using WebKit::WebURLRequest; using WebKit::WebURLResponse; using webkit_glue::ResourceFetcher; using webkit_glue::ResourceFetcherWithTimeout; @@ -102,7 +103,7 @@ TEST_F(ResourceFetcherTests, FLAKY_ResourceFetcherDownload) { GURL url(test_server_.GetURL("files/test_shell/index.html")); scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcher( - url, frame, delegate->NewCallback())); + url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); delegate->WaitForResponse(); @@ -114,7 +115,9 @@ TEST_F(ResourceFetcherTests, FLAKY_ResourceFetcherDownload) { // Test 404 response. url = test_server_.GetURL("files/thisfiledoesntexist.html"); delegate.reset(new FetcherDelegate); - fetcher.reset(new ResourceFetcher(url, frame, delegate->NewCallback())); + fetcher.reset(new ResourceFetcher(url, frame, + WebURLRequest::TargetIsMainFrame, + delegate->NewCallback())); delegate->WaitForResponse(); @@ -133,7 +136,7 @@ TEST_F(ResourceFetcherTests, FLAKY_ResourceFetcherDidFail) { GURL url("http://localhost:1339/doesnotexist"); scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcher( - url, frame, delegate->NewCallback())); + url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); delegate->WaitForResponse(); @@ -155,7 +158,8 @@ TEST_F(ResourceFetcherTests, ResourceFetcherTimeout) { GURL url(test_server_.GetURL("slow?1")); scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout( - url, frame, 0, delegate->NewCallback())); + url, frame, WebURLRequest::TargetIsMainFrame, + 0, delegate->NewCallback())); delegate->WaitForResponse(); @@ -195,7 +199,8 @@ TEST_F(ResourceFetcherTests, ResourceFetcherDeletedInCallback) { GURL url(test_server_.GetURL("slow?1")); scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate); scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout( - url, frame, 0, delegate->NewCallback())); + url, frame, WebURLRequest::TargetIsMainFrame, + 0, delegate->NewCallback())); delegate->SetFetcher(fetcher.release()); delegate->WaitForResponse(); diff --git a/webkit/glue/resource_loader_bridge.cc b/webkit/glue/resource_loader_bridge.cc index 3e9c9e8..4cc012d 100644 --- a/webkit/glue/resource_loader_bridge.cc +++ b/webkit/glue/resource_loader_bridge.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -35,6 +35,7 @@ ResourceDevToolsInfo::~ResourceDevToolsInfo() {} ResourceResponseInfo::ResourceResponseInfo() : content_length(-1), + encoded_data_length(-1), appcache_id(appcache::kNoCacheId), connection_id(0), connection_reused(false), diff --git a/webkit/glue/resource_loader_bridge.h b/webkit/glue/resource_loader_bridge.h index 3519269..e1a5a99 100644 --- a/webkit/glue/resource_loader_bridge.h +++ b/webkit/glue/resource_loader_bridge.h @@ -25,9 +25,9 @@ #include "base/file_descriptor_posix.h" #endif #include "base/file_path.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" #include "base/platform_file.h" -#include "base/ref_counted.h" -#include "base/scoped_ptr.h" #include "base/time.h" #include "base/values.h" #include "googleurl/src/gurl.h" @@ -141,6 +141,10 @@ struct ResourceResponseInfo { // Content length if available. -1 if not available int64 content_length; + // Length of the encoded data transferred over the network. In case there is + // no data, contains -1. + int64 encoded_data_length; + // The appcache this response was loaded from, or kNoCacheId. int64 appcache_id; @@ -301,7 +305,12 @@ class ResourceLoaderBridge { // Called when a chunk of response data is available. This method may // be called multiple times or not at all if an error occurs. - virtual void OnReceivedData(const char* data, int len) = 0; + // The encoded_data_length is the length of the encoded data transferred + // over the network, which could be different from data length (e.g. for + // gzipped content), or -1 if if unknown. + virtual void OnReceivedData(const char* data, + int data_length, + int encoded_data_length) = 0; // Called when metadata generated by the renderer is retrieved from the // cache. This method may be called zero or one times. diff --git a/webkit/glue/resource_type.h b/webkit/glue/resource_type.h index 1de4fd2..224656a 100644 --- a/webkit/glue/resource_type.h +++ b/webkit/glue/resource_type.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -23,6 +23,7 @@ class ResourceType { WORKER, // the main resource of a dedicated worker. SHARED_WORKER, // the main resource of a shared worker. PREFETCH, // an explicitly requested prefetch + FAVICON, // a favicon LAST_TYPE // Place holder so we don't need to change ValidType // everytime. }; diff --git a/webkit/glue/resources/input_speech_recording.png b/webkit/glue/resources/input_speech_recording.png Binary files differindex 59734a5..5c68bc8 100644 --- a/webkit/glue/resources/input_speech_recording.png +++ b/webkit/glue/resources/input_speech_recording.png diff --git a/webkit/glue/resources/pdf_button_fth.png b/webkit/glue/resources/pdf_button_fth.png Binary files differdeleted file mode 100644 index 3b2cc9b..0000000 --- a/webkit/glue/resources/pdf_button_fth.png +++ /dev/null diff --git a/webkit/glue/resources/pdf_button_fth_hover.png b/webkit/glue/resources/pdf_button_fth_hover.png Binary files differdeleted file mode 100644 index 2904fd7..0000000 --- a/webkit/glue/resources/pdf_button_fth_hover.png +++ /dev/null diff --git a/webkit/glue/resources/pdf_button_fth_pressed.png b/webkit/glue/resources/pdf_button_fth_pressed.png Binary files differdeleted file mode 100644 index 6388c3a..0000000 --- a/webkit/glue/resources/pdf_button_fth_pressed.png +++ /dev/null diff --git a/webkit/glue/resources/pdf_button_ftp.png b/webkit/glue/resources/pdf_button_ftp.png Binary files differnew file mode 100644 index 0000000..06180b5 --- /dev/null +++ b/webkit/glue/resources/pdf_button_ftp.png diff --git a/webkit/glue/resources/pdf_button_ftp_hover.png b/webkit/glue/resources/pdf_button_ftp_hover.png Binary files differnew file mode 100644 index 0000000..e860119 --- /dev/null +++ b/webkit/glue/resources/pdf_button_ftp_hover.png diff --git a/webkit/glue/resources/pdf_button_ftp_pressed.png b/webkit/glue/resources/pdf_button_ftp_pressed.png Binary files differnew file mode 100644 index 0000000..8b00560 --- /dev/null +++ b/webkit/glue/resources/pdf_button_ftp_pressed.png diff --git a/webkit/glue/resources/pdf_button_ftw.png b/webkit/glue/resources/pdf_button_ftw.png Binary files differindex d4dacc5..6204843 100644 --- a/webkit/glue/resources/pdf_button_ftw.png +++ b/webkit/glue/resources/pdf_button_ftw.png diff --git a/webkit/glue/resources/pdf_button_ftw_hover.png b/webkit/glue/resources/pdf_button_ftw_hover.png Binary files differindex e5c98f4..e7a48ab 100644 --- a/webkit/glue/resources/pdf_button_ftw_hover.png +++ b/webkit/glue/resources/pdf_button_ftw_hover.png diff --git a/webkit/glue/resources/pdf_button_ftw_pressed.png b/webkit/glue/resources/pdf_button_ftw_pressed.png Binary files differindex 8db22b7..e300247 100644 --- a/webkit/glue/resources/pdf_button_ftw_pressed.png +++ b/webkit/glue/resources/pdf_button_ftw_pressed.png diff --git a/webkit/glue/resources/pdf_button_print.png b/webkit/glue/resources/pdf_button_print.png Binary files differnew file mode 100644 index 0000000..025eca1 --- /dev/null +++ b/webkit/glue/resources/pdf_button_print.png diff --git a/webkit/glue/resources/pdf_button_print_hover.png b/webkit/glue/resources/pdf_button_print_hover.png Binary files differnew file mode 100644 index 0000000..0328b19 --- /dev/null +++ b/webkit/glue/resources/pdf_button_print_hover.png diff --git a/webkit/glue/resources/pdf_button_print_pressed.png b/webkit/glue/resources/pdf_button_print_pressed.png Binary files differnew file mode 100644 index 0000000..c1148f5 --- /dev/null +++ b/webkit/glue/resources/pdf_button_print_pressed.png diff --git a/webkit/glue/resources/pdf_button_save.png b/webkit/glue/resources/pdf_button_save.png Binary files differnew file mode 100644 index 0000000..8848bac --- /dev/null +++ b/webkit/glue/resources/pdf_button_save.png diff --git a/webkit/glue/resources/pdf_button_save_hover.png b/webkit/glue/resources/pdf_button_save_hover.png Binary files differnew file mode 100644 index 0000000..a6f2527 --- /dev/null +++ b/webkit/glue/resources/pdf_button_save_hover.png diff --git a/webkit/glue/resources/pdf_button_save_pressed.png b/webkit/glue/resources/pdf_button_save_pressed.png Binary files differnew file mode 100644 index 0000000..237fad4 --- /dev/null +++ b/webkit/glue/resources/pdf_button_save_pressed.png diff --git a/webkit/glue/resources/pdf_button_zoomin.png b/webkit/glue/resources/pdf_button_zoomin.png Binary files differindex 3d399c6..f53382f 100644 --- a/webkit/glue/resources/pdf_button_zoomin.png +++ b/webkit/glue/resources/pdf_button_zoomin.png diff --git a/webkit/glue/resources/pdf_button_zoomin_hover.png b/webkit/glue/resources/pdf_button_zoomin_hover.png Binary files differindex 597f489..4534f2f 100644 --- a/webkit/glue/resources/pdf_button_zoomin_hover.png +++ b/webkit/glue/resources/pdf_button_zoomin_hover.png diff --git a/webkit/glue/resources/pdf_button_zoomin_pressed.png b/webkit/glue/resources/pdf_button_zoomin_pressed.png Binary files differindex 7847808..ecfa4bb 100644 --- a/webkit/glue/resources/pdf_button_zoomin_pressed.png +++ b/webkit/glue/resources/pdf_button_zoomin_pressed.png diff --git a/webkit/glue/resources/pdf_button_zoomout.png b/webkit/glue/resources/pdf_button_zoomout.png Binary files differindex c1b7c7c..1c31809 100644 --- a/webkit/glue/resources/pdf_button_zoomout.png +++ b/webkit/glue/resources/pdf_button_zoomout.png diff --git a/webkit/glue/resources/pdf_button_zoomout_hover.png b/webkit/glue/resources/pdf_button_zoomout_hover.png Binary files differindex aa555cc..12009a5 100644 --- a/webkit/glue/resources/pdf_button_zoomout_hover.png +++ b/webkit/glue/resources/pdf_button_zoomout_hover.png diff --git a/webkit/glue/resources/pdf_button_zoomout_pressed.png b/webkit/glue/resources/pdf_button_zoomout_pressed.png Binary files differindex e16d8d6..fa922d7 100644 --- a/webkit/glue/resources/pdf_button_zoomout_pressed.png +++ b/webkit/glue/resources/pdf_button_zoomout_pressed.png diff --git a/webkit/glue/resources/webkit_strings_ar.xtb b/webkit/glue/resources/webkit_strings_ar.xtb index 0f2e739..59f5f87 100644 --- a/webkit/glue/resources/webkit_strings_ar.xtb +++ b/webkit/glue/resources/webkit_strings_ar.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">أخفق تثبيت المكون الإضافي من <ph name="URL"/></translation> <translation id="9186171386827445984">جارٍ تحميل المستند: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> من الصفحات...</translation> <translation id="1235745349614807883">محو آخر عمليات البحث</translation> +<translation id="1171774979989969504">الرجاء إدخال عنوان البريد الإلكتروني.</translation> +<translation id="709897737746224366">الرجاء مطابقة التنسيق المطلوب.</translation> <translation id="5048533449481078685">محدّد القائمة</translation> <translation id="372362261556059955">المكوّن الإضافي المطلوب</translation> <translation id="4202807286478387388">الدخول</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">تحميل...</translation> <translation id="6845533974506654842">اضغط</translation> <translation id="8244226242650769279">مخطّط صورة</translation> +<translation id="310520048233152454">الرجاء إدخال عنوان URL.</translation> <translation id="2548326553472216322">لا عمليات بحث حديثة</translation> +<translation id="7263440858009898357">الرجاء تحديد عنصر من القائمة.</translation> +<translation id="5164977714490026579">يجب أن تكون القيمة أكبر من أو تساوي <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (درجة عالية)</translation> <translation id="3040011195152428237">رابط</translation> <translation id="2745343197843472802">الحصول على المكوّن الإضافي</translation> +<translation id="8451268428117625855">الرجاء تحديد ملف.</translation> <translation id="5776402066334188252">الرجاء التأكيد على أنك تريد تثبيت المكوّن الإضافي هذا. يجب تثبيت المكونات الإضافية التي تثق فيها فقط.</translation> -<translation id="4003986561708175844">لم يتم تثبيت المكون الإضافي المطلوب</translation> <translation id="3018094406922859308">جارٍ تنزيل المكوّن الإضافي...</translation> <translation id="7364796246159120393">اختيار ملفّ</translation> +<translation id="2761667185364618470">الرجاء تحديد هذا المربع إذا أردت المتابعة.</translation> <translation id="8964020114565522021">سحب الملفّ إلى هنا</translation> +<translation id="5129723458012748440">لم يتم تثبيت المكون الإضافي <ph name="PLUGIN"/>.</translation> <translation id="838869780401515933">الاختيار</translation> <translation id="2846343701378493991">1024 (درجة متوسطة)</translation> <translation id="5476505524087279545">إزالة علامة الاختيار</translation> <translation id="3789841737615482174">تثبيت</translation> +<translation id="2507943997699731163">الرجاء ملء هذا الحقل.</translation> <translation id="5253117816378681419">الرجاء التأكيد على أنك تريد تثبيت المكوّن الإضافي <ph name="PLUGIN"/>. يجب تثبيت المكونات الإضافية التي تثق فيها فقط.</translation> <translation id="6663448176199120256">آخر عمليات البحث</translation> +<translation id="7335060848622232389">تم تعطيل تثبيت المكونات الإضافية.</translation> <translation id="2597378329261239068">هذا المستند محمي بكلمة المرور. الرجاء إدخال كلمة مرور.</translation> +<translation id="5466621249238537318">الرجاء تحديد ملف واحد أو أكثر.</translation> +<translation id="8750798805984357768">الرجاء اختيار أحد هذه الخيارات.</translation> <translation id="7740050170769002709">محتوى HTML</translation> +<translation id="2226276347425096477">الرجاء اختصار هذا النص حتى يصل إلى <ph name="MAX_CHARACTERS"/> من الحروف أو أقل (أنت الآن تستخدم <ph name="CURRENT_LENGTH"/> من الحروف).</translation> +<translation id="1639239467298939599">جارٍ التحميل.</translation> +<translation id="2908441821576996758">الرجاء إدخال قائمة مفصولة بفواصل لعناوين البريد الإلكتروني.</translation> <translation id="5939518447894949180">إعادة</translation> +<translation id="835897206747267392">قيمة غير صحيحة</translation> +<translation id="3851140433852960970">لا يتوفر أي مكون إضافي لعرض هذا المحتوى.</translation> <translation id="1842960171412779397">الاختيار</translation> +<translation id="3450233048674729344">يجب أن تكون القيمة أقل من أو تساوي <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">لم يتم تثبيت المكون الإضافي المطلوب.</translation> <translation id="7638452146404718955">انقر هنا لتنزيل المكون الإضافي</translation> <translation id="6119846243427417423">تنشيط</translation> <translation id="8444882422881193423">عدد الملفات: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">لم يتم تثبيت المكون الإضافي <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">لا يتوفر أي مكون إضافي لعرض هذا المحتوى</translation> +<translation id="3934680773876859118">إخفاق تحميل مستند PDF</translation> <translation id="8597182159515967513">العنوان</translation> <translation id="2653659639078652383">إرسال</translation> <translation id="8475551193147984329">المكوّن الإضافي المطلوب <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_bg.xtb b/webkit/glue/resources/webkit_strings_bg.xtb index 09f4a71..41ce997 100644 --- a/webkit/glue/resources/webkit_strings_bg.xtb +++ b/webkit/glue/resources/webkit_strings_bg.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Инсталирането на приставката от <ph name="URL"/> не бе успешно</translation> <translation id="9186171386827445984">Документът се зарежда: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> страници...</translation> <translation id="1235745349614807883">Изчистване на скорошните търсения</translation> +<translation id="1171774979989969504">Моля, въведете имейл адрес.</translation> +<translation id="709897737746224366">Моля, спазвайте изисквания формат.</translation> <translation id="5048533449481078685">списъчен показалец</translation> <translation id="372362261556059955">Необходима е допълнителна приставка</translation> <translation id="4202807286478387388">преминаване</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Зарежда се...</translation> <translation id="6845533974506654842">натискане</translation> <translation id="8244226242650769279">карта с изображения</translation> +<translation id="310520048233152454">Моля, въведете URL адрес.</translation> <translation id="2548326553472216322">Няма скорошни търсения</translation> +<translation id="7263440858009898357">Моля, изберете елемент в списъка.</translation> +<translation id="5164977714490026579">Стойността трябва да е по-голяма или равна на <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (висока степен на сложност)</translation> <translation id="3040011195152428237">връзка</translation> <translation id="2745343197843472802">Изтеглете приставката</translation> +<translation id="8451268428117625855">Моля, изберете файл.</translation> <translation id="5776402066334188252">Моля, потвърдете, че искате да инсталирате тази приставка. Трябва да инсталирате само приставки, на които имате доверие.</translation> -<translation id="4003986561708175844">Необходимата приставка не е инсталирана</translation> <translation id="3018094406922859308">Приставката се изтегля...</translation> <translation id="7364796246159120393">Избор на файл</translation> +<translation id="2761667185364618470">Моля, поставете отметка в това квадратче, ако искате да продължите.</translation> <translation id="8964020114565522021">Плъзнете файла тук</translation> +<translation id="5129723458012748440">Не е инсталирана приставката „<ph name="PLUGIN"/>“.</translation> <translation id="838869780401515933">отмятане</translation> <translation id="2846343701378493991">1024 (средна степен на сложност)</translation> <translation id="5476505524087279545">премахване на отметката</translation> <translation id="3789841737615482174">Инсталиране</translation> +<translation id="2507943997699731163">Моля, попълнете това поле.</translation> <translation id="5253117816378681419">Моля, потвърдете, че искате да инсталирате приставката <ph name="PLUGIN"/>. Трябва да инсталирате само приставки, на които имате доверие.</translation> <translation id="6663448176199120256">Скорошни търсения</translation> +<translation id="7335060848622232389">Инсталирането на приставки е деактивирано.</translation> <translation id="2597378329261239068">Този документ е защитен с парола. Моля, въведете я.</translation> +<translation id="5466621249238537318">Моля, изберете един или повече файлове.</translation> +<translation id="8750798805984357768">Моля, изберете една от тези опции.</translation> <translation id="7740050170769002709">HTML съдържание</translation> +<translation id="2226276347425096477">Моля, съкратете този текст до <ph name="MAX_CHARACTERS"/> знака или по-малко (понастоящем използвате <ph name="CURRENT_LENGTH"/> знака).</translation> +<translation id="1639239467298939599">Зарежда се</translation> +<translation id="2908441821576996758">Моля, въведете списък с имейл адреси, разделени със запетаи.</translation> <translation id="5939518447894949180">Повторно задаване</translation> +<translation id="835897206747267392">Невалидна стойност.</translation> +<translation id="3851140433852960970">Няма налична приставка за показване на това съдържание.</translation> <translation id="1842960171412779397">Избиране</translation> +<translation id="3450233048674729344">Стойността трябва да е по-малка или равна на <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Необходимата приставка не е инсталирана.</translation> <translation id="7638452146404718955">Кликнете тук, за да изтеглите приставката</translation> <translation id="6119846243427417423">активиране</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> файла</translation> -<translation id="4470547978413275879">Не е инсталирана приставката <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">Няма налична приставка за показване на това съдържание</translation> +<translation id="3934680773876859118">PDF документът не успя да се зареди</translation> <translation id="8597182159515967513">заглавие</translation> <translation id="2653659639078652383">Изпращане</translation> <translation id="8475551193147984329">Необходима е приставката <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_bn.xtb b/webkit/glue/resources/webkit_strings_bn.xtb index 7143769..ed72a15 100644 --- a/webkit/glue/resources/webkit_strings_bn.xtb +++ b/webkit/glue/resources/webkit_strings_bn.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/>-এর থেকে প্ল্যাগ-ইন ইনস্টল করতে ব্যর্থ হয়েছে</translation> <translation id="9186171386827445984">নথি লোড হচ্ছে: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> পৃষ্ঠা...</translation> <translation id="1235745349614807883">সাম্প্রতিক অনুসন্ধানগুলি সাফ করুন</translation> +<translation id="1171774979989969504">দয়া করে কোন ইমেল ঠিকানা প্রবেশ করান:</translation> +<translation id="709897737746224366">দয়া করে অনুরোধ হওয়া বিন্যাসটি মেলান৷</translation> <translation id="5048533449481078685">তালিকা নির্দেশক</translation> <translation id="372362261556059955">অতিরিক্ত প্লাগ-ইন দরকার</translation> <translation id="4202807286478387388">লাফ দিন</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">লোড হচ্ছে...</translation> <translation id="6845533974506654842">টিপুন</translation> <translation id="8244226242650769279">ছবি মানচিত্র</translation> +<translation id="310520048233152454">দয়া করে একটি বৈধ URL প্রবেশ করুন৷</translation> <translation id="2548326553472216322">কোন সাম্প্রতিক অনুসন্ধান নেই</translation> +<translation id="7263440858009898357">তালিকা থেকে একটি আইটেম নির্বাচন করুন৷ </translation> +<translation id="5164977714490026579">মানটি অবশ্যই <ph name="MINIMUM"/>এর চেয়ে বেশি বা সমান হবে৷</translation> <translation id="5944544982112848342">2048 (উচ্চ গ্রেড)</translation> <translation id="3040011195152428237">লিঙ্ক</translation> <translation id="2745343197843472802">প্লাগ-ইন পান</translation> +<translation id="8451268428117625855">দয়া করে একটি ফাইল নির্বাচন করুন৷</translation> <translation id="5776402066334188252">আপনি প্ল্যাগ-ইন ইনস্টল করতে চান কি না দয়া করে নিশ্চিত করুন৷ আপনার কেবল সেই প্ল্যাগ-ইনগুলি ইনস্টল করা উচিত যা আপনি বিশ্বাস করেন৷</translation> -<translation id="4003986561708175844">প্রয়োজনীয় প্ল্যাগ-ইন ইনস্টল করা নেই</translation> <translation id="3018094406922859308">প্লাগ-ইন ডাউনলোড হচ্ছে...</translation> <translation id="7364796246159120393">ফাইল চয়ন করুন</translation> +<translation id="2761667185364618470">আপনি যদি এগিয়ে যেতে চান তবে দয়া করে এই বাক্সটি পরীক্ষা করুন৷</translation> <translation id="8964020114565522021">ফাইল এখানে টেনে আনুন</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> প্লাগ-ইন ইনস্টল নেই|</translation> <translation id="838869780401515933">চেক করুন</translation> <translation id="2846343701378493991">1024 (মধ্যম গ্রেড)</translation> <translation id="5476505524087279545">আনচেক</translation> <translation id="3789841737615482174">ইনস্টল করুন</translation> +<translation id="2507943997699731163">দয়া করে এই ক্ষেত্রটি পূরণ করুন৷</translation> <translation id="5253117816378681419">আপনি <ph name="PLUGIN"/> প্ল্যাগ-ইনটি ইনস্টল করতে চান কি না দয়া করে নিশ্চিত করুন৷ আপনার কেবল সেই প্ল্যাগ-ইনগুলি ইনস্টল করার উচিত যেগুলিকে আপনি বিশ্বাস করেন৷</translation> <translation id="6663448176199120256">সাম্প্রতিক অনুসন্ধানগুলি</translation> +<translation id="7335060848622232389">প্ল্যাগ-ইন ইনস্টল করা অক্ষম করা হয়েছে৷</translation> <translation id="2597378329261239068">এই দস্তাবেজটি পাসওয়ার্ড সুরক্ষিত৷ দয়া করে একটি পাসওয়ার্ড লিখুন৷</translation> +<translation id="5466621249238537318">দয়া করে এক বা একাধিক ফাইল নির্বাচন করুন৷</translation> +<translation id="8750798805984357768">দয়া করে বিকল্পগুলির একটি নির্বাচন করুন৷</translation> <translation id="7740050170769002709">HTML সামগ্রী</translation> +<translation id="2226276347425096477">দয়া করে এই পাঠ্যটি <ph name="MAX_CHARACTERS"/>টি অক্ষর বা তার কমে (আপনি বর্তমানে <ph name="CURRENT_LENGTH"/>টি অক্ষর ব্যবহার করছেন) সংক্ষিপ্ত করুন৷</translation> +<translation id="1639239467298939599">লোড হচ্ছে</translation> +<translation id="2908441821576996758">দয়া করে ইমেল ঠিকানাগুলির একটি কমা দিয়ে আলাদা করা মান প্রবেশ করান৷</translation> <translation id="5939518447894949180">রিসেট করুন</translation> +<translation id="835897206747267392">অকার্যকর মান৷</translation> +<translation id="3851140433852960970">এই সামগ্রী প্রদর্শন করার জন্য কোনও প্ল্যাগ-ইন উপলব্ধ নেই৷</translation> <translation id="1842960171412779397">নির্বাচন করুন</translation> +<translation id="3450233048674729344">মানটি অবশ্যই <ph name="MAXIMUM"/>এর চেয়ে কম বা সমান হবে৷</translation> +<translation id="9198010615634362518">প্রয়োজনীয় প্ল্যাগ-ইন ইনস্টল করা নেই৷</translation> <translation id="7638452146404718955">প্ল্যাগ-ইন ডাউনলোড করার জন্য এখানে ক্লিক করুন</translation> <translation id="6119846243427417423">সক্রিয় করুন</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> টি ফাইল</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> প্লাগ-ইন ইনস্টল নেই</translation> -<translation id="6765711848403622008">এই সামগ্রী প্রদর্শন করার জন্য কোনও প্ল্যাগ-ইন উপলব্ধ নেই</translation> +<translation id="3934680773876859118">PDF দস্তাবেজ লোড হতে ব্যর্থ</translation> <translation id="8597182159515967513">শিরোনামা</translation> <translation id="2653659639078652383">জমা</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> প্লাগ-ইন প্রয়োজন</translation> diff --git a/webkit/glue/resources/webkit_strings_ca.xtb b/webkit/glue/resources/webkit_strings_ca.xtb index 59756a8..baaa04e 100644 --- a/webkit/glue/resources/webkit_strings_ca.xtb +++ b/webkit/glue/resources/webkit_strings_ca.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">S'ha produït un error en instal·lar el connector des de <ph name="URL"/></translation> <translation id="9186171386827445984">S'està carregant el document: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> pàgines...</translation> <translation id="1235745349614807883">Esborra les cerques recents</translation> +<translation id="1171774979989969504">Introduïu una adreça electrònica.</translation> +<translation id="709897737746224366">Feu servir el format sol·licitat.</translation> <translation id="5048533449481078685">marcador de llistes</translation> <translation id="372362261556059955">Es necessita un connector addicional</translation> <translation id="4202807286478387388">salta</translation> @@ -16,31 +18,46 @@ <translation id="370665806235115550">S'està carregant...</translation> <translation id="6845533974506654842">prem</translation> <translation id="8244226242650769279">mapa d'imatges</translation> +<translation id="310520048233152454">Introduïu un URL.</translation> <translation id="2548326553472216322">No hi ha cerques recents</translation> +<translation id="7263440858009898357">Seleccioneu un element de la llista.</translation> +<translation id="5164977714490026579">El valor ha de ser més gran o igual que <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Gran)</translation> <translation id="3040011195152428237">enllaç</translation> <translation id="2745343197843472802">Obtén el connector</translation> +<translation id="8451268428117625855">Seleccioneu un fitxer.</translation> <translation id="5776402066334188252">Confirmeu que voleu instal·lar aquest connector. Us recomanem que només instal·leu connectors de la vostra confiança.</translation> -<translation id="4003986561708175844">El connector necessari no està instal·lat</translation> <translation id="3018094406922859308">S'està baixant el connector...</translation> <translation id="7364796246159120393">Selecciona el fitxer</translation> +<translation id="2761667185364618470">Marqueu aquesta casella si voleu continuar.</translation> <translation id="8964020114565522021">Arrossegueu el fitxer aquí.</translation> +<translation id="5129723458012748440">El connector <ph name="PLUGIN"/> no està instal·lat.</translation> <translation id="838869780401515933">marca</translation> <translation id="2846343701378493991">1024 (Mitjà)</translation> <translation id="5476505524087279545">desmarca</translation> <translation id="3789841737615482174">Instal·la</translation> +<translation id="2507943997699731163">Empleneu aquest camp.</translation> <translation id="5253117816378681419">Confirmeu que voleu instal·lar el connector <ph name="PLUGIN"/>. Us recomanem que només instal·leu connectors de la vostra confiança.</translation> <translation id="6663448176199120256">Cerques recents</translation> +<translation id="7335060848622232389">S'ha desactivat la instal·lació de connectors.</translation> <translation id="2597378329261239068">Aquest document està protegit mitjançant contrasenya. Introduïu una contrasenya.</translation> +<translation id="5466621249238537318">Seleccioneu un o diversos fitxers.</translation> +<translation id="8750798805984357768">Seleccioneu una d'aquestes opcions.</translation> <translation id="7740050170769002709">Contingut HTML</translation> +<translation id="2226276347425096477">Escurceu aquest text a un màxim de <ph name="MAX_CHARACTERS"/> caràcters (ara n'esteu utilitzant <ph name="CURRENT_LENGTH"/>).</translation> +<translation id="1639239467298939599">S'està carregant</translation> +<translation id="2908441821576996758">Introduïu una llista d'adreces electròniques separades per comes.</translation> <translation id="5939518447894949180">Restablir</translation> +<translation id="835897206747267392">Valor no vàlid.</translation> +<translation id="3851140433852960970">No hi ha cap connector disponible per mostrar aquest contingut.</translation> <translation id="1842960171412779397">selecciona</translation> +<translation id="3450233048674729344">El valor ha de ser més petit o igual que <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">El connector necessari no està instal·lat.</translation> <translation id="7638452146404718955">Feu clic aquí per baixar el connector</translation> <translation id="6119846243427417423">activa</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> fitxers</translation> -<translation id="4470547978413275879">El connector <ph name="PLUGIN"/> no està instal·lat</translation> -<translation id="6765711848403622008">No hi ha cap connector disponible per mostrar aquest contingut</translation> -<translation id="8597182159515967513">Capçalera</translation> +<translation id="3934680773876859118">No es pot carregar el document en format PDF</translation> +<translation id="8597182159515967513">Encapçalament</translation> <translation id="2653659639078652383">Envia</translation> <translation id="8475551193147984329">Es necessita el connector <ph name="PLUGIN"/></translation> </translationbundle>
\ No newline at end of file diff --git a/webkit/glue/resources/webkit_strings_cs.xtb b/webkit/glue/resources/webkit_strings_cs.xtb index 8d3784f..7b5042b 100644 --- a/webkit/glue/resources/webkit_strings_cs.xtb +++ b/webkit/glue/resources/webkit_strings_cs.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Instalace pluginu z adresy URL <ph name="URL"/> se nezdařila</translation> <translation id="9186171386827445984">Načítání dokumentu: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> stran...</translation> <translation id="1235745349614807883">Smazat nedávná vyhledávání</translation> +<translation id="1171774979989969504">Zadejte prosím e-mailovou adresu.</translation> +<translation id="709897737746224366">Zadejte hodnotu, která odpovídá požadovanému formátu.</translation> <translation id="5048533449481078685">značka seznamu</translation> <translation id="372362261556059955">Je zapotřebí další plugin</translation> <translation id="4202807286478387388">přejít</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Načítání...</translation> <translation id="6845533974506654842">zmáčknout</translation> <translation id="8244226242650769279">obrázková mapa</translation> +<translation id="310520048233152454">Zadejte prosím adresu URL.</translation> <translation id="2548326553472216322">Žádná nedávná vyhledávání</translation> +<translation id="7263440858009898357">Vyberte prosím v seznamu některou položku.</translation> +<translation id="5164977714490026579">Hodnota musí být větší nebo rovna <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (vysoká kvalita)</translation> <translation id="3040011195152428237">odkaz</translation> <translation id="2745343197843472802">Získat plugin</translation> +<translation id="8451268428117625855">Vyberte prosím soubor.</translation> <translation id="5776402066334188252">Potvrďte prosím, zda tento plugin chcete nainstalovat. Instalujte pouze pluginy, kterým důvěřujete.</translation> -<translation id="4003986561708175844">Požadovaný plugin není nainstalován</translation> <translation id="3018094406922859308">Stahování pluginu...</translation> <translation id="7364796246159120393">Vybrat soubor</translation> +<translation id="2761667185364618470">Chcete-li pokračovat, zaškrtněte toto políčko.</translation> <translation id="8964020114565522021">Přetáhnout soubor sem</translation> +<translation id="5129723458012748440">Plugin <ph name="PLUGIN"/> není nainstalován.</translation> <translation id="838869780401515933">zaškrtnout</translation> <translation id="2846343701378493991">1024 (Střední kvalita)</translation> <translation id="5476505524087279545">odstranit zaškrtnutí</translation> <translation id="3789841737615482174">Instalovat</translation> +<translation id="2507943997699731163">Vyplňte prosím toto pole.</translation> <translation id="5253117816378681419">Potvrďte prosím, zda chcete nainstalovat plugin <ph name="PLUGIN"/>. Instalujte pouze pluginy, kterým důvěřujete.</translation> <translation id="6663448176199120256">Nedávná vyhledávání</translation> +<translation id="7335060848622232389">Instalování pluginů bylo zakázáno.</translation> <translation id="2597378329261239068">Tento dokument je chráněn heslem. Zadejte prosím heslo.</translation> +<translation id="5466621249238537318">Vyberte prosím jeden nebo více souborů.</translation> +<translation id="8750798805984357768">Vyberte jednu z těchto možností.</translation> <translation id="7740050170769002709">Obsah ve formátu HTML</translation> +<translation id="2226276347425096477">Zkraťte prosím tento text na <ph name="MAX_CHARACTERS"/> znaků nebo méně. (Aktuálně má <ph name="CURRENT_LENGTH"/> znaků.)</translation> +<translation id="1639239467298939599">Načítání</translation> +<translation id="2908441821576996758">Zadejte seznam e-mailových adres oddělených čárkami.</translation> <translation id="5939518447894949180">Resetovat</translation> +<translation id="835897206747267392">Neplatná hodnota.</translation> +<translation id="3851140433852960970">Není k dispozici žádný plugin k zobrazení tohoto obsahu.</translation> <translation id="1842960171412779397">zvolit</translation> +<translation id="3450233048674729344">Hodnota musí být menší nebo rovna <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Požadovaný plugin není nainstalován.</translation> <translation id="7638452146404718955">Plugin můžete stáhnout kliknutím sem</translation> <translation id="6119846243427417423">aktivovat</translation> <translation id="8444882422881193423">Počet souborů: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Není nainstalován plugin <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">Není k dispozici žádný plugin k zobrazení tohoto obsahu</translation> +<translation id="3934680773876859118">Načítání dokumentu PDF se nezdařilo.</translation> <translation id="8597182159515967513">záhlaví</translation> <translation id="2653659639078652383">Odeslat</translation> <translation id="8475551193147984329">Je požadován plugin <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_da.xtb b/webkit/glue/resources/webkit_strings_da.xtb index 71d2a6a..ea94bfc 100644 --- a/webkit/glue/resources/webkit_strings_da.xtb +++ b/webkit/glue/resources/webkit_strings_da.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Installation af plugin fra <ph name="URL"/> mislykkedes</translation> <translation id="9186171386827445984">Indlæser dokument: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> sider...</translation> <translation id="1235745349614807883">Slet nylige søgninger</translation> +<translation id="1171774979989969504">Angiv en e-mail-adresse.</translation> +<translation id="709897737746224366">Find et match til det anmodede format.</translation> <translation id="5048533449481078685">listemarkering</translation> <translation id="372362261556059955">Ekstra plugin påkrævet</translation> <translation id="4202807286478387388">hop</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Indlæser ...</translation> <translation id="6845533974506654842">tryk</translation> <translation id="8244226242650769279">billedekort</translation> +<translation id="310520048233152454">Angiv en webadresse.</translation> <translation id="2548326553472216322">Ingen nylige søgninger</translation> +<translation id="7263440858009898357">Vælg et punkt på listen.</translation> +<translation id="5164977714490026579">Værdien skal være større end eller lig med <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Høj klasse)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Hent plugin</translation> +<translation id="8451268428117625855">Vælg en fil.</translation> <translation id="5776402066334188252">Bekræft, at du gerne vil installere dette plugin. Du skal kun installere plugins, som du har tillid til.</translation> -<translation id="4003986561708175844">Det krævede plugin er ikke installeret</translation> <translation id="3018094406922859308">Downloader plugin...</translation> <translation id="7364796246159120393">Vælg fil</translation> +<translation id="2761667185364618470">Marker dette felt, hvis du vil fortsætte.</translation> <translation id="8964020114565522021">Træk filer hertil</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/>-plugin er ikke installeret.</translation> <translation id="838869780401515933">marker</translation> <translation id="2846343701378493991">1024 (Mellemklasse)</translation> <translation id="5476505524087279545">fjern markering</translation> <translation id="3789841737615482174">Installer</translation> +<translation id="2507943997699731163">Udfyld dette felt.</translation> <translation id="5253117816378681419">Bekræft, at du vil installere dette <ph name="PLUGIN"/>-plugin. Du skal kun installere plugins, som du har tillid til.</translation> <translation id="6663448176199120256">Nylige søgninger</translation> +<translation id="7335060848622232389">Installation af plug-ins er blevet deaktiveret.</translation> <translation id="2597378329261239068">Dette dokument er adgangskodebeskyttet. Indtast en adgangskode.</translation> +<translation id="5466621249238537318">Vælg en eller flere filer.</translation> +<translation id="8750798805984357768">Vælg en af disse muligheder.</translation> <translation id="7740050170769002709">HTML-indhold</translation> +<translation id="2226276347425096477">Forkort denne tekst til <ph name="MAX_CHARACTERS"/> tegn eller færre (du bruger i øjeblikket <ph name="CURRENT_LENGTH"/> tegn).</translation> +<translation id="1639239467298939599">Indlæser...</translation> +<translation id="2908441821576996758">Angiv en kommasepareret liste over e-mail-adresser.</translation> <translation id="5939518447894949180">Nulstil</translation> +<translation id="835897206747267392">Ugyldig værdi.</translation> +<translation id="3851140433852960970">Der er intet tilgængeligt plugin, som kan vise dette indhold.</translation> <translation id="1842960171412779397">vælg</translation> +<translation id="3450233048674729344">Værdien skal være mindre end eller lig med <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Det påkrævede plugin er ikke installeret.</translation> <translation id="7638452146404718955">Klik her for at downloade plugin</translation> <translation id="6119846243427417423">aktiver</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> filer</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/>-plugin er ikke installeret</translation> -<translation id="6765711848403622008">Intet tilgængeligt plugin kan vise dette indhold</translation> +<translation id="3934680773876859118">PDF-dokumentet kunne ikke indlæses</translation> <translation id="8597182159515967513">overskrift</translation> <translation id="2653659639078652383">Indsend</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/>-plugin er påkrævet</translation> diff --git a/webkit/glue/resources/webkit_strings_de.xtb b/webkit/glue/resources/webkit_strings_de.xtb index 6d27410..26ce85a 100644 --- a/webkit/glue/resources/webkit_strings_de.xtb +++ b/webkit/glue/resources/webkit_strings_de.xtb @@ -4,42 +4,59 @@ <translation id="4519964825805946997">Installation des Plug-ins von <ph name="URL"/> fehlgeschlagen</translation> <translation id="9186171386827445984">Dokument wird geladen <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> Seiten...</translation> <translation id="1235745349614807883">Vor kurzem durchgeführte Suchanfragen löschen</translation> +<translation id="1171774979989969504">Geben Sie eine E-Mail-Adresse ein.</translation> +<translation id="709897737746224366">Ihre Eingabe muss mit dem geforderten Format übereinstimmen.</translation> <translation id="5048533449481078685">Listenmarkierung</translation> <translation id="372362261556059955">Zusätzliches Plug-in erforderlich</translation> <translation id="4202807286478387388">springen</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> <translation id="7658239707568436148">Abbrechen</translation> -<translation id="795667975304826397">Keine Datei ausgewählt</translation> +<translation id="795667975304826397">Keine ausgewählt</translation> <translation id="1416462845279468967">Plug-in-Installation fehlgeschlagen</translation> <translation id="8141602879876242471">Dieser Index kann durchsucht werden. Geben Sie Suchbegriffe ein:</translation> <translation id="5650795167354946011">Klicken Sie nach der Installation des Plug-ins hier, um eine Aktualisierung durchzuführen.</translation> <translation id="370665806235115550">Wird geladen...</translation> <translation id="6845533974506654842">klicken</translation> <translation id="8244226242650769279">Imagemap</translation> +<translation id="310520048233152454">Geben Sie eine URL ein.</translation> <translation id="2548326553472216322">Keine vor kurzem durchgeführte Suchanfragen</translation> +<translation id="7263440858009898357">Wählen Sie ein Element in der Liste aus.</translation> +<translation id="5164977714490026579">Wert muss größer als oder gleich <ph name="MINIMUM"/> sein.</translation> <translation id="5944544982112848342">2048 (High Grade)</translation> <translation id="3040011195152428237">Link</translation> <translation id="2745343197843472802">Plug-in abrufen</translation> +<translation id="8451268428117625855">Wählen Sie eine Datei aus.</translation> <translation id="5776402066334188252">Bitte bestätigen Sie, dass Sie dieses Plug-in installieren möchten. Installieren Sie nur Plug-ins, denen Sie vertrauen.</translation> -<translation id="4003986561708175844">Das erforderliche Plug-in ist nicht installiert.</translation> <translation id="3018094406922859308">Plug-in wird heruntergeladen...</translation> <translation id="7364796246159120393">Datei auswählen</translation> +<translation id="2761667185364618470">Aktivieren Sie dieses Kontrollkästchen, wenn Sie fortfahren möchten.</translation> <translation id="8964020114565522021">Datei hier ablegen</translation> +<translation id="5129723458012748440">Das Plug-in <ph name="PLUGIN"/> ist nicht installiert.</translation> <translation id="838869780401515933">auswählen</translation> <translation id="2846343701378493991">1024 (mittlere Stufe)</translation> <translation id="5476505524087279545">Auswahl aufheben</translation> <translation id="3789841737615482174">Installieren</translation> +<translation id="2507943997699731163">Füllen Sie dieses Feld aus.</translation> <translation id="5253117816378681419">Bitte bestätigen Sie, dass Sie das Plug-in <ph name="PLUGIN"/> installieren möchten. Installieren Sie nur Plug-ins, denen Sie vertrauen.</translation> <translation id="6663448176199120256">Vor kurzem durchgeführte Suchanfragen</translation> +<translation id="7335060848622232389">Die Installation von Plug-ins wurde deaktiviert.</translation> <translation id="2597378329261239068">Dieses Dokument ist passwortgeschützt. Geben Sie ein Passwort ein.</translation> +<translation id="5466621249238537318">Wählen Sie eine oder mehrere Dateien aus.</translation> +<translation id="8750798805984357768">Wählen Sie eine dieser Optionen aus.</translation> <translation id="7740050170769002709">HTML-Inhalte</translation> +<translation id="2226276347425096477">Kürzen Sie diesen Text auf max. <ph name="MAX_CHARACTERS"/> Zeichen. Derzeit verwenden Sie <ph name="CURRENT_LENGTH"/> Zeichen.</translation> +<translation id="1639239467298939599">Wird geladen...</translation> +<translation id="2908441821576996758">Geben Sie eine durch Kommas getrennte Liste der E-Mail-Adressen ein.</translation> <translation id="5939518447894949180">Zurücksetzen</translation> +<translation id="835897206747267392">Ungültiger Wert.</translation> +<translation id="3851140433852960970">Kein Plug-in zum Anzeigen dieser Inhalte verfügbar</translation> <translation id="1842960171412779397">auswählen</translation> +<translation id="3450233048674729344">Wert muss kleiner als oder gleich <ph name="MAXIMUM"/> sein.</translation> +<translation id="9198010615634362518">Das erforderliche Plug-in ist nicht installiert.</translation> <translation id="7638452146404718955">Hier klicken, um das Plug-in herunterzuladen</translation> <translation id="6119846243427417423">aktivieren</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> Dateien</translation> -<translation id="4470547978413275879">Plug-in <ph name="PLUGIN"/> nicht installiert</translation> -<translation id="6765711848403622008">Kein Plug-in zum Anzeigen dieses Contents verfügbar</translation> +<translation id="3934680773876859118">Fehler beim Laden des PDF-Dokuments</translation> <translation id="8597182159515967513">Kopfzeile</translation> <translation id="2653659639078652383">Senden</translation> <translation id="8475551193147984329">Plug-in <ph name="PLUGIN"/> ist erforderlich</translation> diff --git a/webkit/glue/resources/webkit_strings_el.xtb b/webkit/glue/resources/webkit_strings_el.xtb index c429294..f9bfc2a 100644 --- a/webkit/glue/resources/webkit_strings_el.xtb +++ b/webkit/glue/resources/webkit_strings_el.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Η εγκατάσταση της προσθήκης από τη διεύθυνση <ph name="URL"/> απέτυχε</translation> <translation id="9186171386827445984">Φόρτωση εγγράφου: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> σελίδες...</translation> <translation id="1235745349614807883">Εκκαθάριση πρόσφατων αναζητήσεων</translation> +<translation id="1171774979989969504">Εισαγάγετε μια διεύθυνση ηλεκτρονικού ταχυδρομείου.</translation> +<translation id="709897737746224366">Αντιστοιχίστε τη ζητούμενη μορφή.</translation> <translation id="5048533449481078685">δείκτης λίστας</translation> <translation id="372362261556059955">Απαιτείται επιπλέον προσθήκη</translation> <translation id="4202807286478387388">μεταπήδηση</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Φόρτωση...</translation> <translation id="6845533974506654842">πατήστε</translation> <translation id="8244226242650769279">χάρτης εικόνας</translation> +<translation id="310520048233152454">Εισαγάγετε μια διεύθυνση URL.</translation> <translation id="2548326553472216322">Δεν υπάρχουν πρόσφατες αναζητήσεις</translation> +<translation id="7263440858009898357">Επιλέξτε ένα στοιχείο από τη λίστα.</translation> +<translation id="5164977714490026579">Η τιμή πρέπει να είναι μεγαλύτερη ή ίση του <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Υψηλός βαθμός)</translation> <translation id="3040011195152428237">σύνδεσμος</translation> <translation id="2745343197843472802">Λήψη προσθήκης</translation> +<translation id="8451268428117625855">Επιλέξτε ένα αρχείο.</translation> <translation id="5776402066334188252">Επιβεβαιώστε ότι θέλετε να εγκαταστήσετε αυτή την προσθήκη. Πρέπει να εγκαθιστάτε μόνο προσθήκες που θεωρείτε αξιόπιστες.</translation> -<translation id="4003986561708175844">Η απαιτούμενη προσθήκη δεν έχει εγκατασταθεί</translation> <translation id="3018094406922859308">Λήψη προσθήκης...</translation> <translation id="7364796246159120393">Επιλογή αρχείου</translation> +<translation id="2761667185364618470">Αν θέλετε να συνεχίσετε, επιλέξτε αυτό το πλαίσιο.</translation> <translation id="8964020114565522021">Σύρετε το αρχείο εδώ</translation> +<translation id="5129723458012748440">Η προσθήκη <ph name="PLUGIN"/> δεν έχει εγκατασταθεί.</translation> <translation id="838869780401515933">ενεργοποίηση</translation> <translation id="2846343701378493991">1024 (Μέτριος βαθμός)</translation> <translation id="5476505524087279545">απενεργοποίηση</translation> <translation id="3789841737615482174">Εγκατάσταση</translation> +<translation id="2507943997699731163">Συμπληρώστε αυτό το πεδίο.</translation> <translation id="5253117816378681419">Επιβεβαιώστε ότι θέλετε να εγκαταστήσετε την προσθήκη <ph name="PLUGIN"/>. Πρέπει να εγκαθιστάτε μόνο προσθήκες που θεωρείτε αξιόπιστες.</translation> <translation id="6663448176199120256">Πρόσφατες αναζητήσεις</translation> +<translation id="7335060848622232389">Η εγκατάσταση προσθηκών έχει απενεργοποιηθεί.</translation> <translation id="2597378329261239068">Αυτό το έγγραφο προστατεύεται με κωδικό πρόσβασης. Πληκτρολογήστε έναν κωδικό πρόσβασης.</translation> +<translation id="5466621249238537318">Επιλέξτε ένα ή περισσότερα αρχεία.</translation> +<translation id="8750798805984357768">Ορίστε μία από αυτές τις επιλογές.</translation> <translation id="7740050170769002709">Περιεχόμενο HTML</translation> +<translation id="2226276347425096477">Κάντε πιο σύντομο αυτό το κείμενο ώστε να έχει το πολύ <ph name="MAX_CHARACTERS"/> χαρακτήρες (αυτήν τη στιγμή χρησιμοποιείτε <ph name="CURRENT_LENGTH"/> χαρακτήρες).</translation> +<translation id="1639239467298939599">Γίνεται φόρτωση</translation> +<translation id="2908441821576996758">Εισαγάγετε μια λίστα διευθύνσεων ηλεκτρονικού ταχυδρομείου διαχωρισμένη με κόμματα.</translation> <translation id="5939518447894949180">Επαναφορά</translation> +<translation id="835897206747267392">Μη έγκυρη τιμή.</translation> +<translation id="3851140433852960970">Δεν υπάρχει διαθέσιμη προσθήκη για την εμφάνιση αυτού του περιεχομένου.</translation> <translation id="1842960171412779397">επιλογή</translation> +<translation id="3450233048674729344">Η τιμή πρέπει να είναι μικρότερη ή ίση του <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Η απαιτούμενη προσθήκη δεν είναι εγκατεστημένη.</translation> <translation id="7638452146404718955">Κάντε κλικ εδώ για να κάνετε λήψη της προσθήκης</translation> <translation id="6119846243427417423">ενεργοποίηση</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> αρχεία</translation> -<translation id="4470547978413275879">Η προσθήκη <ph name="PLUGIN"/> δεν έχει εγκατασταθεί</translation> -<translation id="6765711848403622008">Δεν υπάρχει διαθέσιμη προσθήκη για την εμφάνιση αυτού του περιεχομένου</translation> +<translation id="3934680773876859118">Δεν ήταν δυνατή η φόρτωση του εγγράφου PDF</translation> <translation id="8597182159515967513">επικεφαλίδα</translation> <translation id="2653659639078652383">Υποβολή</translation> <translation id="8475551193147984329">Απαιτείται η προσθήκη <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_en-GB.xtb b/webkit/glue/resources/webkit_strings_en-GB.xtb index 417f44a..84f8afe 100644 --- a/webkit/glue/resources/webkit_strings_en-GB.xtb +++ b/webkit/glue/resources/webkit_strings_en-GB.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Failed to install plug-in from <ph name="URL"/></translation> <translation id="9186171386827445984">Loading document: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> pages...</translation> <translation id="1235745349614807883">Clear Recent Searches</translation> +<translation id="1171774979989969504">Please enter an email address.</translation> +<translation id="709897737746224366">Please match the format requested.</translation> <translation id="5048533449481078685">list marker</translation> <translation id="372362261556059955">Additional plug-in needed</translation> <translation id="4202807286478387388">jump</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Loading...</translation> <translation id="6845533974506654842">press</translation> <translation id="8244226242650769279">image map</translation> +<translation id="310520048233152454">Please enter a URL.</translation> <translation id="2548326553472216322">No recent searches</translation> +<translation id="7263440858009898357">Please select an item in the list.</translation> +<translation id="5164977714490026579">Value must be greater than or equal to <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (High Grade)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Get Plug-in</translation> +<translation id="8451268428117625855">Please select a file.</translation> <translation id="5776402066334188252">Please confirm that you would like to install this plug-in. You should only install plug-ins that you trust.</translation> -<translation id="4003986561708175844">The plug-in required is not installed</translation> <translation id="3018094406922859308">Downloading plug-in...</translation> <translation id="7364796246159120393">Choose File</translation> +<translation id="2761667185364618470">Please tick this box if you want to proceed.</translation> <translation id="8964020114565522021">Drag file here</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> plug-in is not installed.</translation> <translation id="838869780401515933">tick</translation> <translation id="2846343701378493991">1024 (Medium Grade)</translation> <translation id="5476505524087279545">untick</translation> <translation id="3789841737615482174">Install</translation> +<translation id="2507943997699731163">Please fill in this field.</translation> <translation id="5253117816378681419">Please confirm that you would like to install the <ph name="PLUGIN"/> plug-in. You should only install plug-ins that you trust.</translation> <translation id="6663448176199120256">Recent Searches</translation> +<translation id="7335060848622232389">Installing plug-ins has been disabled.</translation> <translation id="2597378329261239068">This document is password-protected. Please enter a password.</translation> +<translation id="5466621249238537318">Please select one or more files.</translation> +<translation id="8750798805984357768">Please select one of these options.</translation> <translation id="7740050170769002709">HTML content</translation> +<translation id="2226276347425096477">Please shorten this text to <ph name="MAX_CHARACTERS"/> characters or less (you are currently using <ph name="CURRENT_LENGTH"/> characters).</translation> +<translation id="1639239467298939599">Loading</translation> +<translation id="2908441821576996758">Please enter a comma-separated list of email addresses.</translation> <translation id="5939518447894949180">Reset</translation> +<translation id="835897206747267392">Invalid value.</translation> +<translation id="3851140433852960970">No plug-in available to display this content</translation> <translation id="1842960171412779397">select</translation> +<translation id="3450233048674729344">Value must be less than or equal to <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">The plug-in required is not installed.</translation> <translation id="7638452146404718955">Click here to download plug-in</translation> <translation id="6119846243427417423">activate</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> files</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> plug-in is not installed</translation> -<translation id="6765711848403622008">No plug-in available to display this content</translation> +<translation id="3934680773876859118">Failed to load PDF document</translation> <translation id="8597182159515967513">heading</translation> <translation id="2653659639078652383">Submit</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> plug-in needed</translation> diff --git a/webkit/glue/resources/webkit_strings_es-419.xtb b/webkit/glue/resources/webkit_strings_es-419.xtb index 5ec0935..82df076 100644 --- a/webkit/glue/resources/webkit_strings_es-419.xtb +++ b/webkit/glue/resources/webkit_strings_es-419.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Error al instalar el complemento desde <ph name="URL"/></translation> <translation id="9186171386827445984">Cargando documento: páginas <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/>...</translation> <translation id="1235745349614807883">Eliminar búsquedas recientes</translation> +<translation id="1171774979989969504">Ingresa una dirección de correo electrónico.</translation> +<translation id="709897737746224366">Haz coincidir el formato solicitado.</translation> <translation id="5048533449481078685">marcador de listas</translation> <translation id="372362261556059955">Se necesita un complemento adicional</translation> <translation id="4202807286478387388">saltar</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Cargando...</translation> <translation id="6845533974506654842">hacer clic</translation> <translation id="8244226242650769279">mapa de imágenes</translation> +<translation id="310520048233152454">Ingresa una URL.</translation> <translation id="2548326553472216322">No hay búsquedas recientes</translation> +<translation id="7263440858009898357">Selecciona un elemento de la lista</translation> +<translation id="5164977714490026579">El valor debe ser mayor de o igual a <ph name="MINIMUM"/></translation> <translation id="5944544982112848342">2048 (Grado elevado)</translation> <translation id="3040011195152428237">enlace</translation> <translation id="2745343197843472802">Obtener complemento</translation> +<translation id="8451268428117625855">Selecciona un archivo.</translation> <translation id="5776402066334188252">Confirma que deseas instalar este complemento. Sólo deberías instalar los complementos confiables.</translation> -<translation id="4003986561708175844">El complemento requerido no está instalado</translation> <translation id="3018094406922859308">Descargando complemento...</translation> <translation id="7364796246159120393">Seleccionar archivo</translation> +<translation id="2761667185364618470">Controla esta casilla si deseas continuar.</translation> <translation id="8964020114565522021">Arrastre el archivo hasta aquí</translation> +<translation id="5129723458012748440">El complemento <ph name="PLUGIN"/> no está instalado.</translation> <translation id="838869780401515933">marcar</translation> <translation id="2846343701378493991">1024 (Mediano)</translation> <translation id="5476505524087279545">desmarcar</translation> <translation id="3789841737615482174">Instalar</translation> +<translation id="2507943997699731163">Completa este campo</translation> <translation id="5253117816378681419">Confirma que deseas instalar el complemento <ph name="PLUGIN"/>. Sólo deberías instalar los complementos confiables.</translation> <translation id="6663448176199120256">Búsquedas recientes</translation> +<translation id="7335060848622232389">Se ha desactivado la instalación de complementos.</translation> <translation id="2597378329261239068">Este documento está protegido por contraseña. Ingresa una contraseña.</translation> +<translation id="5466621249238537318">Selecciona uno o más archivos.</translation> +<translation id="8750798805984357768">Selecciona una de estas opciones.</translation> <translation id="7740050170769002709">Contenido HTML</translation> +<translation id="2226276347425096477">Acorta este texto a <ph name="MAX_CHARACTERS"/> caracteres o menos (actualmente estás usando <ph name="CURRENT_LENGTH"/> caracteres).</translation> +<translation id="1639239467298939599">Cargando</translation> +<translation id="2908441821576996758">Ingresa una lista de direcciones de correo electrónico separadas por coma</translation> <translation id="5939518447894949180">Restablecer</translation> +<translation id="835897206747267392">Valor no válido.</translation> +<translation id="3851140433852960970">Ningún complemento disponible para mostrar este contenido.</translation> <translation id="1842960171412779397">seleccionar</translation> +<translation id="3450233048674729344">El valor debe ser menor de o igual a <ph name="MAXIMUM"/></translation> +<translation id="9198010615634362518">El complemento requerido no está instalado.</translation> <translation id="7638452146404718955">Haz clic aquí para descargar el complemento</translation> <translation id="6119846243427417423">activar</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> archivos</translation> -<translation id="4470547978413275879">El complemento <ph name="PLUGIN"/> no está instalado</translation> -<translation id="6765711848403622008">No se encuentra disponible ningún complemento para mostrar este contenido</translation> +<translation id="3934680773876859118">No se pudo cargar el documento PDF</translation> <translation id="8597182159515967513">cabecera</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="8475551193147984329">Se necesita el complemento <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_es.xtb b/webkit/glue/resources/webkit_strings_es.xtb index 8315543..2979daf 100644 --- a/webkit/glue/resources/webkit_strings_es.xtb +++ b/webkit/glue/resources/webkit_strings_es.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Se ha producido un error al descargar el complemento de la página <ph name="URL"/>.</translation> <translation id="9186171386827445984">Cargando documento: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> páginas...</translation> <translation id="1235745349614807883">Eliminar búsquedas recientes</translation> +<translation id="1171774979989969504">Introduce una dirección de correo electrónico</translation> +<translation id="709897737746224366">Utiliza un formato que coincida con el solicitado</translation> <translation id="5048533449481078685">marcador de listas</translation> <translation id="372362261556059955">Se necesita un complemento adicional</translation> <translation id="4202807286478387388">saltar</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Cargando...</translation> <translation id="6845533974506654842">pulsar</translation> <translation id="8244226242650769279">mapa de imágenes</translation> +<translation id="310520048233152454">Introduce una URL</translation> <translation id="2548326553472216322">No hay búsquedas recientes</translation> +<translation id="7263440858009898357">Selecciona un elemento de la lista</translation> +<translation id="5164977714490026579">El valor debe superior o igual a <ph name="MINIMUM"/></translation> <translation id="5944544982112848342">2048 (Grado elevado)</translation> <translation id="3040011195152428237">enlace</translation> <translation id="2745343197843472802">Obtener complemento</translation> +<translation id="8451268428117625855">Selecciona un archivo</translation> <translation id="5776402066334188252">Confirma que quieres instalar este complemento. Solo debes instalar complementos en los que confíes.</translation> -<translation id="4003986561708175844">No está instalado el complemento necesario.</translation> <translation id="3018094406922859308">Cargando complemento...</translation> <translation id="7364796246159120393">Seleccionar archivo</translation> +<translation id="2761667185364618470">Selecciona esta casilla de verificación si quieres continuar</translation> <translation id="8964020114565522021">Arrastrar archivo hasta aquí</translation> +<translation id="5129723458012748440">El complemento <ph name="PLUGIN"/> no está instalado.</translation> <translation id="838869780401515933">marcar</translation> <translation id="2846343701378493991">1024 (Mediano)</translation> <translation id="5476505524087279545">desmarcar</translation> <translation id="3789841737615482174">Instalar</translation> +<translation id="2507943997699731163">Completa este campo</translation> <translation id="5253117816378681419">Confirma que quieres instalar el complemento <ph name="PLUGIN"/>. Solo debes instalar complementos en los que confíes.</translation> <translation id="6663448176199120256">Búsquedas recientes</translation> +<translation id="7335060848622232389">Se ha inhabilitado la instalación de complementos.</translation> <translation id="2597378329261239068">Este documento está protegido por contraseña. Introduce una contraseña.</translation> +<translation id="5466621249238537318">Selecciona uno o varios archivos</translation> +<translation id="8750798805984357768">Selecciona una de estas opciones</translation> <translation id="7740050170769002709">Contenido HTML</translation> +<translation id="2226276347425096477">Reduce la longitud de este texto a <ph name="MAX_CHARACTERS"/> caracteres o menos (actualmente, el texto tiene <ph name="CURRENT_LENGTH"/> caracteres)</translation> +<translation id="1639239467298939599">Cargando</translation> +<translation id="2908441821576996758">Introduce una lista de direcciones de correo electrónico separada por comas</translation> <translation id="5939518447894949180">Restablecer</translation> +<translation id="835897206747267392">Valor no válido</translation> +<translation id="3851140433852960970">No hay ningún complemento disponible para mostrar este contenido.</translation> <translation id="1842960171412779397">seleccionar</translation> +<translation id="3450233048674729344">El valor debe inferior o igual a <ph name="MAXIMUM"/></translation> +<translation id="9198010615634362518">No está instalado el complemento necesario.</translation> <translation id="7638452146404718955">Haz clic aquí para descargar el complemento.</translation> <translation id="6119846243427417423">activar</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> archivos</translation> -<translation id="4470547978413275879">El complemento <ph name="PLUGIN"/> no está instalado.</translation> -<translation id="6765711848403622008">No hay ningún complemento disponible para mostrar este contenido.</translation> +<translation id="3934680773876859118">Se ha producido un error al cargar el documento PDF.</translation> <translation id="8597182159515967513">cabecera</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="8475551193147984329">Es necesario el complemento <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_et.xtb b/webkit/glue/resources/webkit_strings_et.xtb index e5932ac..c8a642e 100644 --- a/webkit/glue/resources/webkit_strings_et.xtb +++ b/webkit/glue/resources/webkit_strings_et.xtb @@ -4,11 +4,13 @@ <translation id="4519964825805946997">Pistikprogrammi installimine asukohast <ph name="URL"/> ebaõnnestus.</translation> <translation id="9186171386827445984">Dokumendi laadimine: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> lehte ...</translation> <translation id="1235745349614807883">Kustuta viimased otsingud</translation> +<translation id="1171774979989969504">Sisestage meiliaadress.</translation> +<translation id="709897737746224366">Vastendage nõutav vorming.</translation> <translation id="5048533449481078685">loendilooja</translation> <translation id="372362261556059955">Vaja on täiendavat pistikprogrammi</translation> <translation id="4202807286478387388">liigu</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> -<translation id="7658239707568436148">Loobu</translation> +<translation id="7658239707568436148">Tühista</translation> <translation id="795667975304826397">Ühtegi faili pole valitud</translation> <translation id="1416462845279468967">Pistikprogrammi installimine nurjus</translation> <translation id="8141602879876242471">See on otsitav indeks. Sisestage otsingu jaoks märksõnad:</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Laadimine...</translation> <translation id="6845533974506654842">vajuta</translation> <translation id="8244226242650769279">hüperpilt</translation> +<translation id="310520048233152454">Sisestage URL.</translation> <translation id="2548326553472216322">Pole viimaseid otsingud</translation> +<translation id="7263440858009898357">Valige loendist element.</translation> +<translation id="5164977714490026579">Väärtus peab olema suurem või võrdne <ph name="MINIMUM"/>-ga.</translation> <translation id="5944544982112848342">2048 (kõrge)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Hangi pistikprogramm</translation> +<translation id="8451268428117625855">Valige üks fail.</translation> <translation id="5776402066334188252">Palun kinnitage, et soovite pistikprogrammi installida. Peaksite installima vaid usaldusväärseid pistikprogramme.</translation> -<translation id="4003986561708175844">Nõutav pistikprogramm ei ole installitud</translation> <translation id="3018094406922859308">Pistikprogrammi allalaadimine...</translation> <translation id="7364796246159120393">Vali fail</translation> +<translation id="2761667185364618470">Märkige see ruut, kui soovite jätkata.</translation> <translation id="8964020114565522021">Lohistage fail siia</translation> +<translation id="5129723458012748440">Pistikprogramm <ph name="PLUGIN"/> ei ole installitud.</translation> <translation id="838869780401515933">mrgista</translation> <translation id="2846343701378493991">1024 (keskmine)</translation> <translation id="5476505524087279545">eemalda mrgistus</translation> <translation id="3789841737615482174">Installi</translation> +<translation id="2507943997699731163">Täitke see väli.</translation> <translation id="5253117816378681419">Palun kinnitage, et soovite pistikprogrammi <ph name="PLUGIN"/> installida. Peaksite installima vaid usaldusväärseid pistikprogramme.</translation> <translation id="6663448176199120256">Viimased otsingud</translation> +<translation id="7335060848622232389">Pistikprogrammide installimine on keelatud.</translation> <translation id="2597378329261239068">Dokument on parooliga kaitstud. Sisestage parool.</translation> +<translation id="5466621249238537318">Valige üks või mitu faili.</translation> +<translation id="8750798805984357768">Tehke üks nendest valikutest.</translation> <translation id="7740050170769002709">HTML-sisu</translation> +<translation id="2226276347425096477">Lühendage seda teksti <ph name="MAX_CHARACTERS"/> tähemärgini või rohkem (praegu kasutate <ph name="CURRENT_LENGTH"/> tähemärki).</translation> +<translation id="1639239467298939599">Laadimine</translation> +<translation id="2908441821576996758">Sisestage meiliaadresside loend komadega eraldatult.</translation> <translation id="5939518447894949180">Lähtesta</translation> +<translation id="835897206747267392">Kehtetu väärtus.</translation> +<translation id="3851140433852960970">Sisu kuvamiseks ei ole pistikprogrammi saadaval.</translation> <translation id="1842960171412779397">vali</translation> +<translation id="3450233048674729344">Väärtus peab olema väiksem või võrdne <ph name="MAXIMUM"/>-ga.</translation> +<translation id="9198010615634362518">Nõutav pistikprogramm ei ole installitud.</translation> <translation id="7638452146404718955">Pistikprogrammi allalaadimiseks klõpsake siin</translation> <translation id="6119846243427417423">aktiveeri</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> faili</translation> -<translation id="4470547978413275879">Pistikprogramm <ph name="PLUGIN"/> ei ole installitud</translation> -<translation id="6765711848403622008">Sisu kuvamiseks ei ole saadaval pistikprogrammi</translation> +<translation id="3934680773876859118">PDF-dokumendi laadimine nurjus</translation> <translation id="8597182159515967513">pealkiri</translation> <translation id="2653659639078652383">Esita</translation> <translation id="8475551193147984329">Vajalik on pistikprogramm <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_fa.xtb b/webkit/glue/resources/webkit_strings_fa.xtb index 094ad9f..df8ff69 100644 --- a/webkit/glue/resources/webkit_strings_fa.xtb +++ b/webkit/glue/resources/webkit_strings_fa.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">نصب افزونه از <ph name="URL"/> ناموفق بود</translation> <translation id="9186171386827445984">در حال بارگیری سند: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> صفحات...</translation> <translation id="1235745349614807883">پاک کردن جستجوهای اخیر</translation> +<translation id="1171774979989969504">لطفاً یک آدرس ایمیل وارد کنید.</translation> +<translation id="709897737746224366">لطفاً با قالب درخواستی مطابقت دهید.</translation> <translation id="5048533449481078685">علامت گذار لیست</translation> <translation id="372362261556059955">افزونه دیگری مورد نیاز است</translation> <translation id="4202807286478387388">پرش</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">درحال بارگیری...</translation> <translation id="6845533974506654842">فشار دادن</translation> <translation id="8244226242650769279">نقشه تصویر</translation> +<translation id="310520048233152454">لطفاً یک URL وارد کنید.</translation> <translation id="2548326553472216322">جستجوی جدیدی وجود ندارد</translation> +<translation id="7263440858009898357">لطفاً یک مورد را در لیست انتخاب کنید.</translation> +<translation id="5164977714490026579">مقدار باید بیشتر یا مساوی با <ph name="MINIMUM"/> باشد.</translation> <translation id="5944544982112848342">2048 (درجه بالا)</translation> <translation id="3040011195152428237">پیوند</translation> <translation id="2745343197843472802">دریافت افزونه</translation> +<translation id="8451268428117625855">لطفاً یک فایل انتخاب کنید.</translation> <translation id="5776402066334188252">لطفاً تأیید کنید که می خواهید این افزونه را نصب کنید. شما باید فقط افزونه هایی را نصب کنید که به آنها اعتماد دارید.</translation> -<translation id="4003986561708175844">افزونه ضروری نصب نشده است</translation> <translation id="3018094406922859308">در حال دانلود افزونه...</translation> <translation id="7364796246159120393">انتخاب فایل</translation> +<translation id="2761667185364618470">در صورتی که می خواهید ادامه دهید، این کادر را انتخاب کنید.</translation> <translation id="8964020114565522021">فایل را اینجا بکشید</translation> +<translation id="5129723458012748440">افزونه <ph name="PLUGIN"/> نصب نشده است.</translation> <translation id="838869780401515933">علامتگذاری</translation> <translation id="2846343701378493991">1024 (درجه متوسط)</translation> <translation id="5476505524087279545">برداشتن علامت</translation> <translation id="3789841737615482174">نصب</translation> +<translation id="2507943997699731163">لطفاً این قسمت را تکمیل کنید.</translation> <translation id="5253117816378681419">لطفاً تأیید کنید که مایلید افزونه <ph name="PLUGIN"/> نصب شود. فقط باید افزونه هایی را نصب کنید که به آنها اعتماد دارید.</translation> <translation id="6663448176199120256">جستجوهای جدید</translation> +<translation id="7335060848622232389">نصب افزونه ها غیرفعال شد.</translation> <translation id="2597378329261239068">این سند توسط رمز ورود محافظت می شود. لطفاً یک رمز ورود وارد کنید.</translation> +<translation id="5466621249238537318">لطفاً یک یا چند فایل را انتخاب کنید.</translation> +<translation id="8750798805984357768">لطفاً یکی از این گزینه ها را انتخاب کنید.</translation> <translation id="7740050170769002709">محتوای HTML</translation> +<translation id="2226276347425096477">لطفاً این متن را به اندازه <ph name="MAX_CHARACTERS"/> نویسه یا کمتر کوتاه کنید (شما در حال حاضر از <ph name="CURRENT_LENGTH"/> نویسه استفاده می کنید).</translation> +<translation id="1639239467298939599">بارگیری</translation> +<translation id="2908441821576996758">لطفاً لیستی از آدرس های ایمیل که با کاما از هم جدا شده اند را وارد کنید.</translation> <translation id="5939518447894949180">بازنشانی</translation> +<translation id="835897206747267392">مقدار نامعتبر.</translation> +<translation id="3851140433852960970">هیچ افزونه ای برای نمایش این محتوا در دسترس نیست.</translation> <translation id="1842960171412779397">انتخاب</translation> +<translation id="3450233048674729344">مقدار باید کمتر یا برابر با <ph name="MAXIMUM"/> باشد.</translation> +<translation id="9198010615634362518">افزونه مورد نیاز نصب نشده است.</translation> <translation id="7638452146404718955">برای دانلود کردن افزونه اینجا را کلیک کنید</translation> <translation id="6119846243427417423">فعالسازی</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> فایل</translation> -<translation id="4470547978413275879">افزونه <ph name="PLUGIN"/> نصب نشده است</translation> -<translation id="6765711848403622008">هیچ افزونه ای برای نمایش این محتوا در دسترس نیست</translation> +<translation id="3934680773876859118">بارگیری سند PDF انجام نشد</translation> <translation id="8597182159515967513">عنوان</translation> <translation id="2653659639078652383">ارائه</translation> <translation id="8475551193147984329">افزونه <ph name="PLUGIN"/> مورد نیاز است</translation> diff --git a/webkit/glue/resources/webkit_strings_fi.xtb b/webkit/glue/resources/webkit_strings_fi.xtb index 604021f..30a1b3a 100644 --- a/webkit/glue/resources/webkit_strings_fi.xtb +++ b/webkit/glue/resources/webkit_strings_fi.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Laajennuksen asennus osoitteesta <ph name="URL"/> epäonnistui</translation> <translation id="9186171386827445984">Ladataan asiakirjaa: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> sivua...</translation> <translation id="1235745349614807883">Poista viimeisimmät haut</translation> +<translation id="1171774979989969504">Anna sähköpostiosoite.</translation> +<translation id="709897737746224366">Käytä pyydettyä muotoilua.</translation> <translation id="5048533449481078685">luettelon merkitsijä</translation> <translation id="372362261556059955">Toinen laajennus vaaditaan</translation> <translation id="4202807286478387388">siirry</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Ladataan...</translation> <translation id="6845533974506654842">paina</translation> <translation id="8244226242650769279">kuvakartta</translation> +<translation id="310520048233152454">Anna URL-osoite.</translation> <translation id="2548326553472216322">Ei viimeisimpiä hakuja</translation> +<translation id="7263440858009898357">Valitse kohde luettelosta.</translation> +<translation id="5164977714490026579">Arvon tulee olla suurempi tai yhtä suuri kuin <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (korkea taso)</translation> <translation id="3040011195152428237">linkki</translation> <translation id="2745343197843472802">Hanki laajennus</translation> +<translation id="8451268428117625855">Valitse tiedosto.</translation> <translation id="5776402066334188252">Vahvista, että haluat asentaa tämän laajennuksen. Suosittelemme asentamaan vain laajennuksia, joihin luotat.</translation> -<translation id="4003986561708175844">Vaadittua laajennusta ei ole asennettu</translation> <translation id="3018094406922859308">Laajennusta ladataan...</translation> <translation id="7364796246159120393">Valitse tiedosto</translation> +<translation id="2761667185364618470">Valitse tämä ruutu jatkaaksesi.</translation> <translation id="8964020114565522021">Vedä tiedosto tähän</translation> +<translation id="5129723458012748440">Laajennusta <ph name="PLUGIN"/> ei ole asennettu.</translation> <translation id="838869780401515933">valitse</translation> <translation id="2846343701378493991">1024 (keskitaso)</translation> <translation id="5476505524087279545">poista valinta</translation> <translation id="3789841737615482174">Asenna</translation> +<translation id="2507943997699731163">Täytä tämä kenttä.</translation> <translation id="5253117816378681419">Vahvista, että haluat asentaa laajennuksen <ph name="PLUGIN"/>. Suosittelemme asentamaan vain laajennuksia, joihin luotat.</translation> <translation id="6663448176199120256">Viimeisimmät haut</translation> +<translation id="7335060848622232389">Laajennuksien asentaminen on poistettu käytöstä.</translation> <translation id="2597378329261239068">Tämä asiakirja on suojattu salasanalla. Anna salasana.</translation> +<translation id="5466621249238537318">Valitse vähintään yksi tiedosto.</translation> +<translation id="8750798805984357768">Valitse yksi vaihtoehdoista.</translation> <translation id="7740050170769002709">HTML-sisältö</translation> +<translation id="2226276347425096477">Lyhennä tämä teksti alle <ph name="MAX_CHARACTERS"/> merkkiin (tällä hetkellä käytössä <ph name="CURRENT_LENGTH"/> merkkiä).</translation> +<translation id="1639239467298939599">Ladataan</translation> +<translation id="2908441821576996758">Anna pilkuilla erotettu sähköpostiosoitteiden luettelo.</translation> <translation id="5939518447894949180">Tyhjennä</translation> +<translation id="835897206747267392">Virheellinen arvo.</translation> +<translation id="3851140433852960970">Tämän sisällön näyttämiseen ei ole saatavissa laajennusta.</translation> <translation id="1842960171412779397">Valitse</translation> +<translation id="3450233048674729344">Arvon tulee olla pienempi tai yhtä suuri kuin <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Vaadittua laajennusta ei ole asennettu.</translation> <translation id="7638452146404718955">Lataa laajennus napsauttamalla tätä</translation> <translation id="6119846243427417423">aktivoi</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> tiedostoa</translation> -<translation id="4470547978413275879">Laajennusta <ph name="PLUGIN"/> ei asennettu</translation> -<translation id="6765711848403622008">Tämän sisällön näyttämiseen ei ole saatavissa laajennusta</translation> +<translation id="3934680773876859118">PDF-asiakirjan lataaminen epäonnistui</translation> <translation id="8597182159515967513">otsikko</translation> <translation id="2653659639078652383">Lähetä</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/>-laajennus vaaditaan</translation> diff --git a/webkit/glue/resources/webkit_strings_fil.xtb b/webkit/glue/resources/webkit_strings_fil.xtb index 8459aca..1c28c61 100644 --- a/webkit/glue/resources/webkit_strings_fil.xtb +++ b/webkit/glue/resources/webkit_strings_fil.xtb @@ -4,11 +4,13 @@ <translation id="4519964825805946997">Nabigong ma-install ang plug-in mula sa <ph name="URL"/></translation> <translation id="9186171386827445984">Nilo-load ang dokumento: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> (na) pahina...</translation> <translation id="1235745349614807883">Lisiman ang Kasalukuyang Mga Paghahanap</translation> +<translation id="1171774979989969504">Mangyaring magpasok ng email address.</translation> +<translation id="709897737746224366">Pakitugma ang hiniling na format.</translation> <translation id="5048533449481078685">Ilista ang marker</translation> <translation id="372362261556059955">Kinakailangan ang karagdagang plug-in</translation> <translation id="4202807286478387388">tumalon</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> -<translation id="7658239707568436148">Ikansela</translation> +<translation id="7658239707568436148">Kanselahin</translation> <translation id="795667975304826397">Walang napiling file</translation> <translation id="1416462845279468967">Nabigo ang pag-install ng plug-in</translation> <translation id="8141602879876242471">Isa itong paghahanap ng index. Ipasok ang paghahanap sa mga keyword:</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Kumakarga...</translation> <translation id="6845533974506654842">pindutin</translation> <translation id="8244226242650769279">mapa ng imahe</translation> +<translation id="310520048233152454">Mangyaring magpasok ng URL.</translation> <translation id="2548326553472216322">Walang kamakailang mga paghahanap</translation> +<translation id="7263440858009898357">Mangyaring pumili ng item sa listahan.</translation> +<translation id="5164977714490026579">Dapat mas mataas kaysa sa o katumbas ng <ph name="MINIMUM"/> ang halaga.</translation> <translation id="5944544982112848342">2048 (Pinakamataas na Marka)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Kumuha ng Plug-in</translation> +<translation id="8451268428117625855">Mangyaring pumili ng file.</translation> <translation id="5776402066334188252">Pakikumpirma na nais mong i-install ang plug-in na ito. Dapat mong i-install lamang ang mga plug-in na iyong pinagkakatiwalaan.</translation> -<translation id="4003986561708175844">Hindi na-install ang kinakailangang plug-in</translation> <translation id="3018094406922859308">Nagda-download ng plug-in...</translation> <translation id="7364796246159120393">Pumili ng File</translation> +<translation id="2761667185364618470">Pakitingnan ang kahon na ito kung gusto mong magpatuloy.</translation> <translation id="8964020114565522021">Kaldkarin dito ang file</translation> +<translation id="5129723458012748440">Hindi naka-install ang <ph name="PLUGIN"/> na plug-in.</translation> <translation id="838869780401515933">I-tsek</translation> <translation id="2846343701378493991">1024 (Katamtamang Grado)</translation> <translation id="5476505524087279545">i-uncheck</translation> <translation id="3789841737615482174">Install</translation> +<translation id="2507943997699731163">Pakipunan ang field na ito.</translation> <translation id="5253117816378681419">Pakikumpirma na gusto mong i-install ang <ph name="PLUGIN"/> plug-in na ito. Dapat mong i-install lamang ang mga plug-in na iyong pinagkakatiwalaan.</translation> <translation id="6663448176199120256">Kasalukuyang Mga Paghahanap</translation> +<translation id="7335060848622232389">Hindi pinagana ang pag-install ng mga plug-in.</translation> <translation id="2597378329261239068">Protektado ng password ang dokumentong ito. Mangyaring magpasok ng password.</translation> +<translation id="5466621249238537318">Mangyaring pumili ng isa o higit pang mga file.</translation> +<translation id="8750798805984357768">Mangyaring pumili ng isa sa mga opsyong ito.</translation> <translation id="7740050170769002709">HTML na nilalaman</translation> +<translation id="2226276347425096477">Mangyaring paikliin ang tekstong ito ng <ph name="MAX_CHARACTERS"/> (na) character o mas mababa (kasalukuyan kang gumagamit ng <ph name="CURRENT_LENGTH"/> (na) character).</translation> +<translation id="1639239467298939599">Naglo-load</translation> +<translation id="2908441821576996758">Mangyaring magpasok ng listahan ng email address na pinaghihiwalay ng kuwit.</translation> <translation id="5939518447894949180">I-reset</translation> +<translation id="835897206747267392">Di-wastong halaga.</translation> +<translation id="3851140433852960970">Walang available na plug-in na magpapakita ng nilalamang ito.</translation> <translation id="1842960171412779397">piliin</translation> +<translation id="3450233048674729344">Dapat mas mababa kaysa sa o katumbas ng <ph name="MAXIMUM"/> ang halaga.</translation> +<translation id="9198010615634362518">Hindi naka-install ang kinakailangang plug-in.</translation> <translation id="7638452146404718955">Mag-click dito upang ma-download ang plug-in</translation> <translation id="6119846243427417423">isaaktibo</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> mga file</translation> -<translation id="4470547978413275879">Hindi naka-install ang <ph name="PLUGIN"/> na plug-in</translation> -<translation id="6765711848403622008">Walang magagamit na plug-in upang maipakita ang nilalamang ito</translation> +<translation id="3934680773876859118">Nabigong i-load ang dokumentong PDF</translation> <translation id="8597182159515967513">heading</translation> <translation id="2653659639078652383">Isumite</translation> <translation id="8475551193147984329">Kinakailangan ang plug-in na <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_fr.xtb b/webkit/glue/resources/webkit_strings_fr.xtb index ab1e32f..45d05c5 100644 --- a/webkit/glue/resources/webkit_strings_fr.xtb +++ b/webkit/glue/resources/webkit_strings_fr.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Échec de l'installation du plug-in depuis <ph name="URL"/></translation> <translation id="9186171386827445984">Chargement du document : <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> pages...</translation> <translation id="1235745349614807883">Effacer les recherches récentes</translation> +<translation id="1171774979989969504">Veuillez saisir une adresse e-mail.</translation> +<translation id="709897737746224366">Veuillez respecter le format requis.</translation> <translation id="5048533449481078685">marqueur de liste</translation> <translation id="372362261556059955">Plug-in supplémentaire requis</translation> <translation id="4202807286478387388">accéder</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Chargement...</translation> <translation id="6845533974506654842">appuyer</translation> <translation id="8244226242650769279">image map</translation> +<translation id="310520048233152454">Veuillez saisir une URL.</translation> <translation id="2548326553472216322">Aucune recherche récente</translation> +<translation id="7263440858009898357">Sélectionnez un élément dans la liste.</translation> +<translation id="5164977714490026579">Cette valeur doit être supérieure ou égale à <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (haute sécurité)</translation> <translation id="3040011195152428237">Lien</translation> <translation id="2745343197843472802">Télécharger le plug-in</translation> +<translation id="8451268428117625855">Veuillez sélectionner un fichier.</translation> <translation id="5776402066334188252">Merci de confirmer que vous souhaitez installer ce plug-in. N'installez que les plug-ins que vous considérez fiables.</translation> -<translation id="4003986561708175844">Le plug-in requis n'est pas installé.</translation> <translation id="3018094406922859308">Téléchargement du plug-in...</translation> <translation id="7364796246159120393">Choisissez un fichier</translation> +<translation id="2761667185364618470">Veuillez cocher cette case si vous souhaitez continuer.</translation> <translation id="8964020114565522021">Placer le fichier ici</translation> +<translation id="5129723458012748440">Le plug-in <ph name="PLUGIN"/> n'est pas installé.</translation> <translation id="838869780401515933">cocher</translation> <translation id="2846343701378493991">1024 (sécurité moyenne)</translation> <translation id="5476505524087279545">décocher</translation> <translation id="3789841737615482174">Installer</translation> +<translation id="2507943997699731163">Veuillez renseigner ce champ.</translation> <translation id="5253117816378681419">Merci de confirmer que vous souhaitez installer le plug-in <ph name="PLUGIN"/>. N'installez que les plug-ins que vous considérez fiables.</translation> <translation id="6663448176199120256">Recherches récentes</translation> +<translation id="7335060848622232389">L'installation de plug-ins a été désactivée.</translation> <translation id="2597378329261239068">Ce document est protégé par mot de passe. Veuillez saisir ce dernier.</translation> +<translation id="5466621249238537318">Veuillez sélectionner un ou plusieurs fichiers.</translation> +<translation id="8750798805984357768">Veuillez sélectionner l'une de ces options.</translation> <translation id="7740050170769002709">Contenu HTML</translation> +<translation id="2226276347425096477">Veuillez réduire ce texte à <ph name="MAX_CHARACTERS"/> caractères maximum (il compte actuellement <ph name="CURRENT_LENGTH"/> caractères).</translation> +<translation id="1639239467298939599">Chargement en cours</translation> +<translation id="2908441821576996758">Veuillez saisir une liste d'adresses e-mail séparées par une virgule.</translation> <translation id="5939518447894949180">Réinitialiser</translation> +<translation id="835897206747267392">Valeur incorrecte</translation> +<translation id="3851140433852960970">Aucun plug-in disponible pour afficher ce contenu.</translation> <translation id="1842960171412779397">sélectionner</translation> +<translation id="3450233048674729344">Cette valeur doit être inférieure ou égale à <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Le plug-in requis n'est pas installé.</translation> <translation id="7638452146404718955">Cliquer ici pour télécharger le plug-in</translation> <translation id="6119846243427417423">activer</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> fichiers</translation> -<translation id="4470547978413275879">Le plug-in <ph name="PLUGIN"/> n'est pas installé.</translation> -<translation id="6765711848403622008">Aucun plug-in disponible pour afficher ce contenu</translation> +<translation id="3934680773876859118">Échec du chargement du document PDF</translation> <translation id="8597182159515967513">en-tête</translation> <translation id="2653659639078652383">Valider</translation> <translation id="8475551193147984329">Le plug-in <ph name="PLUGIN"/> est requis.</translation> diff --git a/webkit/glue/resources/webkit_strings_gu.xtb b/webkit/glue/resources/webkit_strings_gu.xtb index ad48fa1..e1cc331 100644 --- a/webkit/glue/resources/webkit_strings_gu.xtb +++ b/webkit/glue/resources/webkit_strings_gu.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> થી પ્લગ-ઇન ઇન્સ્ટોલ કરવામાં નિષ્ફળ રહ્યાં</translation> <translation id="9186171386827445984">દસ્તાવેજ લોડ કરી રહ્યું છે: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> પૃષ્ઠ...</translation> <translation id="1235745349614807883">હાલની શોધને સાફ કરો</translation> +<translation id="1171774979989969504">કૃપા કરી કોઈ ઇમેઇલ સરનામું દાખલ કરો.</translation> +<translation id="709897737746224366">કૃપા કરીને વિનંતી કરેલા ફોર્મેટ સાથે મેળ કરો.</translation> <translation id="5048533449481078685">સૂચિ માર્કર</translation> <translation id="372362261556059955">વધારાનું પ્લગ-ઇન આવશ્યક છે </translation> <translation id="4202807286478387388">જંપ કરો</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">લોડ કરી રહ્યું છે...</translation> <translation id="6845533974506654842">દબાવો</translation> <translation id="8244226242650769279">છબી નકશો</translation> +<translation id="310520048233152454">કૃપા કરી કોઈ URL દાખલ કરો.</translation> <translation id="2548326553472216322">હાલની શોધો નથી</translation> +<translation id="7263440858009898357">કૃપા કરીને સૂચિમાંથી એક આઇટમ પસંદ કરો.</translation> +<translation id="5164977714490026579">મૂલ્ય <ph name="MINIMUM"/> જેટલું અથવા આનાથી વધુ હોવું આવશ્યક છે.</translation> <translation id="5944544982112848342">2048 (ઉચ્ચ ગ્રેડ)</translation> <translation id="3040011195152428237">લિંક</translation> <translation id="2745343197843472802">પ્લગ-ઇન મેળવો</translation> +<translation id="8451268428117625855">કૃપા કરીને કોઈ ફાઇલ પસંદ કરો.</translation> <translation id="5776402066334188252">કૃપા કરીને પુષ્ટી કરો કે તમે આ પ્લગ-ઇન ઇન્સ્ટોલ કરવાનું પસંદ કરશો. તમારે ફક્ત તે જ પ્લગ-ઇન્સ ઇન્સ્ટોલ કરવા જોઈએ જે વિશ્વસ્ત હોય.</translation> -<translation id="4003986561708175844">જોઈતું પ્લગ-ઇન ઇન્સ્ટોલ કરેલું નથી</translation> <translation id="3018094406922859308">પ્લગ-ઇન ડાઉનલોડ કરી રહ્યું છે...</translation> <translation id="7364796246159120393">ફાઇલ પસંદ કરો</translation> +<translation id="2761667185364618470">જો તમે આગળ વધવા માંગતા હો તો કૃપા કરીને આ બૉક્સને ચેક કરો.</translation> <translation id="8964020114565522021">ફાઇલને અહીં ખેંચો</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> પ્લગ-ઇન ઇન્સ્ટોલ કરેલું નથી.</translation> <translation id="838869780401515933">તપાસો</translation> <translation id="2846343701378493991">1024 (મધ્યમ ગ્રેડ)</translation> <translation id="5476505524087279545">અનચેક કરો</translation> <translation id="3789841737615482174">ઇન્સ્ટોલ કરો</translation> +<translation id="2507943997699731163">કૃપા કરીને આ ફીલ્ડ ભરો.</translation> <translation id="5253117816378681419">કૃપા કરીને પુષ્ટી કરો કે તમે <ph name="PLUGIN"/> પ્લગ-ઇન ઇન્સ્ટોલ કરવાનું પસંદ કરશો. તમારે ફક્ત તે જ પ્લગ-ઇન્સ ઇન્સ્ટોલ કરવા જોઈએ જે વિશ્વસ્ત હોય.</translation> <translation id="6663448176199120256">તાજેતરની શોધ</translation> +<translation id="7335060848622232389">પ્લગ-ઇન્સ ઇન્સ્ટોલ કરવાનું સક્ષમ કરવામાં આવ્યું છે.</translation> <translation id="2597378329261239068">આ દસ્તાવેજ પાસવર્ડ સુરક્ષિત છે. કૃપા કરીને પાસવર્ડ દાખલ કરો.</translation> +<translation id="5466621249238537318">કૃપા કરીને એક અથવા વધુ ફાઇલ પસંદ કરો. </translation> +<translation id="8750798805984357768">કૃપા કરીને આ વિકલ્પોમાંથી કોઈ એક પસંદ કરો.</translation> <translation id="7740050170769002709">HTML સામગ્રી</translation> +<translation id="2226276347425096477">કૃપા કરીને આ ટેક્સ્ટને <ph name="MAX_CHARACTERS"/> અક્ષર અથવા તેથી ઓછા સુધી નાનો કરો (તમે હાલમાં <ph name="CURRENT_LENGTH"/> અક્ષરોનો ઉપયોગ કરી રહ્યા છો).</translation> +<translation id="1639239467298939599">લોડ કરી રહ્યું છે</translation> +<translation id="2908441821576996758">કૃપા કરીને અલ્પવિરામથી વિભાજિત ઇમેઇલ સરનામાંઓની સૂચિ દાખલ કરો.</translation> <translation id="5939518447894949180">રીસેટ કરો</translation> +<translation id="835897206747267392">અમાન્ય મૂલ્ય.</translation> +<translation id="3851140433852960970">આ સામગ્રી પ્રદર્શિત કરવા માટે કોઈ પ્લગઇન ઉપલબ્ધ નથી.</translation> <translation id="1842960171412779397">પસંદ કરો</translation> +<translation id="3450233048674729344">મૂલ્ય <ph name="MAXIMUM"/> જેટલું અથવા આનાથી ઓછું હોવું આવશ્યક છે.</translation> +<translation id="9198010615634362518">જોઈતું પ્લગ-ઇન ઇન્સ્ટોલ કરેલું નથી.</translation> <translation id="7638452146404718955">પ્લગ-ઇન ડાઉનલોડ કરવા માટે અહીં ક્લિક કરો</translation> <translation id="6119846243427417423">સક્રિય કરો</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ફાઇલો</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> પ્લગ-ઇન ઇન્સ્ટોલ કરેલું નથી</translation> -<translation id="6765711848403622008">આ સામગ્રી પ્રદર્શિત કરવા માટે કોઈ પ્લગઇન ઉપલબ્ધ નથી</translation> +<translation id="3934680773876859118">PDF દસ્તાવેજ લોડ કરવામાં નિષ્ફળ રહ્યા</translation> <translation id="8597182159515967513">મથાળું</translation> <translation id="2653659639078652383">સબમિટ કરો</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> પ્લગ-ઇન આવશ્યક છે </translation> diff --git a/webkit/glue/resources/webkit_strings_hi.xtb b/webkit/glue/resources/webkit_strings_hi.xtb index e7ef77f..91d94be 100644 --- a/webkit/glue/resources/webkit_strings_hi.xtb +++ b/webkit/glue/resources/webkit_strings_hi.xtb @@ -1,46 +1,63 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hi"> -<translation id="4519964825805946997"><ph name="URL"/> से प्लग-इन स्थापित करने में विफल हुआ</translation> +<translation id="4519964825805946997"><ph name="URL"/> से प्लग-इन इंस्टॉल करने में विफल</translation> <translation id="9186171386827445984">दस्तावेज़ लोड कर रहा है: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> पृष्ठ...</translation> <translation id="1235745349614807883">हाल ही की खोजें साफ़ करें</translation> +<translation id="1171774979989969504">कृपया ई-मेल पता दर्ज करें.</translation> +<translation id="709897737746224366">कृपया अनुरोधित प्रारूप का मिलान करें.</translation> <translation id="5048533449481078685">सूची चिन्हक</translation> <translation id="372362261556059955">अतिरिक्त प्लग-इन की आवश्यकता है</translation> -<translation id="4202807286478387388">जाएँ</translation> +<translation id="4202807286478387388">जाएं</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> <translation id="7658239707568436148">रद्द करें</translation> <translation id="795667975304826397">कोई फाइल नहीं चुनी गई</translation> -<translation id="1416462845279468967">प्लग-इन स्थापना विफल हुई</translation> -<translation id="8141602879876242471">यह एक खोजने योग्य इंडेक्स है. खोज कुंजीशब्द प्रविष्ट करें :</translation> +<translation id="1416462845279468967">प्लग-इन स्थापना विफल</translation> +<translation id="8141602879876242471">इस अनुक्रमणिका को खोजा जा सकता है. खोज कुंजीशब्द प्रविष्ट करें:</translation> <translation id="5650795167354946011">प्लग-इन स्थापित करने के बाद, रीफ़्रेश करने के लिए यहां क्लिक करें</translation> -<translation id="370665806235115550">लोड हो रहा है ...</translation> -<translation id="6845533974506654842">दबाएँ</translation> -<translation id="8244226242650769279">चित्र मैप</translation> -<translation id="2548326553472216322">हाल ही में कोई खोज नहीं</translation> +<translation id="370665806235115550">लोड हो रहा है...</translation> +<translation id="6845533974506654842">दबाएं</translation> +<translation id="8244226242650769279">छवि मानचित्र</translation> +<translation id="310520048233152454">कृपया URL लिखें.</translation> +<translation id="2548326553472216322">हाल ही कोई खोज नहीं</translation> +<translation id="7263440858009898357">कृपया सूची में किसी आइटम का चयन करें.</translation> +<translation id="5164977714490026579">मान <ph name="MINIMUM"/> से कम या इसके बराबर होना चाहिए.</translation> <translation id="5944544982112848342">2048 (उच्च ग्रेड)</translation> -<translation id="3040011195152428237">लिंक</translation> +<translation id="3040011195152428237">संपर्क</translation> <translation id="2745343197843472802">प्लग-इन प्राप्त करें</translation> -<translation id="5776402066334188252">कृपया पुष्टि करें कि आप यह प्लग-इन स्थापित करना चाहेंगे. आपको केवल वे प्लग-इन स्थापित करने चाहिए जिन पर आप विश्वास करते हैं.</translation> -<translation id="4003986561708175844">आवश्यक प्लग-इन स्थापित नहीं है</translation> -<translation id="3018094406922859308">प्लग-इन डाउनलोड किया जा रहा है...</translation> +<translation id="8451268428117625855">कृपया किसी फ़ाइल का चयन करें.</translation> +<translation id="5776402066334188252">कृपया पुष्टि करें कि आप यह प्लग-इन इंस्टॉल करना चाहेंगे. आपको केवल वे प्लग-इन इंस्टॉल करने चाहिए जिन पर आप विश्वास करते हैं.</translation> +<translation id="3018094406922859308">प्लग-इन डाउनलोड कर रहा है...</translation> <translation id="7364796246159120393">फ़ाइल चुनें</translation> -<translation id="8964020114565522021">फाइल खींचकर यहाँ लाएं</translation> +<translation id="2761667185364618470">यदि आप आगे बढ़ना चाहते हैं तो इस बॉक्स को चेक करें.</translation> +<translation id="8964020114565522021">यहां फाइल खींचकर लाएं</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> प्लग-इन इंस्टॉल नहीं है.</translation> <translation id="838869780401515933">चेक करें</translation> <translation id="2846343701378493991">1024 (मध्यम ग्रेड)</translation> <translation id="5476505524087279545">अनचेक करें</translation> -<translation id="3789841737615482174">स्थापित करें</translation> -<translation id="5253117816378681419">कृपया पुष्टि करें कि आप <ph name="PLUGIN"/> प्लग-इन स्थापित करना चाहेंगे. आपको केवल वे प्लग-इन स्थापित करने चाहिए जिन पर आप विश्वास करते हैं.</translation> +<translation id="3789841737615482174">इंस्टॉल करें</translation> +<translation id="2507943997699731163">कृपया इस फ़ील्ड को भरें.</translation> +<translation id="5253117816378681419">कृपया पुष्टि करें कि आप <ph name="PLUGIN"/> प्लग-इन इंस्टॉल करना चाहेंगे. आपको केवल वे प्लग-इन इंस्टॉल करने चाहिए जिन पर आप विश्वास करते हैं.</translation> <translation id="6663448176199120256">हाल ही में की गई खोजें</translation> -<translation id="2597378329261239068">यह दस्तावेज़ पासवर्ड सुरक्षित है. कृपया एक पासवर्ड दर्ज करें.</translation> +<translation id="7335060848622232389">प्लग-इन इंस्टॉल करना अक्षम किया गया.</translation> +<translation id="2597378329261239068">यह दस्तावेज़ पासवर्ड सुरक्षित है. कृपया पासवर्ड दर्ज करें.</translation> +<translation id="5466621249238537318">कृपया एक या अधिक फ़ाइल का चयन करें.</translation> +<translation id="8750798805984357768">कृपया इनमें से कोई विकल्प चुनें.</translation> <translation id="7740050170769002709">HTML सामग्री</translation> -<translation id="5939518447894949180">पुन: सेट करें</translation> -<translation id="1842960171412779397">चुनें</translation> +<translation id="2226276347425096477">कृपया इस टेक्स्ट को <ph name="MAX_CHARACTERS"/> वर्णों या कम तक छोटा करें (वर्तमान में आप <ph name="CURRENT_LENGTH"/> वर्णों का उपयोग कर रहे हैं).</translation> +<translation id="1639239467298939599">लोड हो रहा है</translation> +<translation id="2908441821576996758">कृपया ईमेल पतों की अल्पविराम द्वारा विभाजित सूची दर्ज करें.</translation> +<translation id="5939518447894949180">रीसेट करें</translation> +<translation id="835897206747267392">अमान्य मान.</translation> +<translation id="3851140433852960970">यह सामग्री प्रदर्शित करने के लिए कोई प्लग-इन उपलब्ध नहीं है.</translation> +<translation id="1842960171412779397">चयन करें</translation> +<translation id="3450233048674729344">मान <ph name="MAXIMUM"/> से कम या इसके बराबर होना चाहिए.</translation> +<translation id="9198010615634362518">आवश्यक प्लग-इन इंस्टॉल नहीं की गई है.</translation> <translation id="7638452146404718955">प्लग-इन डाउनलोड करने के लिए यहां क्लिक करें</translation> <translation id="6119846243427417423">सक्रिय करें</translation> -<translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> फ़ाइलें</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> प्लग-इन स्थापित नहीं है</translation> -<translation id="6765711848403622008">इस सामग्री को प्रदर्शित करने के लिए कोई प्लग-इन उपलब्ध नहीं है</translation> +<translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> फ़ाइल</translation> +<translation id="3934680773876859118">PDF दस्तावेज़ लोड करने में विफल</translation> <translation id="8597182159515967513">हेडिंग</translation> -<translation id="2653659639078652383">जमा करें</translation> +<translation id="2653659639078652383">सबमिट करें</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> प्लग-इन की आवश्यकता है</translation> </translationbundle>
\ No newline at end of file diff --git a/webkit/glue/resources/webkit_strings_hr.xtb b/webkit/glue/resources/webkit_strings_hr.xtb index dfef690..973b7ab 100644 --- a/webkit/glue/resources/webkit_strings_hr.xtb +++ b/webkit/glue/resources/webkit_strings_hr.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Nije uspjela instalacija dodatka s adrese <ph name="URL"/></translation> <translation id="9186171386827445984">Učitavanje dokumenta: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> stranica...</translation> <translation id="1235745349614807883">Obriši najnovija pretraživanja</translation> +<translation id="1171774979989969504">Unesite adresu e-pošte.</translation> +<translation id="709897737746224366">Udovoljite zadanom formatu.</translation> <translation id="5048533449481078685">oznaka popisa</translation> <translation id="372362261556059955">Potreban je dodatni dodatak</translation> <translation id="4202807286478387388">skoči</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Učitavanje...</translation> <translation id="6845533974506654842">pritisni</translation> <translation id="8244226242650769279">karta slika</translation> +<translation id="310520048233152454">Unesite URL.</translation> <translation id="2548326553472216322">Nema najnovijih pretraživanja</translation> +<translation id="7263440858009898357">Odaberite stavku s popisa.</translation> +<translation id="5164977714490026579">Vrijednost mora biti <ph name="MINIMUM"/> ili veća.</translation> <translation id="5944544982112848342">2048 (visoki stupanj)</translation> <translation id="3040011195152428237">veza</translation> <translation id="2745343197843472802">Nabavi dodatak</translation> +<translation id="8451268428117625855">Odaberite datoteku.</translation> <translation id="5776402066334188252">Potvrdite da želite instalirati dodatak. Instalirajte samo dodatke koje smatrate pouzdanima.</translation> -<translation id="4003986561708175844">Potreban dodatak nije instaliran</translation> <translation id="3018094406922859308">Preuzimanje dodatka...</translation> <translation id="7364796246159120393">Odaberi datoteku</translation> +<translation id="2761667185364618470">Označite taj okvir ako želite ići dalje.</translation> <translation id="8964020114565522021">Povucite datoteku ovamo</translation> +<translation id="5129723458012748440">Nije instaliran dodatak <ph name="PLUGIN"/></translation> <translation id="838869780401515933">označi</translation> <translation id="2846343701378493991">1024 (srednji)</translation> <translation id="5476505524087279545">ukloni oznaku</translation> <translation id="3789841737615482174">Instaliraj</translation> +<translation id="2507943997699731163">Ispunite ovo polje.</translation> <translation id="5253117816378681419">Potvrdite da želite instalirati dodatak <ph name="PLUGIN"/>. Instalirajte samo dodatke koje smatrate pouzdanima.</translation> <translation id="6663448176199120256">Najnovija pretraživanja</translation> +<translation id="7335060848622232389">Onemogućeno je instaliranje dodataka.</translation> <translation id="2597378329261239068">Ovaj je dokument zaštićen zaporkom. Unesite zaporku.</translation> +<translation id="5466621249238537318">Izaberite jednu ili više datoteka.</translation> +<translation id="8750798805984357768">Izaberite jednu od tih opcija.</translation> <translation id="7740050170769002709">HTML sadržaj</translation> +<translation id="2226276347425096477">Skratite taj tekst na <ph name="MAX_CHARACTERS"/> znakova ili manje (trenutačno upotrebljavate <ph name="CURRENT_LENGTH"/> znakova).</translation> +<translation id="1639239467298939599">Učitavanje</translation> +<translation id="2908441821576996758">Unesite popis adresa e-pošte odijeljen zarezima.</translation> <translation id="5939518447894949180">Ponovno postavi</translation> +<translation id="835897206747267392">Nevažeća vrijednost.</translation> +<translation id="3851140433852960970">Nema dostupnog dodatka za prikaz ovog sadržaja.</translation> <translation id="1842960171412779397">odaberi</translation> +<translation id="3450233048674729344">Vrijednost mora biti <ph name="MAXIMUM"/> ili manja.</translation> +<translation id="9198010615634362518">Potreban dodatak nije instaliran.</translation> <translation id="7638452146404718955">Kliknite ovdje za preuzimanje dodatka</translation> <translation id="6119846243427417423">aktiviraj</translation> <translation id="8444882422881193423">Broj datoteka: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Nije instaliran dodatak za <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">Nema dostupnog dodatka za prikaz ovog sadržaja</translation> +<translation id="3934680773876859118">Učitavanje dokumenta PDF nije uspjelo</translation> <translation id="8597182159515967513">naslov</translation> <translation id="2653659639078652383">Pošalji</translation> <translation id="8475551193147984329">Potreban je dodatak <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_hu.xtb b/webkit/glue/resources/webkit_strings_hu.xtb index 1b43f0f..17f27a8 100644 --- a/webkit/glue/resources/webkit_strings_hu.xtb +++ b/webkit/glue/resources/webkit_strings_hu.xtb @@ -4,42 +4,59 @@ <translation id="4519964825805946997">A plug-in telepítése nem sikerült a következő helyről: <ph name="URL"/></translation> <translation id="9186171386827445984">Dokumentum betöltése: <ph name="NUMBER_OF_PAGES"/>/<ph name="PAGE_NUMBER"/>. oldal...</translation> <translation id="1235745349614807883">Friss keresések törlése</translation> +<translation id="1171774979989969504">Kérjük, adjon meg egy e-mail címet.</translation> +<translation id="709897737746224366">Kérjük, tartsa magát a kívánt formátumhoz.</translation> <translation id="5048533449481078685">listajelölő</translation> <translation id="372362261556059955">További plug-in szükséges</translation> <translation id="4202807286478387388">Mehet</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> <translation id="7658239707568436148">Mégse</translation> -<translation id="795667975304826397">Nem lett fájl kiválasztva</translation> +<translation id="795667975304826397">Nincs fájl kiválasztva</translation> <translation id="1416462845279468967">A plug-in telepítése sikertelen</translation> <translation id="8141602879876242471">Ez egy kereshető index. Írjon be keresési kulcsszavakat:</translation> <translation id="5650795167354946011">A plug-in telepítését követően kattintson ide a frissítéshez</translation> <translation id="370665806235115550">Betöltés…</translation> <translation id="6845533974506654842">Gomb lenyomása</translation> <translation id="8244226242650769279">képtérkép</translation> +<translation id="310520048233152454">Adjon meg egy URL-t.</translation> <translation id="2548326553472216322">Nincsenek friss keresések</translation> +<translation id="7263440858009898357">Kérjük, válasszon egyet a lista elemei közül.</translation> +<translation id="5164977714490026579">Az érték legyen nagyobb vagy egyenlő, mint <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (magasfokú)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Plug-in beszerzése</translation> +<translation id="8451268428117625855">Válasszon egy fájlt.</translation> <translation id="5776402066334188252">Kérjük, igazolja, hogy ezt a plug-int szeretné telepíteni. Csak azokat a plug-ineket telepítse, amelyekben megbízik.</translation> -<translation id="4003986561708175844">A szükséges plug-in nem lett telepítve</translation> <translation id="3018094406922859308">Plug-in letöltése...</translation> <translation id="7364796246159120393">Fájl kiválasztása</translation> +<translation id="2761667185364618470">Kérjük, jelölje be ezt a jelölőnégyzetet, ha tovább kíván haladni.</translation> <translation id="8964020114565522021">Húzza át ide a fájlt</translation> +<translation id="5129723458012748440">A(z) <ph name="PLUGIN"/> plug-in nincs telepítve.</translation> <translation id="838869780401515933">Megjelölés</translation> <translation id="2846343701378493991">1024 (Közepes)</translation> <translation id="5476505524087279545">Megjelölés eltávolítása</translation> <translation id="3789841737615482174">Telepítés</translation> +<translation id="2507943997699731163">Kérjük, töltse ki ezt a mezőt.</translation> <translation id="5253117816378681419">Kérjük, erősítse meg, hogy valóban telepíteni szeretné a következő plug-int: <ph name="PLUGIN"/>. Csak azokat a plug-ineket telepítse, amelyekben megbízik.</translation> <translation id="6663448176199120256">Friss keresések</translation> +<translation id="7335060848622232389">A plug-inek telepítése le van tiltva.</translation> <translation id="2597378329261239068">Ez a dokumentum jelszóval védett. Kérjük, adja meg a jelszót.</translation> +<translation id="5466621249238537318">Kérjük, válasszon ki egy vagy több fájlt.</translation> +<translation id="8750798805984357768">Kérjük, válassza ki az egyik opciót.</translation> <translation id="7740050170769002709">HTML-tartalom</translation> +<translation id="2226276347425096477">Kérjük, rövidítse le a szöveget legfeljebb <ph name="MAX_CHARACTERS"/> karakterre (jelenleg <ph name="CURRENT_LENGTH"/> karaktert használ).</translation> +<translation id="1639239467298939599">Betöltés</translation> +<translation id="2908441821576996758">Kérjük, adjon meg egy vesszőkkel elválasztott e-mail címlistát.</translation> <translation id="5939518447894949180">Visszaállítás</translation> +<translation id="835897206747267392">Érvénytelen érték.</translation> +<translation id="3851140433852960970">Nincs megfelelő plug-in a tartalom megjelenítéséhez.</translation> <translation id="1842960171412779397">Kiválasztás</translation> +<translation id="3450233048674729344">Az érték legyen kisebb vagy egyenlő, mint <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">A szükséges plug-in nincs telepítve.</translation> <translation id="7638452146404718955">Ide kattintva letöltheti a plug-int</translation> <translation id="6119846243427417423">Aktiválás</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> fájl</translation> -<translation id="4470547978413275879">A következő plug-in nincs telepítve: <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">Nincs elérhető plug-in a tartalom megjelenítéséhez</translation> +<translation id="3934680773876859118">PDF dokumentum betöltése sikertelen</translation> <translation id="8597182159515967513">fejléc</translation> <translation id="2653659639078652383">Elküldés</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> plug-in szükséges</translation> diff --git a/webkit/glue/resources/webkit_strings_id.xtb b/webkit/glue/resources/webkit_strings_id.xtb index 50c97a2..daa6799 100644 --- a/webkit/glue/resources/webkit_strings_id.xtb +++ b/webkit/glue/resources/webkit_strings_id.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Gagal memasang pengaya dari <ph name="URL"/></translation> <translation id="9186171386827445984">Memuat dokumen: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> halaman...</translation> <translation id="1235745349614807883">Hapus Penelusuran Barusan</translation> +<translation id="1171774979989969504">Masukkan alamat email.</translation> +<translation id="709897737746224366">Sesuaikan dengan format yang diminta.</translation> <translation id="5048533449481078685">penanda daftar</translation> <translation id="372362261556059955">Diperlukan pengaya tambahan</translation> <translation id="4202807286478387388">lompati</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Membuka...</translation> <translation id="6845533974506654842">tekan</translation> <translation id="8244226242650769279">gambar peta</translation> +<translation id="310520048233152454">Masukkan URL.</translation> <translation id="2548326553472216322">Tidak ada penelusuran terkini</translation> +<translation id="7263440858009898357">Pilih item pada daftar.</translation> +<translation id="5164977714490026579">Nilai harus lebih besar daripada atau sama dengan <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Tingkat Tinggi)</translation> <translation id="3040011195152428237">tautan</translation> <translation id="2745343197843472802">Dapatkan Pengaya</translation> +<translation id="8451268428117625855">Pilih berkas.</translation> <translation id="5776402066334188252">Konfirmasikan bahwa Anda ingin memasang pengaya ini. Anda harus memasang pengaya yang dipercayai saja.</translation> -<translation id="4003986561708175844">Pengaya yang diperlukan belum terpasang</translation> <translation id="3018094406922859308">Mengunduh pengaya...</translation> <translation id="7364796246159120393">Pilih Berkas</translation> +<translation id="2761667185364618470">Centang kotak ini jika Anda ingin melanjutkan.</translation> <translation id="8964020114565522021">Tarik file ke sini</translation> +<translation id="5129723458012748440">Pengaya <ph name="PLUGIN"/> tidak dipasang.</translation> <translation id="838869780401515933">centangi</translation> <translation id="2846343701378493991">1024 (Tingkat Menengah)</translation> <translation id="5476505524087279545">batalkan centang</translation> <translation id="3789841737615482174">Instal</translation> +<translation id="2507943997699731163">Harap isi bidang ini.</translation> <translation id="5253117816378681419">Konfirmasikan bahwa Anda ingin memasang pengaya <ph name="PLUGIN"/>. Anda harus memasang pengaya yang Anda percayai saja.</translation> <translation id="6663448176199120256">Penelusuran Barusan</translation> +<translation id="7335060848622232389">Pemasangan pengaya telah dinonaktifkan.</translation> <translation id="2597378329261239068">Dokumen ini dilindungi sandi. Masukkan sandi.</translation> +<translation id="5466621249238537318">Pilih salah satu atau beberapa berkas.</translation> +<translation id="8750798805984357768">Pilih salah satu opsi berikut.</translation> <translation id="7740050170769002709">Konten HTML</translation> +<translation id="2226276347425096477">Pendekkan teks ini menjadi <ph name="MAX_CHARACTERS"/> karakter atau kurang (saat ini Anda menggunakan <ph name="CURRENT_LENGTH"/> karakter).</translation> +<translation id="1639239467298939599">Memuat</translation> +<translation id="2908441821576996758">Masukkan daftar alamat email yang dipisahkan dengan koma.</translation> <translation id="5939518447894949180">Atur ulang</translation> +<translation id="835897206747267392">Nilai tidak valid.</translation> +<translation id="3851140433852960970">Tidak ada pengaya yang tersedia untuk menampilkan konten ini.</translation> <translation id="1842960171412779397">pilih</translation> +<translation id="3450233048674729344">Nilai harus lebih kecil atau sama dengan <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Pengaya yang diperlukan tidak dipasang.</translation> <translation id="7638452146404718955">Klik di sini untuk mengunduh pengaya</translation> <translation id="6119846243427417423">aktifkan</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> berkas</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> pengaya belum terpasang</translation> -<translation id="6765711848403622008">Tidak tersedia pengaya untuk menampilkan konten ini</translation> +<translation id="3934680773876859118">Gagal memuat dokumen PDF</translation> <translation id="8597182159515967513">kepala</translation> <translation id="2653659639078652383">Kirim</translation> <translation id="8475551193147984329">Pengaya <ph name="PLUGIN"/> diperlukan</translation> diff --git a/webkit/glue/resources/webkit_strings_it.xtb b/webkit/glue/resources/webkit_strings_it.xtb index 1fae27f..6ee3309 100644 --- a/webkit/glue/resources/webkit_strings_it.xtb +++ b/webkit/glue/resources/webkit_strings_it.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Installazione del plug-in da <ph name="URL"/> non riuscita</translation> <translation id="9186171386827445984">Caricamento del documento in corso: pagine <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/>...</translation> <translation id="1235745349614807883">Cancella ricerche recenti</translation> +<translation id="1171774979989969504">Inserisci un indirizzo email.</translation> +<translation id="709897737746224366">Rispetta il formato richiesto.</translation> <translation id="5048533449481078685">indicatore elenco</translation> <translation id="372362261556059955">È necessario un plug-in aggiuntivo</translation> <translation id="4202807286478387388">vai</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Caricamento in corso...</translation> <translation id="6845533974506654842">premi</translation> <translation id="8244226242650769279">image map</translation> +<translation id="310520048233152454">Inserisci un URL.</translation> <translation id="2548326553472216322">Nessuna ricerca recente</translation> +<translation id="7263440858009898357">Seleziona un elemento nell'elenco.</translation> +<translation id="5164977714490026579">Il valore deve essere superiore o uguale a <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (alta qualità)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Scarica plug-in</translation> +<translation id="8451268428117625855">Seleziona un file.</translation> <translation id="5776402066334188252">Conferma l'installazione del plug-in. Dovresti installare soltanto plug-in attendibili.</translation> -<translation id="4003986561708175844">Il plug-in richiesto non è installato</translation> <translation id="3018094406922859308">Download del plug-in in corso...</translation> <translation id="7364796246159120393">Scegli file</translation> +<translation id="2761667185364618470">Seleziona questa casella se intendi procedere.</translation> <translation id="8964020114565522021">Trascina il file qui</translation> +<translation id="5129723458012748440">Il plug-in <ph name="PLUGIN"/> non è installato.</translation> <translation id="838869780401515933">seleziona</translation> <translation id="2846343701378493991">1024 (Medium Grade)</translation> <translation id="5476505524087279545">deseleziona</translation> <translation id="3789841737615482174">Installa</translation> +<translation id="2507943997699731163">Compila questo campo.</translation> <translation id="5253117816378681419">Conferma che desideri installare il plug-in <ph name="PLUGIN"/>. Dovresti installare soltanto plug-in attendibili.</translation> <translation id="6663448176199120256">Ricerche recenti</translation> +<translation id="7335060848622232389">L'installazione dei plug-in è stata disattivata.</translation> <translation id="2597378329261239068">Questo documento è protetto da password. Inserisci una password.</translation> +<translation id="5466621249238537318">Seleziona uno o più file.</translation> +<translation id="8750798805984357768">Seleziona una di queste opzioni.</translation> <translation id="7740050170769002709">Contenuti HTML</translation> +<translation id="2226276347425096477">Riduci questo testo a <ph name="MAX_CHARACTERS"/> caratteri o meno (attualmente stai utilizzando <ph name="CURRENT_LENGTH"/> caratteri).</translation> +<translation id="1639239467298939599">Caricamento</translation> +<translation id="2908441821576996758">Inserisci un elenco di indirizzi email separati da virgola.</translation> <translation id="5939518447894949180">Ripristina</translation> +<translation id="835897206747267392">Valore non valido.</translation> +<translation id="3851140433852960970">Nessun plug-in disponibile per visualizzare questi contenuti</translation> <translation id="1842960171412779397">seleziona</translation> +<translation id="3450233048674729344">Il valore deve essere inferiore o uguale a <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Il plug-in richiesto non è installato.</translation> <translation id="7638452146404718955">Fai clic qui per scaricare il plug-in</translation> <translation id="6119846243427417423">attiva</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> file</translation> -<translation id="4470547978413275879">Il plug-in <ph name="PLUGIN"/> non è installato</translation> -<translation id="6765711848403622008">Nessun plug-in disponibile per visualizzare questo contenuto</translation> +<translation id="3934680773876859118">Caricamento del documento PDF non riuscito</translation> <translation id="8597182159515967513">intestazione</translation> <translation id="2653659639078652383">Invia</translation> <translation id="8475551193147984329">È necessario il plug-in <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_iw.xtb b/webkit/glue/resources/webkit_strings_iw.xtb index f748311..1e236dc 100644 --- a/webkit/glue/resources/webkit_strings_iw.xtb +++ b/webkit/glue/resources/webkit_strings_iw.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">התקנת הפלאגין מתוך <ph name="URL"/> נכשלה</translation> <translation id="9186171386827445984">טוען מסמך: דפים <ph name="NUMBER_OF_PAGES"/>/<ph name="PAGE_NUMBER"/>...</translation> <translation id="1235745349614807883">הסר חיפושים אחרונים</translation> +<translation id="1171774979989969504">הזן כתובת דוא"ל.</translation> +<translation id="709897737746224366">התאם את הפורמט המבוקש.</translation> <translation id="5048533449481078685">סמן רשימה</translation> <translation id="372362261556059955">פלאגין נוסף נחוץ</translation> <translation id="4202807286478387388">קפוץ</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">טוען...</translation> <translation id="6845533974506654842">לחץ</translation> <translation id="8244226242650769279">מפת תמונות</translation> +<translation id="310520048233152454">הזן כתובת אתר.</translation> <translation id="2548326553472216322">אין חיפושים אחרונים</translation> +<translation id="7263440858009898357">בחר פריט מהרשימה.</translation> +<translation id="5164977714490026579">הערך חייב להיות גדול מ-<ph name="MINIMUM"/> או שווה לו.</translation> <translation id="5944544982112848342">2048 (High Grade)</translation> <translation id="3040011195152428237">קישור</translation> <translation id="2745343197843472802">השג פלאגין</translation> +<translation id="8451268428117625855">בחר קובץ.</translation> <translation id="5776402066334188252">אשר שברצונך להתקין פלאגין זה. יש להתקין רכיבי פלאגין שאתה בוטח בהם בלבד.</translation> -<translation id="4003986561708175844">הפלאגין הדרוש אינו מותקן</translation> <translation id="3018094406922859308">מוריד פלאגין...</translation> <translation id="7364796246159120393">בחר קובץ</translation> +<translation id="2761667185364618470">סמן תיבה זו אם אתה רוצה להמשיך.</translation> <translation id="8964020114565522021">גרור את הקובץ לכאן</translation> +<translation id="5129723458012748440">הפלאגין <ph name="PLUGIN"/> אינו מותקן.</translation> <translation id="838869780401515933">סמן</translation> <translation id="2846343701378493991">1024 (Medium Grade)</translation> <translation id="5476505524087279545">בטל סימון</translation> <translation id="3789841737615482174">התקן</translation> +<translation id="2507943997699731163">מלא שדה זה.</translation> <translation id="5253117816378681419">אשר שברצונך להתקין את הפלאגין <ph name="PLUGIN"/>. יש להתקין רכיבי פלאגין שאתה בוטח בהם בלבד.</translation> <translation id="6663448176199120256">חיפושים אחרונים</translation> +<translation id="7335060848622232389">התקנת יישומי הפלאגין הושבתה.</translation> <translation id="2597378329261239068">מסמך זה מוגן באמצעות סיסמה. הזן סיסמה.</translation> +<translation id="5466621249238537318">בחר קובץ אחד או יותר.</translation> +<translation id="8750798805984357768">בחר אחת מהאפשרויות הבאות.</translation> <translation id="7740050170769002709">תוכן HTML</translation> +<translation id="2226276347425096477">קצר טקסט זה ל-<ph name="MAX_CHARACTERS"/> תווים או פחות (אתה משתמש כעת ב-<ph name="CURRENT_LENGTH"/> תווים).</translation> +<translation id="1639239467298939599">טוען</translation> +<translation id="2908441821576996758">הזן רשימה של כתובות דוא"ל המופרדות באמצעות פסיקים.</translation> <translation id="5939518447894949180">אפס</translation> +<translation id="835897206747267392">ערך לא חוקי.</translation> +<translation id="3851140433852960970">אין פלאגין זמין להצגת תוכן זה.</translation> <translation id="1842960171412779397">בחר</translation> +<translation id="3450233048674729344">הערך חייב להיות קטן מ-<ph name="MAXIMUM"/> או שווה לו.</translation> +<translation id="9198010615634362518">הפלאגין הדרוש אינו מותקן.</translation> <translation id="7638452146404718955">לחץ כאן להורדת פלאגין</translation> <translation id="6119846243427417423">הפעל</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> קבצים</translation> -<translation id="4470547978413275879">הפלאגין <ph name="PLUGIN"/> אינו מותקן</translation> -<translation id="6765711848403622008">אין פלאגין זמין להצגת תוכן זה</translation> +<translation id="3934680773876859118">הטעינה של מסמך PDF נכשלה</translation> <translation id="8597182159515967513">כותרת</translation> <translation id="2653659639078652383">שלח</translation> <translation id="8475551193147984329">הפלאגין <ph name="PLUGIN"/> דרוש</translation> diff --git a/webkit/glue/resources/webkit_strings_ja.xtb b/webkit/glue/resources/webkit_strings_ja.xtb index 865979d..95db67b 100644 --- a/webkit/glue/resources/webkit_strings_ja.xtb +++ b/webkit/glue/resources/webkit_strings_ja.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> からプラグインをインストールできませんでした</translation> <translation id="9186171386827445984">ドキュメントの読み込み中: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> ページ...</translation> <translation id="1235745349614807883">最近の検索履歴を消去</translation> +<translation id="1171774979989969504">メール アドレスを入力してください。</translation> +<translation id="709897737746224366">指定されている形式で入力してください。</translation> <translation id="5048533449481078685">リスト マーカー</translation> <translation id="372362261556059955">追加のプラグインが必要です</translation> <translation id="4202807286478387388">ジャンプ</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">読み込み中...</translation> <translation id="6845533974506654842">押す</translation> <translation id="8244226242650769279">イメージ マップ</translation> +<translation id="310520048233152454">URL を入力してください。</translation> <translation id="2548326553472216322">最近の検索はありません</translation> +<translation id="7263440858009898357">リスト内の項目を選択してください。</translation> +<translation id="5164977714490026579">値は <ph name="MINIMUM"/> 以上にする必要があります。</translation> <translation id="5944544982112848342">2048 (高)</translation> <translation id="3040011195152428237">リンク</translation> <translation id="2745343197843472802">プラグインをダウンロード</translation> +<translation id="8451268428117625855">ファイルを選択してください。</translation> <translation id="5776402066334188252">このプラグインをインストールしてもよいかご確認ください。信頼できるプラグインのみをインストールする必要があります。</translation> -<translation id="4003986561708175844">必要なプラグインがインストールされていません</translation> <translation id="3018094406922859308">プラグインをダウンロードしています...</translation> <translation id="7364796246159120393">ファイルを選択</translation> +<translation id="2761667185364618470">次に進むにはこのチェックボックスをオンにしてください。</translation> <translation id="8964020114565522021">ファイルをここにドラッグ</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> プラグインがインストールされていません。</translation> <translation id="838869780401515933">チェックを付ける</translation> <translation id="2846343701378493991">1024 (中)</translation> <translation id="5476505524087279545">チェックを外す</translation> <translation id="3789841737615482174">インストール</translation> +<translation id="2507943997699731163">このフィールドを入力してください。</translation> <translation id="5253117816378681419">この <ph name="PLUGIN"/> プラグインをインストールしてもよいかご確認ください。信頼できるプラグインのみをインストールする必要があります。</translation> <translation id="6663448176199120256">最近の検索</translation> +<translation id="7335060848622232389">プラグインのインストールが無効になっています。</translation> <translation id="2597378329261239068">このドキュメントはパスワードで保護されています。パスワードを入力してください。</translation> +<translation id="5466621249238537318">1 つ以上のファイルを選択してください。</translation> +<translation id="8750798805984357768">これらのオプションから 1 つ選択してください。</translation> <translation id="7740050170769002709">HTML コンテンツ</translation> +<translation id="2226276347425096477">このテキストを半角 <ph name="MAX_CHARACTERS"/> 文字以下にしてください(現時点で半角 <ph name="CURRENT_LENGTH"/> 文字です)。</translation> +<translation id="1639239467298939599">読み込み中</translation> +<translation id="2908441821576996758">メール アドレスのカンマ区切りリストを入力してください。</translation> <translation id="5939518447894949180">リセット</translation> +<translation id="835897206747267392">値が無効です。</translation> +<translation id="3851140433852960970">このコンテンツの表示に使用できるプラグインはありません。</translation> <translation id="1842960171412779397">選択</translation> +<translation id="3450233048674729344">値は <ph name="MAXIMUM"/> 以下にする必要があります。</translation> +<translation id="9198010615634362518">必要なプラグインがインストールされていません。</translation> <translation id="7638452146404718955">ここをクリックしてプラグインをダウンロード</translation> <translation id="6119846243427417423">アクティブにする</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ファイル</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> プラグインがインストールされていません</translation> -<translation id="6765711848403622008">このコンテンツの表示に使用できるプラグインはありません</translation> +<translation id="3934680773876859118">PDF ドキュメントを読み込むことができませんでした</translation> <translation id="8597182159515967513">見出し</translation> <translation id="2653659639078652383">送信</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> プラグインが必要です</translation> diff --git a/webkit/glue/resources/webkit_strings_kn.xtb b/webkit/glue/resources/webkit_strings_kn.xtb index 9a8f827..c7e441a 100644 --- a/webkit/glue/resources/webkit_strings_kn.xtb +++ b/webkit/glue/resources/webkit_strings_kn.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> ನಿಂದ ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ</translation> <translation id="9186171386827445984">ಲೋಡಿಂಗ್ ಡಾಕ್ಯುಮೆಂಟ್: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> ಪುಟಗಳು...</translation> <translation id="1235745349614807883">ಇತ್ತೀಚಿನ ಹುಡುಕಾಟವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> +<translation id="1171774979989969504">ದಯವಿಟ್ಟು ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ.</translation> +<translation id="709897737746224366">ದಯವಿಟ್ಟು ವಿನಂತಿಸಿದ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿಸಿ.</translation> <translation id="5048533449481078685">ಪಟ್ಟಿ ಗುರುತು</translation> <translation id="372362261556059955">ಹೆಚ್ಚುವರಿ ಪ್ಲಗ್-ಇನ್ ಅಗತ್ಯವಿದೆ</translation> <translation id="4202807286478387388">ಹಾರು</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> <translation id="6845533974506654842">ಒತ್ತಿ</translation> <translation id="8244226242650769279">ಇಮೇಜ್ ನಕ್ಷೆ</translation> +<translation id="310520048233152454">ದಯವಿಟ್ಟು URL ಅನ್ನು ನಮೂದಿಸಿ.</translation> <translation id="2548326553472216322">ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು ಇಲ್ಲ</translation> +<translation id="7263440858009898357">ಪಟ್ಟಿಯಲ್ಲಿನ ಐಟಂ ಅನ್ನು ದಯವಿಟ್ಟು ಆಯ್ಕೆ ಮಾಡಿ.</translation> +<translation id="5164977714490026579">ಮೌಲ್ಯವು <ph name="MINIMUM"/> ಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಾಗಿರಬೇಕು ಅಥವಾ ಸಮನಾಗಿರಬೇಕು.</translation> <translation id="5944544982112848342">2048 (ಉನ್ನತ ಶ್ರೇಣಿ)</translation> <translation id="3040011195152428237">ಲಿಂಕ್</translation> <translation id="2745343197843472802">ಪ್ಲಗ್-ಇನ್ ಪಡೆಯಿರಿ</translation> +<translation id="8451268428117625855">ದಯವಿಟ್ಟು ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ.</translation> <translation id="5776402066334188252">ನೀವು ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಬಯಸುವುದಾದಲ್ಲಿ ದಯವಿಟ್ಟು ಖಚಿತಪಡಿಸಿ. ನಿಮಗೆ ನಂಬಿಕೆ ಇರುವ ಫ್ಲಗ್-ಇನ್ಗಳನ್ನು ಮಾತ್ರ ನೀವು ಸ್ಥಾಪಿಸಬೇಕು.</translation> -<translation id="4003986561708175844">ಅಗತ್ಯವಿರುವ ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಅಳವಡಿಸಲಾಗಿಲ್ಲ</translation> <translation id="3018094406922859308">ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> <translation id="7364796246159120393">ಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಿ</translation> +<translation id="2761667185364618470">ನೀವು ಮುಂದುವರೆಯಬೇಕಾದರೆ ದಯವಿಟ್ಟು ಈ ಬಾಕ್ಸ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿ.</translation> <translation id="8964020114565522021">ಇಲ್ಲಿ ಫೈಲ್ ಅನ್ನು ಎಳೆಯಿರಿ</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> ನ ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ.</translation> <translation id="838869780401515933">ಪರಿಶೀಲಿಸು</translation> <translation id="2846343701378493991">1024 (ಮದ್ಯಮ ಶ್ರೇಣಿ)</translation> <translation id="5476505524087279545">ಪರೀಕ್ಷಿಸಬೇಡಿ</translation> <translation id="3789841737615482174">ಇನ್ಸ್ಟಾಲ್</translation> +<translation id="2507943997699731163">ದಯವಿಟ್ಟು ಈ ಕ್ಷೇತ್ರವನ್ನು ಭರ್ತಿ ಮಾಡಿ.</translation> <translation id="5253117816378681419">ನೀವು <ph name="PLUGIN"/> ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಅಳವಡಿಸಲು ಬಯಸುವುದಾದಲ್ಲಿ ದಯವಿಟ್ಟು ಖಚಿತಪಡಿಸಿ. ನೀವು ನಂಬುವಂತಹ ಫ್ಲಗ್-ಇನ್ಗಳನ್ನು ಮಾತ್ರ ನೀವು ಅಳವಡಿಸಬೇಕು.</translation> <translation id="6663448176199120256">ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು</translation> +<translation id="7335060848622232389">ಪ್ಲಗ್ ಇನ್ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.</translation> <translation id="2597378329261239068">ಈ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಪಾಸ್ವರ್ಡ್ನಿಂದ ರಕ್ಷಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ.</translation> +<translation id="5466621249238537318">ದಯವಿಟ್ಟು ಒಂದು ಅಥವಾ ಹೆಚ್ಚು ಫೈಲ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation> +<translation id="8750798805984357768">ದಯವಿಟ್ಟು ಈ ಕೆಳಗಿನ ಆಯ್ಕೆಗಳಲ್ಲಿ ಒಂದನ್ನು ಆರಿಸಿ.</translation> <translation id="7740050170769002709">HTML ವಿಷಯ</translation> +<translation id="2226276347425096477">ದಯವಿಟ್ಟು ಈ ಪಠ್ಯವನ್ನು <ph name="MAX_CHARACTERS"/> ಅಕ್ಷರಗಳಿಗೆ ಅಥವಾ ಅದಕ್ಕಿಂತಲೂ ಕಡಿಮೆಗೆ ಸೀಮಿತಗೊಳಿಸಿ (ನೀವು ಪ್ರಸ್ತುತವಾಗಿ <ph name="CURRENT_LENGTH"/> ಅಕ್ಷರಗಳನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ).</translation> +<translation id="1639239467298939599">ಲೋಡ್ ಆಗುತ್ತಿದೆ</translation> +<translation id="2908441821576996758">ದಯವಿಟ್ಟು ಅಲ್ಪ ವಿರಾಮದಿಂದ ಬೇರ್ಪಡಿಸಿದ ಇಮೇಲ್ ವಿಳಾಸಗಳ ಪಟ್ಟಿಯನ್ನು ನಮೂದಿಸಿ.</translation> <translation id="5939518447894949180">ಮರುಹೊಂದಿಸು</translation> +<translation id="835897206747267392">ಅಮಾನ್ಯ ಮೌಲ್ಯ.</translation> +<translation id="3851140433852960970">ಈ ವಿಷಯವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಯಾವುದೇ ಪ್ಲಗ್-ಇನ್ ಲಭ್ಯವಿಲ್ಲ.</translation> <translation id="1842960171412779397">ಆಯ್ಕೆ ಮಾಡಿ</translation> +<translation id="3450233048674729344">ಮೌಲ್ಯವು <ph name="MAXIMUM"/> ಕ್ಕೆ ಸಮನಾಗಿರಬಹುದು ಅಥವಾ ಅದಕ್ಕಿಂತಲೂ ಕಡಿಮೆ ಆಗಿರಬಹುದು.</translation> +<translation id="9198010615634362518">ಅಗತ್ಯವಿರುವ ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಅಳವಡಿಸಲಾಗಿಲ್ಲ.</translation> <translation id="7638452146404718955">ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="6119846243427417423">ಸಕ್ರಿಯಗೊಳಿಸು</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ಫೈಲ್ಗಳು</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> ನ ಪ್ಲಗ್-ಇನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ</translation> -<translation id="6765711848403622008">ಈ ವಿಷಯವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಯಾವುದೇ ಪ್ಲಗ್-ಇನ್ ಲಭ್ಯವಿಲ್ಲ</translation> +<translation id="3934680773876859118">PDF ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation> <translation id="8597182159515967513">ಶೀರ್ಷಿಕೆ</translation> <translation id="2653659639078652383">ಸಲ್ಲಿಸು</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> ಪ್ಲಗ್-ಇನ್ ಅಗತ್ಯವಿದೆ</translation> diff --git a/webkit/glue/resources/webkit_strings_ko.xtb b/webkit/glue/resources/webkit_strings_ko.xtb index f3e829e..5c147e3 100644 --- a/webkit/glue/resources/webkit_strings_ko.xtb +++ b/webkit/glue/resources/webkit_strings_ko.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/>의 플러그인 설치 실패</translation> <translation id="9186171386827445984">문서 로드 중: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/>페이지</translation> <translation id="1235745349614807883">최근 검색 삭제</translation> +<translation id="1171774979989969504">이메일 주소를 입력하세요.</translation> +<translation id="709897737746224366">요청한 형식과 일치시키세요.</translation> <translation id="5048533449481078685">목록 표시기</translation> <translation id="372362261556059955">추가 플러그인 필요</translation> <translation id="4202807286478387388">건너뛰기</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">로드 중...</translation> <translation id="6845533974506654842">누르기</translation> <translation id="8244226242650769279">이미지 지도</translation> +<translation id="310520048233152454">URL을 입력하세요.</translation> <translation id="2548326553472216322">최근 수행된 검색 없음</translation> +<translation id="7263440858009898357">목록에서 항목을 선택하세요.</translation> +<translation id="5164977714490026579">값은 <ph name="MINIMUM"/> 이상이어야 합니다.</translation> <translation id="5944544982112848342">2048(높은 등급)</translation> <translation id="3040011195152428237">링크</translation> <translation id="2745343197843472802">플러그인 가져오기</translation> +<translation id="8451268428117625855">파일을 선택하세요.</translation> <translation id="5776402066334188252">플러그인을 설치할지 여부를 확인하시기 바랍니다. 신뢰할 수 있는 플러그인만 설치해야 합니다.</translation> -<translation id="4003986561708175844">필수 플러그인이 설치되지 않음</translation> <translation id="3018094406922859308"> 플러그인 다운로드 중...</translation> <translation id="7364796246159120393">파일 선택</translation> +<translation id="2761667185364618470">계속하려면 이 확인란을 선택하세요.</translation> <translation id="8964020114565522021">여기로 파일 드래그</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> 플러그인이 설치되지 않았습니다.</translation> <translation id="838869780401515933">선택</translation> <translation id="2846343701378493991">1024(중간 등급)</translation> <translation id="5476505524087279545">선택취소</translation> <translation id="3789841737615482174">설치</translation> +<translation id="2507943997699731163">이 입력란을 작성하세요.</translation> <translation id="5253117816378681419"><ph name="PLUGIN"/> 플러그인을 설치할지 여부를 확인하시기 바랍니다. 신뢰할 수 있는 플러그인만 설치해야 합니다.</translation> <translation id="6663448176199120256">최근 수행된 검색</translation> +<translation id="7335060848622232389">플러그인 설치가 중단되었습니다.</translation> <translation id="2597378329261239068">문서가 비밀번호로 보호되고 있습니다. 비밀번호를 입력하세요.</translation> +<translation id="5466621249238537318">파일을 한 개 이상 선택하세요.</translation> +<translation id="8750798805984357768">다음 옵션 중 하나를 선택하세요.</translation> <translation id="7740050170769002709">HTML 콘텐츠</translation> +<translation id="2226276347425096477">이 텍스트를 <ph name="MAX_CHARACTERS"/>자 이하로 줄이세요(현재 <ph name="CURRENT_LENGTH"/>자 사용 중).</translation> +<translation id="1639239467298939599">로드 중</translation> +<translation id="2908441821576996758">이메일 주소를 쉼표로 구분하여 입력하세요.</translation> <translation id="5939518447894949180">재설정</translation> +<translation id="835897206747267392">값이 잘못되었습니다.</translation> +<translation id="3851140433852960970">이 콘텐츠를 표시하는 데 사용할 플러그인이 없습니다.</translation> <translation id="1842960171412779397">선택</translation> +<translation id="3450233048674729344">값은 <ph name="MAXIMUM"/> 이하여야 합니다.</translation> +<translation id="9198010615634362518">필수 플러그인이 설치되지 않았습니다.</translation> <translation id="7638452146404718955">여기를 클릭하여 플러그인 다운로드</translation> <translation id="6119846243427417423">활성화</translation> <translation id="8444882422881193423">파일 <ph name="NUMBER_OF_FILES"/>개</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> 플러그인이 설치되지 않음</translation> -<translation id="6765711848403622008">이 콘텐츠를 표시하는 데 사용할 플러그인 없음</translation> +<translation id="3934680773876859118">PDF 문서를 로드하지 못했습니다.</translation> <translation id="8597182159515967513">항목</translation> <translation id="2653659639078652383">제출</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> 플러그인 필요</translation> diff --git a/webkit/glue/resources/webkit_strings_lt.xtb b/webkit/glue/resources/webkit_strings_lt.xtb index 7138796..3f2ec75 100644 --- a/webkit/glue/resources/webkit_strings_lt.xtb +++ b/webkit/glue/resources/webkit_strings_lt.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Nepavyko įdiegti papildinio iš <ph name="URL"/></translation> <translation id="9186171386827445984">Įkeliamas dokumentas: <ph name="PAGE_NUMBER"/> / <ph name="NUMBER_OF_PAGES"/> psl...</translation> <translation id="1235745349614807883">Išvalyti pastarąsias paieškas</translation> +<translation id="1171774979989969504">Įveskite el. pašto adresą.</translation> +<translation id="709897737746224366">Priderinkite reikalaujamą formatą.</translation> <translation id="5048533449481078685">sąrašo žymeklis</translation> <translation id="372362261556059955">Reikia papildomo papildinio</translation> <translation id="4202807286478387388">peršokti</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Įkeliama...</translation> <translation id="6845533974506654842">paspausti</translation> <translation id="8244226242650769279">paveikslėlio žemėlapis</translation> +<translation id="310520048233152454">Įveskite URL.</translation> <translation id="2548326553472216322">Pastaruoju metu paieškų nevykdyta</translation> +<translation id="7263440858009898357">Pasirinkite sąraše pateiktą elementą.</translation> +<translation id="5164977714490026579">Vertė turi būti <ph name="MINIMUM"/> arba didesnė.</translation> <translation id="5944544982112848342">2048 (Aukšto laipsnio)</translation> <translation id="3040011195152428237">nuoroda</translation> <translation id="2745343197843472802">Gauti papildinį</translation> +<translation id="8451268428117625855">Pasirinkite failą.</translation> <translation id="5776402066334188252">Patvirtinkite, kad norite įdiegti šį papildinį. Turėtumėte diegti tik tuos papildinius, kurie yra patikimi.</translation> -<translation id="4003986561708175844">Neįdiegtas reikalingas papildinys</translation> <translation id="3018094406922859308">Atsisiunčiamas papildinys...</translation> <translation id="7364796246159120393">Pasirinkti failą</translation> +<translation id="2761667185364618470">Jei norite tęsti, pažymėkite šį laukelį.</translation> <translation id="8964020114565522021">Vilkite failą čia</translation> +<translation id="5129723458012748440">„<ph name="PLUGIN"/>“ papildinys neįdiegtas.</translation> <translation id="838869780401515933">tikrinti</translation> <translation id="2846343701378493991">1024 (vidutinio lygio)</translation> <translation id="5476505524087279545">Nuimti žymėjimą</translation> <translation id="3789841737615482174">Diegti</translation> +<translation id="2507943997699731163">Užpildykite šį lauką.</translation> <translation id="5253117816378681419">Patvirtinkite, kad norite įdiegti šį „<ph name="PLUGIN"/>“ papildinį. Turėtumėte diegti tik tuos papildinius, kurie patikimi.</translation> <translation id="6663448176199120256">Naujausios paieškos</translation> +<translation id="7335060848622232389">Papildinių įdiegimas neleidžiamas.</translation> <translation id="2597378329261239068">Šis dokumentas apsaugotas slaptažodžiu. Įveskite slaptažodį.</translation> +<translation id="5466621249238537318">Pasirinkite bent vieną failą.</translation> +<translation id="8750798805984357768">Pasirinkite vieną iš šių parinkčių.</translation> <translation id="7740050170769002709">HTML turinys</translation> +<translation id="2226276347425096477">Sutrumpinkite šį tekstą iki <ph name="MAX_CHARACTERS"/> simb. ar mažiau (šiuo metu naudojate <ph name="CURRENT_LENGTH"/> simb.).</translation> +<translation id="1639239467298939599">Įkeliama</translation> +<translation id="2908441821576996758">Įveskite kableliais atskirtą el. pašto adresų sąrašą.</translation> <translation id="5939518447894949180">Nustatyti iš naujo</translation> +<translation id="835897206747267392">Neteisinga vertė.</translation> +<translation id="3851140433852960970">Nėra papildinio, kad būtų galima pateikti šį turinį.</translation> <translation id="1842960171412779397">pasirinkti</translation> +<translation id="3450233048674729344">Vertė turi būti <ph name="MAXIMUM"/> arba mažesnė.</translation> +<translation id="9198010615634362518">Neįdiegtas reikalingas papildinys.</translation> <translation id="7638452146404718955">Spustelėkite čia, kad atsisiųstumėte papildinį</translation> <translation id="6119846243427417423">aktyvinti</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> failai (-ų)</translation> -<translation id="4470547978413275879">„<ph name="PLUGIN"/>“ papildinys neįdiegtas</translation> -<translation id="6765711848403622008">Nėra papildinio, kad būtų galima pateikti šį turinį</translation> +<translation id="3934680773876859118">Nepavyko įkelti PDF dokumento</translation> <translation id="8597182159515967513">antraštė</translation> <translation id="2653659639078652383">Pateikti</translation> <translation id="8475551193147984329">Reikia „<ph name="PLUGIN"/>“ papildinio</translation> diff --git a/webkit/glue/resources/webkit_strings_lv.xtb b/webkit/glue/resources/webkit_strings_lv.xtb index f070834..ebfb0ad 100644 --- a/webkit/glue/resources/webkit_strings_lv.xtb +++ b/webkit/glue/resources/webkit_strings_lv.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Neizdevās instalēt spraudni no <ph name="URL"/></translation> <translation id="9186171386827445984">Notiek dokumenta ielāde: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> lappuses...</translation> <translation id="1235745349614807883">Dzēst nesenos meklējumus</translation> +<translation id="1171774979989969504">Ievadiet e-pasta adresi.</translation> +<translation id="709897737746224366">Pieskaņojiet vērtību prasītajam formātam.</translation> <translation id="5048533449481078685">sarakstu marķieris</translation> <translation id="372362261556059955">Nepieciešams papildu spraudnis</translation> <translation id="4202807286478387388">lekt</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Notiek ielāde...</translation> <translation id="6845533974506654842">nospiest</translation> <translation id="8244226242650769279">attēlu karte</translation> +<translation id="310520048233152454">Ievadiet URL.</translation> <translation id="2548326553472216322">Nav nesenu meklējumu</translation> +<translation id="7263440858009898357">Atlasiet vienumu sarakstā.</translation> +<translation id="5164977714490026579">Vērtībai ir jābūt lielākai vai vienādai ar <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Augsta Atzīme)</translation> <translation id="3040011195152428237">saite</translation> <translation id="2745343197843472802">Lejupielādēt spraudni</translation> +<translation id="8451268428117625855">Lūdzu, atlasiet failu.</translation> <translation id="5776402066334188252">Lūdzu, apstipriniet, ka vēlaties instalēt šo spraudni. Ieteicams instalēt tikai tos spraudņus, kuriem uzticaties.</translation> -<translation id="4003986561708175844">Nepieciešamais spraudnis nav instalēts</translation> <translation id="3018094406922859308">Notiek spraudņa lejupielāde...</translation> <translation id="7364796246159120393">Izvēlieties failu</translation> +<translation id="2761667185364618470">Lai turpinātu, atzīmējiet šo izvēles rūtiņu.</translation> <translation id="8964020114565522021">Ievelciet failu šeit</translation> +<translation id="5129723458012748440">Spraudnis <ph name="PLUGIN"/> nav instalēts.</translation> <translation id="838869780401515933">prbaudt</translation> <translation id="2846343701378493991">1024 (Vidēja Atzīme)</translation> <translation id="5476505524087279545">neprbaudt</translation> <translation id="3789841737615482174">Iestatīt</translation> +<translation id="2507943997699731163">Aizpildiet šo lauku.</translation> <translation id="5253117816378681419">Lūdzu, apstipriniet, ka vēlaties instalēt <ph name="PLUGIN"/> spraudni. Jums ir jāinstalē tikai tie spraudņi, kuriem uzticaties.</translation> <translation id="6663448176199120256">Neseni meklējumi</translation> +<translation id="7335060848622232389">Spraudņu instalēšana ir atspējota.</translation> <translation id="2597378329261239068">Šis dokuments ir aizsargāts ar paroli. Lūdzu, ievadiet paroli.</translation> +<translation id="5466621249238537318">Lūdzu, atlasiet vienu vai vairākus failus.</translation> +<translation id="8750798805984357768">Lūdzu, atlasiet vienu no šīm opcijām.</translation> <translation id="7740050170769002709">HTML saturs</translation> +<translation id="2226276347425096477">Lūdzu, saīsiniet šo tekstu līdz <ph name="MAX_CHARACTERS"/> vai mazāk zīmēm (pašreiz tas ietver <ph name="CURRENT_LENGTH"/> rakstzīmes).</translation> +<translation id="1639239467298939599">Notiek ielāde</translation> +<translation id="2908441821576996758">Lūdzu, ievadiet ar komatu atdalītu e-pasta adrešu sarakstu.</translation> <translation id="5939518447894949180">Atiestatīt</translation> +<translation id="835897206747267392">Nederīga vērtība.</translation> +<translation id="3851140433852960970">Nav pieejams neviens spraudnis, kas var attēlot šo saturu.</translation> <translation id="1842960171412779397">Atlasiet</translation> +<translation id="3450233048674729344">Vērtībai ir jābūt mazākai vai vienādai ar <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Nepieciešamais spraudnis nav instalēts.</translation> <translation id="7638452146404718955">Noklikšķiniet šeit, lai lejupielādētu spraudni</translation> <translation id="6119846243427417423">aktivizt</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> faili</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> spraudnis nav instalēts</translation> -<translation id="6765711848403622008">Nav pieejams neviens spraudnis, kas var attēlot šo saturu</translation> +<translation id="3934680773876859118">Neizdevās ielādēt PDF dokumentu</translation> <translation id="8597182159515967513">Virsraksts</translation> <translation id="2653659639078652383">Iesniegt</translation> <translation id="8475551193147984329">Nepieciešams <ph name="PLUGIN"/> spraudnis</translation> diff --git a/webkit/glue/resources/webkit_strings_ml.xtb b/webkit/glue/resources/webkit_strings_ml.xtb index fdf0843..6bfaacc 100644 --- a/webkit/glue/resources/webkit_strings_ml.xtb +++ b/webkit/glue/resources/webkit_strings_ml.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> എന്നതില് നിന്നുള്ള പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്യുന്നതിന് പരാജയപ്പെട്ടു</translation> <translation id="9186171386827445984">പ്രമാണങ്ങള് ലോഡുചെയ്യുന്നു: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> പേജുകള്...</translation> <translation id="1235745349614807883">അടുത്തിടെയുള്ള തിരയലുകള് മായ്ക്കുക</translation> +<translation id="1171774979989969504">ദയവായി ഒരു ഇമെയില് വിലാസം നല്കുക.</translation> +<translation id="709897737746224366">അഭ്യര്ത്ഥി ച്ചഫോര്മാറ്റ് ദയവായി പൊരുത്തപ്പെടുത്തുക.</translation> <translation id="5048533449481078685">പട്ടിക മാര്ക്കര്</translation> <translation id="372362261556059955">കൂടുതല് പ്ലഗ്-ഇന് ആവശ്യമുണ്ട്</translation> <translation id="4202807286478387388">jump</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">ലോഡ്ചെയ്യുന്നു...</translation> <translation id="6845533974506654842">അമര്ത്തുക</translation> <translation id="8244226242650769279">ഇമേജ് മാപ്പ്</translation> +<translation id="310520048233152454">ദയവായി ഒരു URL നല്കുക.</translation> <translation id="2548326553472216322">സമീപകാല തിരയലുകള് ഇല്ല</translation> +<translation id="7263440858009898357">പട്ടികയിലെ ഒരു ഇനം ദയവായി തിരഞ്ഞെടുക്കുക</translation> +<translation id="5164977714490026579">മൂല്യം <ph name="MINIMUM"/> എന്നതില് കൂടുതലോ സമമോ ആയിരിക്കണം.</translation> <translation id="5944544982112848342">2048 (High Grade)</translation> <translation id="3040011195152428237">ലിങ്ക്</translation> <translation id="2745343197843472802">പ്ലഗ്-ഇന് നേടുക</translation> +<translation id="8451268428117625855">ദയവായി ഒരു ഫയല് തരം തിരഞ്ഞെടുക്കുക.</translation> <translation id="5776402066334188252">നിങ്ങള് ഈ പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്യാന് താല്പ്പര്യപ്പെടുന്നുവെന്നത് ദയവായി സ്ഥിരീകരിക്കുക. നിങ്ങള് വിശ്വസിക്കുന്ന പ്ലഗ്-ഇനുകള് മാത്രമേ ഇന്സ്റ്റാള് ചെയ്യാവൂ.</translation> -<translation id="4003986561708175844">ആവശ്യമായ പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്തില്ല</translation> <translation id="3018094406922859308">പ്ലഗ്-ഇന് ഡൌണ്ലോഡുചെയ്യുന്നു...</translation> <translation id="7364796246159120393">ഫയല് തിരഞ്ഞെടുക്കൂ</translation> +<translation id="2761667185364618470">നിങ്ങള് തുടരാന് താല്പ്പര്യപ്പെടുന്നെങ്കില് ഈ ബോക്സ് ദയവായി പരിശോധിക്കുക.</translation> <translation id="8964020114565522021">ഇവിടെ ഫയല് ഇഴയ്ക്കുക</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്തില്ല.</translation> <translation id="838869780401515933">പരിശോധിക്കൂ</translation> <translation id="2846343701378493991">1024 (മീഡിയം ഗ്രേഡ്)</translation> <translation id="5476505524087279545">അണ്ചെക്ക് ചെയ്യുക</translation> <translation id="3789841737615482174">ഇന്സ്റ്റോള് ചെയ്യുക</translation> +<translation id="2507943997699731163">ദയവായി ഈ ഫീല്ഡ് പൂരിപ്പിക്കുക.</translation> <translation id="5253117816378681419">നിങ്ങള് ഈ <ph name="PLUGIN"/> പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്യാന് താല്പ്പര്യപ്പെടുന്നുവെന്നത് ദയവായി സ്ഥിരീകരിക്കുക. നിങ്ങള് വിശ്വസിക്കുന്ന പ്ലഗ്-ഇനുകള് മാത്രമേ ഇന്സ്റ്റാള് ചെയ്യാവൂ.</translation> <translation id="6663448176199120256">സമീപകാല തിരയലുകള്</translation> +<translation id="7335060848622232389">പ്ലഗ്-ഇന്നുകള് ഇന്സ്റ്റാള് ചെയ്യുന്നത് അപ്രാപ്തമാക്കി.</translation> <translation id="2597378329261239068">ഈ പ്രമാണം പാസ്വേഡ് പരിരക്ഷിതമാണ്. ദയവായി ഒരു പാസ്വേഡ് നല്കുക.</translation> +<translation id="5466621249238537318">ഒന്നോ അതില്ക്കൂടുതലോ ഫയലുകള് ദയവായി തിരഞ്ഞെടുക്കുക.</translation> +<translation id="8750798805984357768">ഈ ഓപ്ഷനുകളിലൊന്ന് ദയവായി തിരഞ്ഞെടുക്കുക.</translation> <translation id="7740050170769002709">HTML ഉള്ളടക്കം</translation> +<translation id="2226276347425096477">ഈ വാചകത്തെ <ph name="MAX_CHARACTERS"/> അല്ലെങ്കില് അതില്ക്കുറവ് പ്രതീകങ്ങളായി ദയവായി കുറയ്ക്കുക (നിങ്ങള് നിലവില് <ph name="CURRENT_LENGTH"/> പ്രതീകങ്ങള് ഉപയോഗിക്കുകയാണ്).</translation> +<translation id="1639239467298939599">ലോഡുചെയ്യുന്നു</translation> +<translation id="2908441821576996758">ഇമെയില് വിലാസങ്ങളുടെ കോമയാല് വേര്തിരിച്ച ഒരു പട്ടിക ദയവായി നല്കുക.</translation> <translation id="5939518447894949180">വീണ്ടും സജ്ജീകരിക്കുക</translation> +<translation id="835897206747267392">അസാധുവായ മൂല്യം.</translation> +<translation id="3851140433852960970">ഈ ഉള്ളടക്കം പ്രദര്ശിപ്പിക്കുന്നതിന് പ്ലഗ്-ഇന്നൊന്നും ലഭ്യമല്ല.</translation> <translation id="1842960171412779397">തിരഞ്ഞെടുക്കൂ</translation> +<translation id="3450233048674729344">മൂല്യം <ph name="MAXIMUM"/> എന്നതില് കുറവോ സമമോ ആയിരിക്കണം.</translation> +<translation id="9198010615634362518">ആവശ്യമായ പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്തില്ല.</translation> <translation id="7638452146404718955">പ്ലഗ്-ഇന് ഡൌണ്ലോഡുചെയ്യുന്നതിന് ഇവിടെ ക്ലിക്കുചെയ്യുക</translation> <translation id="6119846243427417423">ആക്റ്റിവേറ്റ് ചെയ്യുക</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ഫയലുകള്</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> പ്ലഗ്-ഇന് ഇന്സ്റ്റാളുചെയ്തില്ല</translation> -<translation id="6765711848403622008">ഈ ഉള്ളടക്കം പ്രദര്ശിപ്പിക്കുന്നതിന് പ്ലഗ്-ഇന്നൊന്നും ലഭ്യമല്ല</translation> +<translation id="3934680773876859118">PDF പ്രമാണം ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു</translation> <translation id="8597182159515967513">തലക്കെട്ട്</translation> <translation id="2653659639078652383">സമര്പ്പിക്കൂ</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> പ്ലഗ്-ഇന് ആവശ്യമുണ്ട്</translation> diff --git a/webkit/glue/resources/webkit_strings_mr.xtb b/webkit/glue/resources/webkit_strings_mr.xtb index da03fe1..f902478 100644 --- a/webkit/glue/resources/webkit_strings_mr.xtb +++ b/webkit/glue/resources/webkit_strings_mr.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> वरून प्लग-इन स्थापित करणे अयशस्वी</translation> <translation id="9186171386827445984">दस्तऐवज लोड करत आहे: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> पृष्ठे...</translation> <translation id="1235745349614807883">अलीकडील शोध साफ करा</translation> +<translation id="1171774979989969504">कृपया एक ईमेल पत्ता प्रविष्ट करा.</translation> +<translation id="709897737746224366">कृपया विनंती केलेले स्वरूपन जुळवा.</translation> <translation id="5048533449481078685">सूची चिन्हक</translation> <translation id="372362261556059955">अतिरिक्त प्लग-इन आवश्यक</translation> <translation id="4202807286478387388">जंप करा</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">लोड करीत आहे...</translation> <translation id="6845533974506654842">दाबा</translation> <translation id="8244226242650769279">प्रतिमा नकाशा</translation> +<translation id="310520048233152454">कृपया एखादी URL प्रविष्ट करा.</translation> <translation id="2548326553472216322">अलीकडील शोध नाहीत</translation> +<translation id="7263440858009898357">कृपया सूचीमधील आयटम निवडा.</translation> +<translation id="5164977714490026579">मूल्य <ph name="MINIMUM"/> पेक्षा मोठे किंवा समान असावे.</translation> <translation id="5944544982112848342">2048 (उच्च ग्रेड)</translation> <translation id="3040011195152428237">दुवा</translation> <translation id="2745343197843472802">प्लग-इन मिळवा</translation> +<translation id="8451268428117625855">कृपया एखादी फाइल निवडा.</translation> <translation id="5776402066334188252">कृपया आपण हे प्लग-इन स्थापित करण्यास इच्छुक असल्याची पुष्टी करा. आपण केवळ विश्वासार्ह असलेली प्लग-इन्स फक्त स्थापित करावीत.</translation> -<translation id="4003986561708175844">आवश्यक असलेले प्लग-इन स्थापित नाही</translation> <translation id="3018094406922859308">प्लग-इन डाउनलोड करीत आहे...</translation> <translation id="7364796246159120393">फाइल निवडा</translation> +<translation id="2761667185364618470">कृपया आपण पुढे चालू ठेवू इच्छित असल्यास हा बॉक्स पहा.</translation> <translation id="8964020114565522021">फाइल येथे ड्रॅग करा</translation> +<translation id="5129723458012748440">प्लग-इन <ph name="PLUGIN"/> स्थापित केले नाही.</translation> <translation id="838869780401515933">तपासा</translation> <translation id="2846343701378493991">1024 (मध्यम प्रत)</translation> <translation id="5476505524087279545">अनचेक</translation> <translation id="3789841737615482174">स्थापना करा</translation> +<translation id="2507943997699731163">कृपया हे फील्ड भरा.</translation> <translation id="5253117816378681419">कृपया आपल्याला प्लग-इन <ph name="PLUGIN"/> स्थापित करणे आवडत असल्याची पुष्टी करा. आपण आपला विश्वास असलेले प्लग-इन्स फक्त स्थापित करावे. </translation> <translation id="6663448176199120256">अलीकडील शोध</translation> +<translation id="7335060848622232389">प्लग-इन स्थापित करणे अक्षम केले गेले आहे.</translation> <translation id="2597378329261239068">हा दस्तऐवज संकेतशब्द संरक्षित आहे. कृपया संकेतशब्द प्रविष्ट करा.</translation> +<translation id="5466621249238537318">कृपया एक किंवा अधिक फायली निवडा.</translation> +<translation id="8750798805984357768">कृपया या पर्यायांपैकी एक निवडा.</translation> <translation id="7740050170769002709">HTML सामुग्री</translation> +<translation id="2226276347425096477">कृपया हा मजकूर <ph name="MAX_CHARACTERS"/> वर्ण लहान किंवा कमी करा (आपण सध्या <ph name="CURRENT_LENGTH"/> वर्ण वापरत आहात).</translation> +<translation id="1639239467298939599">लोड करीत आहे</translation> +<translation id="2908441821576996758">कृपया ईमेल पत्त्यांची स्वल्पविरामाद्वारे विभक्त सूची प्रविष्ट करा.</translation> <translation id="5939518447894949180">रीसेट करा</translation> +<translation id="835897206747267392">अवैध मूल्य.</translation> +<translation id="3851140433852960970">ही सामग्री प्रदर्शित करण्यासाठी कोणतेही प्लग-इन उपलब्ध नाही.</translation> <translation id="1842960171412779397">निवडा</translation> +<translation id="3450233048674729344">मूल्य <ph name="MAXIMUM"/> पेक्षा कमी किंवा समान असावे.</translation> +<translation id="9198010615634362518">आवश्यक असलेले प्लग-इन स्थापित नाही.</translation> <translation id="7638452146404718955">प्लग-इन डाउनलोड करण्यासाठी येथे क्लिक करा</translation> <translation id="6119846243427417423">सक्रिय करा</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> फायली</translation> -<translation id="4470547978413275879">प्लग-इन <ph name="PLUGIN"/> स्थापित केले नाही</translation> -<translation id="6765711848403622008">ही सामग्री प्रदर्शित करण्यासाठी कोणतेही प्लग-इन उपलब्ध नाही</translation> +<translation id="3934680773876859118">PDF दस्तऐवज लोड करणे अयशस्वी</translation> <translation id="8597182159515967513">शीर्षलेख</translation> <translation id="2653659639078652383">सबमिट करा</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> प्लग-इन आवश्यक ,,,</translation> diff --git a/webkit/glue/resources/webkit_strings_nl.xtb b/webkit/glue/resources/webkit_strings_nl.xtb index d3b90a2..f8c8b24 100644 --- a/webkit/glue/resources/webkit_strings_nl.xtb +++ b/webkit/glue/resources/webkit_strings_nl.xtb @@ -1,46 +1,63 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="nl"> -<translation id="4519964825805946997">Het installeren van de invoegtoepassing van <ph name="URL"/> is mislukt</translation> +<translation id="4519964825805946997">Het installeren van de plugin van <ph name="URL"/> is mislukt</translation> <translation id="9186171386827445984">Document wordt geladen: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> pagina's...</translation> <translation id="1235745349614807883">Recente zoekopdrachten wissen</translation> +<translation id="1171774979989969504">Geef een e-mailadres op.</translation> +<translation id="709897737746224366">Zorg dat de indeling voldoet aan de gevraagde indeling.</translation> <translation id="5048533449481078685">lijstmarkering</translation> -<translation id="372362261556059955">Aanvullende invoegtoepassing vereist</translation> +<translation id="372362261556059955">Aanvullende plugin vereist</translation> <translation id="4202807286478387388">Gaan naar</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> <translation id="7658239707568436148">Annuleren</translation> <translation id="795667975304826397">Geen bestand gekozen</translation> -<translation id="1416462845279468967">De installatie van de invoegtoepassing is mislukt</translation> +<translation id="1416462845279468967">De installatie van de plugin is mislukt</translation> <translation id="8141602879876242471">Dit is een doorzoekbare index. Geef zoekwoorden op:</translation> -<translation id="5650795167354946011">Klik hier na het installeren van de invoegtoepassing om te vernieuwen</translation> +<translation id="5650795167354946011">Klik hier na het installeren van de plugin om te vernieuwen</translation> <translation id="370665806235115550">Laden...</translation> <translation id="6845533974506654842">Indrukken</translation> <translation id="8244226242650769279">image map</translation> +<translation id="310520048233152454">Geef een URL op.</translation> <translation id="2548326553472216322">Geen recente zoekopdrachten</translation> +<translation id="7263440858009898357">Selecteer een item in de lijst.</translation> +<translation id="5164977714490026579">Waarde moet groter dan of gelijk zijn aan <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (hoog niveau)</translation> <translation id="3040011195152428237">link</translation> -<translation id="2745343197843472802">Invoegtoepassing downloaden</translation> -<translation id="5776402066334188252">Bevestig dat u deze invoegtoepassing wilt installeren. U moet alleen invoegtoepassingen installeren die u vertrouwt.</translation> -<translation id="4003986561708175844">De vereiste invoegtoepassing is niet geïnstalleerd</translation> -<translation id="3018094406922859308">Invoegtoepassing downloaden...</translation> +<translation id="2745343197843472802">Plugin downloaden</translation> +<translation id="8451268428117625855">Selecteer een bestand.</translation> +<translation id="5776402066334188252">Bevestig dat u deze plugins wilt installeren. U moet alleen plugins installeren die u vertrouwt.</translation> +<translation id="3018094406922859308">Plugin downloaden...</translation> <translation id="7364796246159120393">Bestand kiezen</translation> +<translation id="2761667185364618470">Vink dit selectievakje aan als u wilt doorgaan.</translation> <translation id="8964020114565522021">Sleep bestand hier naartoe</translation> +<translation id="5129723458012748440">De plugin <ph name="PLUGIN"/> is niet geïnstalleerd.</translation> <translation id="838869780401515933">Selecteren</translation> <translation id="2846343701378493991">1024 (gemiddeld niveau)</translation> <translation id="5476505524087279545">Deselecteren</translation> <translation id="3789841737615482174">Installeren</translation> -<translation id="5253117816378681419">Bevestig dat u de invoegtoepassing van <ph name="PLUGIN"/> wilt installeren. U moet alleen invoegtoepassingen installeren die u vertrouwt.</translation> +<translation id="2507943997699731163">Vul dit veld in.</translation> +<translation id="5253117816378681419">Bevestig dat u de plugins van <ph name="PLUGIN"/> wilt installeren. U moet alleen plugins installeren die u vertrouwt.</translation> <translation id="6663448176199120256">Recente zoekopdrachten</translation> +<translation id="7335060848622232389">Het installeren van plugins is uitgeschakeld.</translation> <translation id="2597378329261239068">Dit document is beveiligd met een wachtwoord. Geef een wachtwoord op.</translation> +<translation id="5466621249238537318">Selecteer een of meer bestanden.</translation> +<translation id="8750798805984357768">Selecteer een van deze opties.</translation> <translation id="7740050170769002709">HTML-inhoud</translation> +<translation id="2226276347425096477">Kort deze tekst in tot <ph name="MAX_CHARACTERS"/> tekens of minder (u gebruikt momenteel <ph name="CURRENT_LENGTH"/> tekens).</translation> +<translation id="1639239467298939599">Laden</translation> +<translation id="2908441821576996758">Voer een door komma's gescheiden lijst met e-mailadressen in.</translation> <translation id="5939518447894949180">Herstellen</translation> +<translation id="835897206747267392">Ongeldige waarde.</translation> +<translation id="3851140433852960970">Er is geen plugin beschikbaar om deze inhoud weer te geven.</translation> <translation id="1842960171412779397">Selecteren</translation> -<translation id="7638452146404718955">Klik hier om de invoegtoepassing te downloaden</translation> +<translation id="3450233048674729344">Waarde moet kleiner dan of gelijk zijn aan <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">De vereiste plugin is niet geïnstalleerd.</translation> +<translation id="7638452146404718955">Klik hier om de plugin te downloaden</translation> <translation id="6119846243427417423">Activeren</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> bestanden</translation> -<translation id="4470547978413275879">De invoegtoepassing <ph name="PLUGIN"/> is niet geïnstalleerd</translation> -<translation id="6765711848403622008">Er is geen invoegtoepassing beschikbaar om deze inhoud weer te geven</translation> +<translation id="3934680773876859118">PDF-document kan niet worden geladen</translation> <translation id="8597182159515967513">kop</translation> <translation id="2653659639078652383">Verzenden</translation> -<translation id="8475551193147984329"><ph name="PLUGIN"/>-invoegtoepassing vereist</translation> +<translation id="8475551193147984329"><ph name="PLUGIN"/>-plugin vereist</translation> </translationbundle>
\ No newline at end of file diff --git a/webkit/glue/resources/webkit_strings_no.xtb b/webkit/glue/resources/webkit_strings_no.xtb index 6346872..c3ed131 100644 --- a/webkit/glue/resources/webkit_strings_no.xtb +++ b/webkit/glue/resources/webkit_strings_no.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Kunne ikke installere programtillegget fra <ph name="URL"/></translation> <translation id="9186171386827445984">Laster inn dokument: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> sider</translation> <translation id="1235745349614807883">Fjern nylige søk</translation> +<translation id="1171774979989969504">Skriv inn en e-postadresse.</translation> +<translation id="709897737746224366">Sørg for samsvar med det forespurte formatet.</translation> <translation id="5048533449481078685">listemarkør</translation> <translation id="372362261556059955">Ekstra programtillegg kreves</translation> <translation id="4202807286478387388">hopp</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Laster inn...</translation> <translation id="6845533974506654842">trykk</translation> <translation id="8244226242650769279">bildekart</translation> +<translation id="310520048233152454">Skriv inn en nettadresse.</translation> <translation id="2548326553472216322">Ingen nylige søk</translation> +<translation id="7263440858009898357">Velg en artikkel i listen.</translation> +<translation id="5164977714490026579">Verdien må være større enn eller lik <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (sterk)</translation> <translation id="3040011195152428237">kobling</translation> <translation id="2745343197843472802">Finn programtillegg</translation> +<translation id="8451268428117625855">Velg en fil.</translation> <translation id="5776402066334188252">Bekreft at du ønsker å installere programtillegget. Du bør kun installere programtillegg du stoler på.</translation> -<translation id="4003986561708175844">Det nødvendige programmet er ikke installert</translation> <translation id="3018094406922859308">Laster ned programtillegg</translation> <translation id="7364796246159120393">Velg fil</translation> +<translation id="2761667185364618470">Kryss av denne boksen hvis du vil fortsette.</translation> <translation id="8964020114565522021">Dra filen hit</translation> +<translation id="5129723458012748440">Programtillegget <ph name="PLUGIN"/> er ikke installert.</translation> <translation id="838869780401515933">merk av</translation> <translation id="2846343701378493991">1024 (middels)</translation> <translation id="5476505524087279545">fjern merke</translation> <translation id="3789841737615482174">Installer</translation> +<translation id="2507943997699731163">Vennligst fyll ut dette feltet.</translation> <translation id="5253117816378681419">Bekreft at du ønsker å installere programtillegget <ph name="PLUGIN"/>. Du bør kun installere programtillegg du stoler på.</translation> <translation id="6663448176199120256">Nylige søk</translation> +<translation id="7335060848622232389">Installering av programtillegg er deaktivert.</translation> <translation id="2597378329261239068">Dette dokumentet er passordbeskyttet. Skriv inn et passord.</translation> +<translation id="5466621249238537318">Velg én eller flere filer.</translation> +<translation id="8750798805984357768">Velg ett av følgende alternativer.</translation> <translation id="7740050170769002709">HTML-innhold</translation> +<translation id="2226276347425096477">Forkort denne teksten til <ph name="MAX_CHARACTERS"/> tegn eller færre (for øyeblikket bruker du <ph name="CURRENT_LENGTH"/> tegn).</translation> +<translation id="1639239467298939599">Laster inn</translation> +<translation id="2908441821576996758">Skriv inn en liste over e-postadresser atskilt med komma.</translation> <translation id="5939518447894949180">Tilbakestill</translation> +<translation id="835897206747267392">Ugyldig verdi</translation> +<translation id="3851140433852960970">Ingen programtillegg er tilgjengelige for å vise dette innholdet.</translation> <translation id="1842960171412779397">velg</translation> +<translation id="3450233048674729344">Verdien må være mindre enn eller lik <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Det nødvendige programtillegget er ikke installert.</translation> <translation id="7638452146404718955">Klikk her for å laste ned programtillegget</translation> <translation id="6119846243427417423">aktiver</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> filer</translation> -<translation id="4470547978413275879">Programtillegget <ph name="PLUGIN"/> er ikke installert</translation> -<translation id="6765711848403622008">Ingen programtillegg tilgjengelig for å vise dette innholdet</translation> +<translation id="3934680773876859118">Kan ikke laste inn PDF-dokument</translation> <translation id="8597182159515967513">overskrift</translation> <translation id="2653659639078652383">Send</translation> <translation id="8475551193147984329">Programtillegg <ph name="PLUGIN"/> påkrevd</translation> diff --git a/webkit/glue/resources/webkit_strings_pl.xtb b/webkit/glue/resources/webkit_strings_pl.xtb index b37ec7e..67b1fd3 100644 --- a/webkit/glue/resources/webkit_strings_pl.xtb +++ b/webkit/glue/resources/webkit_strings_pl.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Nie można zainstalować wtyczki dostępnej pod adresem <ph name="URL"/></translation> <translation id="9186171386827445984">Wczytywanie dokumentu: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> stron...</translation> <translation id="1235745349614807883">Wyczyść ostatnie wyszukiwania</translation> +<translation id="1171774979989969504">Wprowadź adres e-mail.</translation> +<translation id="709897737746224366">Podaj wartość w wymaganym formacie.</translation> <translation id="5048533449481078685">znacznik listy</translation> <translation id="372362261556059955">Potrzebna jest dodatkowa wtyczka</translation> <translation id="4202807286478387388">przejdź</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Ładowanie...</translation> <translation id="6845533974506654842">naciśnij</translation> <translation id="8244226242650769279">mapa grafiki</translation> +<translation id="310520048233152454">Wprowadź adres URL.</translation> <translation id="2548326553472216322">Brak ostatnich wyszukiwań</translation> +<translation id="7263440858009898357">Wybierz element z listy.</translation> +<translation id="5164977714490026579">Wartość nie może być mniejsza niż <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (wysoki poziom)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Pobierz wtyczkę</translation> +<translation id="8451268428117625855">Wybierz plik.</translation> <translation id="5776402066334188252">Potwierdź zamiar zainstalowania tej wtyczki. Należy instalować wyłącznie zaufane wtyczki.</translation> -<translation id="4003986561708175844">Wymagana wtyczka nie jest zainstalowana</translation> <translation id="3018094406922859308">Trwa pobieranie wtyczki...</translation> <translation id="7364796246159120393">Wybierz plik</translation> +<translation id="2761667185364618470">Zaznacz to pole, jeśli chcesz kontynuować.</translation> <translation id="8964020114565522021">Przeciągnij plik tutaj</translation> +<translation id="5129723458012748440">Wtyczka <ph name="PLUGIN"/> nie jest zainstalowana.</translation> <translation id="838869780401515933">zaznacz</translation> <translation id="2846343701378493991">1024 (średni poziom)</translation> <translation id="5476505524087279545">odznacz</translation> <translation id="3789841737615482174">Zainstaluj</translation> +<translation id="2507943997699731163">Wypełnij to pole.</translation> <translation id="5253117816378681419">Potwierdź zamiar zainstalowania wtyczki <ph name="PLUGIN"/>. Należy instalować wyłącznie zaufane wtyczki.</translation> <translation id="6663448176199120256">Ostatnie wyszukiwania</translation> +<translation id="7335060848622232389">Funkcja instalowania wtyczek została wyłączona.</translation> <translation id="2597378329261239068">Ten dokument jest chroniony hasłem. Wprowadź hasło.</translation> +<translation id="5466621249238537318">Wybierz jeden lub kilka plików.</translation> +<translation id="8750798805984357768">Wybierz jedną z opcji.</translation> <translation id="7740050170769002709">Treść HTML</translation> +<translation id="2226276347425096477">Skróć ten tekst do maksymalnie <ph name="MAX_CHARACTERS"/> znaków (w tej chwili korzystasz z <ph name="CURRENT_LENGTH"/> znaków).</translation> +<translation id="1639239467298939599">Wczytywanie</translation> +<translation id="2908441821576996758">Podaj listę adresów e-mail rozdzielonych przecinkami.</translation> <translation id="5939518447894949180">Resetuj</translation> +<translation id="835897206747267392">Nieprawidłowa wartość.</translation> +<translation id="3851140433852960970">Brak dostępnej wtyczki umożliwiającej wyświetlenie tej treści.</translation> <translation id="1842960171412779397">wybierz</translation> +<translation id="3450233048674729344">Wartość nie może być większa niż <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Wymagana wtyczka nie jest zainstalowana.</translation> <translation id="7638452146404718955">Kliknij tutaj, aby pobrać wtyczkę</translation> <translation id="6119846243427417423">aktywuj</translation> <translation id="8444882422881193423">Liczba plików: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Wtyczka <ph name="PLUGIN"/> nie jest zainstalowana</translation> -<translation id="6765711848403622008">Brak dostępnej wtyczki umożliwiającej wyświetlenie tej treści</translation> +<translation id="3934680773876859118">Nie można wczytać dokumentu PDF</translation> <translation id="8597182159515967513">nagłówek</translation> <translation id="2653659639078652383">Prześlij</translation> <translation id="8475551193147984329">Potrzebna jest wtyczka <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_pt-BR.xtb b/webkit/glue/resources/webkit_strings_pt-BR.xtb index 5233854..7de59fb 100644 --- a/webkit/glue/resources/webkit_strings_pt-BR.xtb +++ b/webkit/glue/resources/webkit_strings_pt-BR.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Falha ao instalar o plug-in de <ph name="URL"/></translation> <translation id="9186171386827445984">Carregando documento: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> páginas...</translation> <translation id="1235745349614807883">Limpar pesquisas recentes</translation> +<translation id="1171774979989969504">Insira um endereço de e-mail.</translation> +<translation id="709897737746224366">É preciso que o formato corresponda ao exigido.</translation> <translation id="5048533449481078685">marcador de lista</translation> <translation id="372362261556059955">Plug-in adicional necessário</translation> <translation id="4202807286478387388">pular</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Carregando...</translation> <translation id="6845533974506654842">pressione</translation> <translation id="8244226242650769279">mapa de imagens</translation> +<translation id="310520048233152454">Insira um URL.</translation> <translation id="2548326553472216322">Nenhuma pesquisa recente</translation> +<translation id="7263440858009898357">Selecione um item da lista.</translation> +<translation id="5164977714490026579">O valor deve ser maior ou igual a <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Nível alto)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Obter plug-in</translation> +<translation id="8451268428117625855">Selecione um arquivo.</translation> <translation id="5776402066334188252">Confirme se você deseja instalar este plug-in. Você deve instalar apenas plug-ins em que confia.</translation> -<translation id="4003986561708175844">O plug-in necessário não está instalado</translation> <translation id="3018094406922859308">Fazendo download do plug-in...</translation> <translation id="7364796246159120393">Escolher arquivo</translation> +<translation id="2761667185364618470">Marque esta caixa se deseja continuar.</translation> <translation id="8964020114565522021">Arraste o arquivo até aquil</translation> +<translation id="5129723458012748440">O plug-in <ph name="PLUGIN"/> não está instalado.</translation> <translation id="838869780401515933">marcar</translation> <translation id="2846343701378493991">1024 (Nível médio)</translation> <translation id="5476505524087279545">desmarcar</translation> <translation id="3789841737615482174">Instalar</translation> +<translation id="2507943997699731163">Preencha este campo.</translation> <translation id="5253117816378681419">Confirme se você deseja instalar o plug-in do <ph name="PLUGIN"/>. Você deve instalar apenas plug-ins em que você confia.</translation> <translation id="6663448176199120256">Pesquisas recentes</translation> +<translation id="7335060848622232389">A instalação de plug-ins foi desativada.</translation> <translation id="2597378329261239068">Este documento está protegido por senha. Digite a senha.</translation> +<translation id="5466621249238537318">Selecione um ou mais arquivos.</translation> +<translation id="8750798805984357768">Selecione uma das opções.</translation> <translation id="7740050170769002709">Conteúdo HTML</translation> +<translation id="2226276347425096477">Reduza este texto para <ph name="MAX_CHARACTERS"/> caracteres ou menos (você está usando <ph name="CURRENT_LENGTH"/> caracteres).</translation> +<translation id="1639239467298939599">Carregando</translation> +<translation id="2908441821576996758">Insira uma lista de endereços de e-mail separados por vírgula.</translation> <translation id="5939518447894949180">Redefinir</translation> +<translation id="835897206747267392">Valor inválido.</translation> +<translation id="3851140433852960970">Não há plug-ins disponíveis para exibir este conteúdo.</translation> <translation id="1842960171412779397">selecione</translation> +<translation id="3450233048674729344">O valor deve ser menor ou igual a <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">O plug-in exigido não está instalado.</translation> <translation id="7638452146404718955">Clique aqui para fazer download do plug-in</translation> <translation id="6119846243427417423">ativar</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> arquivos</translation> -<translation id="4470547978413275879">O plug-in do <ph name="PLUGIN"/> não está instalado</translation> -<translation id="6765711848403622008">Nenhum plug-in disponível para exibir este conteúdo</translation> +<translation id="3934680773876859118">Falha ao carregar o documento PDF</translation> <translation id="8597182159515967513">cabeçalho</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="8475551193147984329">Plug-in do <ph name="PLUGIN"/> necessário</translation> diff --git a/webkit/glue/resources/webkit_strings_pt-PT.xtb b/webkit/glue/resources/webkit_strings_pt-PT.xtb index a93bd4f..e5da548 100644 --- a/webkit/glue/resources/webkit_strings_pt-PT.xtb +++ b/webkit/glue/resources/webkit_strings_pt-PT.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Falha ao instalar o plug-in de <ph name="URL"/></translation> <translation id="9186171386827445984">A carregar o documento: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> páginas...</translation> <translation id="1235745349614807883">Limpar pesquisas recentes</translation> +<translation id="1171774979989969504">Introduza um endereço de e-mail.</translation> +<translation id="709897737746224366">Faça corresponder o formato pedido.</translation> <translation id="5048533449481078685">marcador de lista</translation> <translation id="372362261556059955">Plug-in adicional requerido</translation> <translation id="4202807286478387388">ir para</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">A carregar...</translation> <translation id="6845533974506654842">premir</translation> <translation id="8244226242650769279">mapa de imagem</translation> +<translation id="310520048233152454">Introduza um URL.</translation> <translation id="2548326553472216322">Nenhuma pesquisa recente</translation> +<translation id="7263440858009898357">Seleccione um item na lista.</translation> +<translation id="5164977714490026579">O valor tem de ser superior ou igual a <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Tamanho grande)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Obter plug-in</translation> +<translation id="8451268428117625855">Seleccione um ficheiro.</translation> <translation id="5776402066334188252">Confirme se pretende instalar este plug-in. Deve instalar apenas plug-ins fidedignos.</translation> -<translation id="4003986561708175844">O plug-in necessário não está instalado</translation> <translation id="3018094406922859308">A transferir plug-in...</translation> <translation id="7364796246159120393">Escolher ficheiro</translation> +<translation id="2761667185364618470">Seleccione esta caixa se pretender continuar.</translation> <translation id="8964020114565522021">Arraste o ficheiro para aqui</translation> +<translation id="5129723458012748440">O plug-in <ph name="PLUGIN"/> não está instalado.</translation> <translation id="838869780401515933">verificar</translation> <translation id="2846343701378493991">1024 (Tamanho médio)</translation> <translation id="5476505524087279545">desmarcar</translation> <translation id="3789841737615482174">Instalar</translation> +<translation id="2507943997699731163">Preencha este campo.</translation> <translation id="5253117816378681419">Confirme se pretende instalar o plug-in do <ph name="PLUGIN"/>. Deve instalar apenas plug-ins fidedignos.</translation> <translation id="6663448176199120256">Pesquisas recentes</translation> +<translation id="7335060848622232389">A instalação de plug-ins foi desativada.</translation> <translation id="2597378329261239068">Este documento está protegido por palavra-passe. Introduza uma palavra-passe.</translation> +<translation id="5466621249238537318">Seleccione um ou mais ficheiros.</translation> +<translation id="8750798805984357768">Seleccione uma destas opções.</translation> <translation id="7740050170769002709">Conteúdo HTML</translation> +<translation id="2226276347425096477">Encurte este texto para <ph name="MAX_CHARACTERS"/> caracteres ou menos (está actualmente a utilizar <ph name="CURRENT_LENGTH"/> caracteres).</translation> +<translation id="1639239467298939599">A carregar</translation> +<translation id="2908441821576996758">Introduza uma lista de endereços de e-mail separados por vírgula.</translation> <translation id="5939518447894949180">Repor</translation> +<translation id="835897206747267392">Valor inválido.</translation> +<translation id="3851140433852960970">Não está disponível nenhum plug-in para apresentar este conteúdo.</translation> <translation id="1842960171412779397">seleccionar</translation> +<translation id="3450233048674729344">O valor tem de ser inferior ou igual a <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">O plug-in necessário não está instalado.</translation> <translation id="7638452146404718955">Clique aqui para transferir o plug-in</translation> <translation id="6119846243427417423">activar</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ficheiros</translation> -<translation id="4470547978413275879">O plug-in do <ph name="PLUGIN"/> não está instalado</translation> -<translation id="6765711848403622008">Nenhum plug-in disponível para apresentar este conteúdo</translation> +<translation id="3934680773876859118">Falha ao carregar o documento em PDF</translation> <translation id="8597182159515967513">cabeçalho</translation> <translation id="2653659639078652383">Submeter</translation> <translation id="8475551193147984329">Plug-in do <ph name="PLUGIN"/> necessário</translation> diff --git a/webkit/glue/resources/webkit_strings_ro.xtb b/webkit/glue/resources/webkit_strings_ro.xtb index eeebfc3..5c630d9 100644 --- a/webkit/glue/resources/webkit_strings_ro.xtb +++ b/webkit/glue/resources/webkit_strings_ro.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Instalarea pluginului de la <ph name="URL"/> a eșuat</translation> <translation id="9186171386827445984">Se încarcă documentul: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> (de) pagini...</translation> <translation id="1235745349614807883">Ștergeți căutările recente</translation> +<translation id="1171774979989969504">Introduceţi o adresă de e-mail.</translation> +<translation id="709897737746224366">Potriviţi cu formatul solicitat.</translation> <translation id="5048533449481078685">marcator listă</translation> <translation id="372362261556059955">Este necesar un plugin suplimentar</translation> <translation id="4202807286478387388">Salt</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Se încarcă...</translation> <translation id="6845533974506654842">Apăsați</translation> <translation id="8244226242650769279">hartă cu imagini</translation> +<translation id="310520048233152454">Introduceţi o adresă URL.</translation> <translation id="2548326553472216322">Nicio căutare recentă</translation> +<translation id="7263440858009898357">Selectaţi un articol din listă.</translation> +<translation id="5164977714490026579">Valoarea trebuie să fie mai mare sau egală cu <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Grad înalt)</translation> <translation id="3040011195152428237">link</translation> <translation id="2745343197843472802">Descărcați pluginul</translation> +<translation id="8451268428117625855">Selectaţi un fişier.</translation> <translation id="5776402066334188252">Confirmați că doriți să instalați acest plugin. Vă recomandăm să instalați numai pluginuri în care aveți încredere.</translation> -<translation id="4003986561708175844">Pluginul necesar nu este instalat</translation> <translation id="3018094406922859308">Se descarcă pluginul...</translation> <translation id="7364796246159120393">Alegeți fișierul</translation> +<translation id="2761667185364618470">Bifaţi caseta dacă doriţi să continuaţi.</translation> <translation id="8964020114565522021">Trageți fișierul aici</translation> +<translation id="5129723458012748440">Pluginul <ph name="PLUGIN"/> nu este instalat.</translation> <translation id="838869780401515933">Bifați</translation> <translation id="2846343701378493991">1024 (Grad mediu)</translation> <translation id="5476505524087279545">Debifați</translation> <translation id="3789841737615482174">Instalați</translation> +<translation id="2507943997699731163">Completaţi acest câmp.</translation> <translation id="5253117816378681419">Confirmați că doriți să instalați pluginul <ph name="PLUGIN"/>. Vă recomandăm să instalați numai pluginuri în care aveți încredere.</translation> <translation id="6663448176199120256">Căutări recente</translation> +<translation id="7335060848622232389">Instalarea pluginurilor a fost dezactivată.</translation> <translation id="2597378329261239068">Acest document este protejat cu parolă. Introduceți o parolă.</translation> +<translation id="5466621249238537318">Selectaţi unul sau mai multe fişiere.</translation> +<translation id="8750798805984357768">Selectaţi una dintre aceste opţiuni.</translation> <translation id="7740050170769002709">Conținut HTML</translation> +<translation id="2226276347425096477">Micşoraţi acest text la cel mult <ph name="MAX_CHARACTERS"/> (de) caractere (în prezent utilizaţi <ph name="CURRENT_LENGTH"/> (de) caractere).</translation> +<translation id="1639239467298939599">Se încarcă</translation> +<translation id="2908441821576996758">Introduceţi o listă de adrese de e-mail separate prin virgulă.</translation> <translation id="5939518447894949180">Resetați</translation> +<translation id="835897206747267392">Valoare nevalidă.</translation> +<translation id="3851140433852960970">Niciun plugin disponibil pentru a afişa acest conținut.</translation> <translation id="1842960171412779397">Selectați</translation> +<translation id="3450233048674729344">Valoarea trebuie să fie mai mică sau egală cu <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Pluginul necesar nu este instalat.</translation> <translation id="7638452146404718955">Faceți clic aici pentru a descărca pluginul</translation> <translation id="6119846243427417423">Activați</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> fișiere</translation> -<translation id="4470547978413275879">Pluginul <ph name="PLUGIN"/> nu este instalat</translation> -<translation id="6765711848403622008">Niciun plugin disponibil pentru a afișa acest conținut</translation> +<translation id="3934680773876859118">Încărcarea documentului PDF nu a reuşit</translation> <translation id="8597182159515967513">titlu</translation> <translation id="2653659639078652383">Trimiteți</translation> <translation id="8475551193147984329">Este necesar pluginul <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_ru.xtb b/webkit/glue/resources/webkit_strings_ru.xtb index 5ea9049..f057f4d 100644 --- a/webkit/glue/resources/webkit_strings_ru.xtb +++ b/webkit/glue/resources/webkit_strings_ru.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Не удалось установить подключаемый модуль с адреса <ph name="URL"/></translation> <translation id="9186171386827445984">Загрузка документа: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> стр.</translation> <translation id="1235745349614807883">Очистить недавние поиски</translation> +<translation id="1171774979989969504">Введите адрес электронной почты.</translation> +<translation id="709897737746224366">Введите данные в указанном формате.</translation> <translation id="5048533449481078685">маркер списка</translation> <translation id="372362261556059955">Необходим дополнительный подключаемый модуль</translation> <translation id="4202807286478387388">перейти</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Загрузка...</translation> <translation id="6845533974506654842">нажать</translation> <translation id="8244226242650769279">графическая карта</translation> +<translation id="310520048233152454">Введите URL.</translation> <translation id="2548326553472216322">Нет недавних поисков</translation> +<translation id="7263440858009898357">Выберите один из пунктов списка.</translation> +<translation id="5164977714490026579">Значение должно быть больше или равно <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Крупный размер)</translation> <translation id="3040011195152428237">ссылка</translation> <translation id="2745343197843472802">Загрузить подключаемый модуль</translation> +<translation id="8451268428117625855">Выберите файл.</translation> <translation id="5776402066334188252">Подтвердите, что вы хотите установить этот подключаемый модуль. Вы доверяете ему?</translation> -<translation id="4003986561708175844">Не установлен необходимый подключаемый модуль</translation> <translation id="3018094406922859308">Загрузка подключаемого модуля...</translation> <translation id="7364796246159120393">Выберите файл</translation> +<translation id="2761667185364618470">Чтобы продолжить, установите этот флажок.</translation> <translation id="8964020114565522021">Перетащите файл сюда</translation> +<translation id="5129723458012748440">Подключаемый модуль <ph name="PLUGIN"/> не установлен.</translation> <translation id="838869780401515933">поставить галочку</translation> <translation id="2846343701378493991">1024 (Средний размер)</translation> <translation id="5476505524087279545">снять галочку</translation> <translation id="3789841737615482174">Установить</translation> +<translation id="2507943997699731163">Заполните это поле.</translation> <translation id="5253117816378681419">Подтвердите, что вы хотите установить подключаемый модуль <ph name="PLUGIN"/>. Вы доверяете ему?</translation> <translation id="6663448176199120256">Недавние поиски</translation> +<translation id="7335060848622232389">Установка подключаемых модулей запрещена.</translation> <translation id="2597378329261239068">Документ защищен паролем. Введите пароль.</translation> +<translation id="5466621249238537318">Выберите один или несколько файлов.</translation> +<translation id="8750798805984357768">Выберите один из вариантов.</translation> <translation id="7740050170769002709">HTML-содержание</translation> +<translation id="2226276347425096477">Длина текста не должна превышать <ph name="MAX_CHARACTERS"/> симв. (сейчас <ph name="CURRENT_LENGTH"/> симв.).</translation> +<translation id="1639239467298939599">Загрузка</translation> +<translation id="2908441821576996758">Введите адреса электронной почты через запятую.</translation> <translation id="5939518447894949180">Изменить</translation> +<translation id="835897206747267392">Недопустимые данные.</translation> +<translation id="3851140433852960970">Недоступен подключаемый модуль для отображения этого содержания.</translation> <translation id="1842960171412779397">выбрать</translation> +<translation id="3450233048674729344">Значение должно быть меньше или равно <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Не установлен необходимый подключаемый модуль.</translation> <translation id="7638452146404718955">Нажмите здесь, чтобы загрузить подключаемый модуль</translation> <translation id="6119846243427417423">активировать</translation> <translation id="8444882422881193423">Число файлов: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Подключаемый модуль <ph name="PLUGIN"/> не установлен</translation> -<translation id="6765711848403622008">Недоступен подключаемый модуль для отображения этого содержания</translation> +<translation id="3934680773876859118">Не удалось загрузить документ PDF</translation> <translation id="8597182159515967513">заголовок</translation> <translation id="2653659639078652383">Отправить</translation> <translation id="8475551193147984329">Необходим подключаемый модуль <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_sk.xtb b/webkit/glue/resources/webkit_strings_sk.xtb index a9b37ba..807a6e6 100644 --- a/webkit/glue/resources/webkit_strings_sk.xtb +++ b/webkit/glue/resources/webkit_strings_sk.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Inštalácia doplnku z adresy <ph name="URL"/> zlyhala</translation> <translation id="9186171386827445984">Prebieha načítavanie dokumentu: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> stránok...</translation> <translation id="1235745349614807883">Vyčistiť posledné vyhľadávania</translation> +<translation id="1171774979989969504">Zadajte e-mailovú adresu.</translation> +<translation id="709897737746224366">Zadajte hodnotu zodpovedajúcu požadovanému formátu.</translation> <translation id="5048533449481078685">ukazovateľ v zozname</translation> <translation id="372362261556059955">Vyžaduje sa ďalší doplnok</translation> <translation id="4202807286478387388">skok</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Načítava sa...</translation> <translation id="6845533974506654842">stlačiť</translation> <translation id="8244226242650769279">mapa obrázka</translation> +<translation id="310520048233152454">Zadajte adresu URL.</translation> <translation id="2548326553472216322">Žiadne posledné vyhľadávania</translation> +<translation id="7263440858009898357">Vyberte položku zo zoznamu.</translation> +<translation id="5164977714490026579">Hodnota musí byť väčšia alebo rovná hodnote <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (vysoký stupeň)</translation> <translation id="3040011195152428237">odkaz</translation> <translation id="2745343197843472802">Získať doplnok</translation> +<translation id="8451268428117625855">Vyberte súbor.</translation> <translation id="5776402066334188252">Potvrďte, že chcete nainštalovať tento doplnok. Mali by ste inštalovať len doplnky, ktorým dôverujete.</translation> -<translation id="4003986561708175844">Vyžadovaný doplnok nie je nainštalovaný</translation> <translation id="3018094406922859308">Prebieha preberanie doplnku...</translation> <translation id="7364796246159120393">Vybrať súbor</translation> +<translation id="2761667185364618470">Ak chcete pokračovať, začiarknite toto políčko.</translation> <translation id="8964020114565522021">Súbor presunúť sem</translation> +<translation id="5129723458012748440">Nie je nainštalovaný doplnok <ph name="PLUGIN"/>.</translation> <translation id="838869780401515933">označiť</translation> <translation id="2846343701378493991">1024 (stredný stupeň)</translation> <translation id="5476505524087279545">zrušiť označenie</translation> <translation id="3789841737615482174">Inštalovať</translation> +<translation id="2507943997699731163">Vyplňte toto pole.</translation> <translation id="5253117816378681419">Potvrďte, že chcete nainštalovať doplnok <ph name="PLUGIN"/>. Mali by ste inštalovať len doplnky, ktorým dôverujete.</translation> <translation id="6663448176199120256">Posledné vyhľadávania</translation> +<translation id="7335060848622232389">Inštalovanie doplnkov bolo zakázané.</translation> <translation id="2597378329261239068">Tento dokument je chránený heslom. Zadajte heslo.</translation> +<translation id="5466621249238537318">Vyberte jeden alebo viac súborov.</translation> +<translation id="8750798805984357768">Vyberte jednu z týchto možností.</translation> <translation id="7740050170769002709">Obsah HTML</translation> +<translation id="2226276347425096477">Tento text musíte skrátiť na <ph name="MAX_CHARACTERS"/> znakov alebo menej (súčasný počet znakov: <ph name="CURRENT_LENGTH"/>).</translation> +<translation id="1639239467298939599">Prebieha načítavanie</translation> +<translation id="2908441821576996758">Zadajte zoznam e-mailových adries oddelených čiarkou.</translation> <translation id="5939518447894949180">Vynulovať</translation> +<translation id="835897206747267392">Neplatná hodnota.</translation> +<translation id="3851140433852960970">Na zobrazenie tohto obsahu nie je k dispozícii žiadny doplnok.</translation> <translation id="1842960171412779397">vybrať</translation> +<translation id="3450233048674729344">Hodnota musí byť menšia alebo rovná hodnote <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Požadovaný doplnok nie je nainštalovaný.</translation> <translation id="7638452146404718955">Kliknutím sem prevezmete doplnok</translation> <translation id="6119846243427417423">aktivovať</translation> <translation id="8444882422881193423">Počet súborov: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Nie je nainštalovaný doplnok <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">Na zobrazenie tohto obsahu nie je k dispozícii žiadny doplnok</translation> +<translation id="3934680773876859118">Načítanie dokumentu PDF zlyhalo</translation> <translation id="8597182159515967513">nadpis</translation> <translation id="2653659639078652383">Odoslať</translation> <translation id="8475551193147984329">Vyžaduje sa doplnok <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_sl.xtb b/webkit/glue/resources/webkit_strings_sl.xtb index e3b1061..d982de5 100644 --- a/webkit/glue/resources/webkit_strings_sl.xtb +++ b/webkit/glue/resources/webkit_strings_sl.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Namestitev vtičnika z naslova <ph name="URL"/> ni bila uspešna</translation> <translation id="9186171386827445984">Nalaganje dokumenta: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> strani ...</translation> <translation id="1235745349614807883">Počisti zadnja iskanja</translation> +<translation id="1171774979989969504">Vnesite e-poštni naslov</translation> +<translation id="709897737746224366">Poskrbite za ujemanje z zahtevano obliko.</translation> <translation id="5048533449481078685">označevalnik seznama</translation> <translation id="372362261556059955">Potreben je dodaten vtičnik</translation> <translation id="4202807286478387388">skoči</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Nalagam ...</translation> <translation id="6845533974506654842">pritisni</translation> <translation id="8244226242650769279">slikovni zemljevid</translation> +<translation id="310520048233152454">Vnesite URL.</translation> <translation id="2548326553472216322">Ni zadnjih iskanj</translation> +<translation id="7263440858009898357">Izberite element s seznama.</translation> +<translation id="5164977714490026579">Vrednost mora biti večja od <ph name="MINIMUM"/> ali enaka.</translation> <translation id="5944544982112848342">2048 (visoka stopnja)</translation> <translation id="3040011195152428237">povezava</translation> <translation id="2745343197843472802">Prenesite vtičnik</translation> +<translation id="8451268428117625855">Izberite datoteko.</translation> <translation id="5776402066334188252">Potrdite, da želite namestiti ta vtičnik. Nameščajte le vtičnike, ki jim zaupate.</translation> -<translation id="4003986561708175844">Zahtevani vtičnik ni nameščen</translation> <translation id="3018094406922859308">Prenašanje vtičnika ...</translation> <translation id="7364796246159120393">Izberi datoteko</translation> +<translation id="2761667185364618470">Potrdite to polje, če želite nadaljevati.</translation> <translation id="8964020114565522021">Datoteko povleci sem</translation> +<translation id="5129723458012748440">Vtičnik <ph name="PLUGIN"/> ni nameščen.</translation> <translation id="838869780401515933">potrdi</translation> <translation id="2846343701378493991">1024 (srednja stopnja)</translation> <translation id="5476505524087279545">počisti izbor</translation> <translation id="3789841737615482174">Namesti</translation> +<translation id="2507943997699731163">Izpolnite to polje</translation> <translation id="5253117816378681419">Potrdite, da želite namestiti ta <ph name="PLUGIN"/> vtičnik. Nameščajte le vtičnike, ki jim zaupate.</translation> <translation id="6663448176199120256">Zadnja iskanja</translation> +<translation id="7335060848622232389">Namestitev vtičnikov je bila onemogočena.</translation> <translation id="2597378329261239068">Dokument je zaščiten z geslom. Vnesite geslo.</translation> +<translation id="5466621249238537318">Izberite eno ali več datotek.</translation> +<translation id="8750798805984357768">Izberite eno od teh možnosti.</translation> <translation id="7740050170769002709">Vsebina HTML</translation> +<translation id="2226276347425096477">Skrajšajte to besedilo na <ph name="MAX_CHARACTERS"/> znakov ali manj (trenutno uporabljate <ph name="CURRENT_LENGTH"/> znakov).</translation> +<translation id="1639239467298939599">Nalaganje</translation> +<translation id="2908441821576996758">Vnesite seznam e-poštnih naslovov, ločenih z vejicami</translation> <translation id="5939518447894949180">Ponastavi</translation> +<translation id="835897206747267392">Neveljavna vrednost.</translation> +<translation id="3851140433852960970">Vtičnika za prikaz te vsebine ni na voljo.</translation> <translation id="1842960171412779397">izberi</translation> +<translation id="3450233048674729344">Vrednost mora biti manjša od <ph name="MAXIMUM"/> ali enaka.</translation> +<translation id="9198010615634362518">Vtičnik, ki je potreben, ni nameščen.</translation> <translation id="7638452146404718955">Če želite prenesti vtičnik, kliknite tukaj</translation> <translation id="6119846243427417423">aktiviraj</translation> <translation id="8444882422881193423">Število datotek: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Vtičnik <ph name="PLUGIN"/> ni nameščen</translation> -<translation id="6765711848403622008">Za prikaz te vsebine ni na voljo noben vtičnik</translation> +<translation id="3934680773876859118">Dokumenta PDF ni bilo mogoče naložiti</translation> <translation id="8597182159515967513">naslov</translation> <translation id="2653659639078652383">Pošlji</translation> <translation id="8475551193147984329">Potreben je vtičnik <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_sr.xtb b/webkit/glue/resources/webkit_strings_sr.xtb index 3b32e4d..994d4e0 100644 --- a/webkit/glue/resources/webkit_strings_sr.xtb +++ b/webkit/glue/resources/webkit_strings_sr.xtb @@ -1,46 +1,63 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr"> -<translation id="4519964825805946997">Инсталирање додатка са адресе <ph name="URL"/> није успело</translation> +<translation id="4519964825805946997">Инсталирање додатне компоненте са <ph name="URL"/> није успело</translation> <translation id="9186171386827445984">Учитавање документа: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> странице(а)...</translation> <translation id="1235745349614807883">Обриши недавне претраге</translation> +<translation id="1171774979989969504">Унесите адресу е-поште.</translation> +<translation id="709897737746224366">Изаберите захтевани формат.</translation> <translation id="5048533449481078685">означивач листе</translation> -<translation id="372362261556059955">Потребан је још један додатак</translation> +<translation id="372362261556059955">Потребна је још једна додатна компонента</translation> <translation id="4202807286478387388">прескочи</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> <translation id="7658239707568436148">Откажи</translation> <translation id="795667975304826397">Није одабрано</translation> -<translation id="1416462845279468967">Инсталација додатка није успела</translation> +<translation id="1416462845279468967">Инсталација додатне компоненте није успела</translation> <translation id="8141602879876242471">Ово је индекс који може да се претражује. Унесите кључне речи за претрагу:</translation> -<translation id="5650795167354946011">Након инсталирања додатка, кликните овде да бисте освежили</translation> +<translation id="5650795167354946011">Након инсталирања додатне компоненте, кликните овде да бисте освежили</translation> <translation id="370665806235115550">Учитавање...</translation> <translation id="6845533974506654842">притисни</translation> <translation id="8244226242650769279">мапа слике</translation> +<translation id="310520048233152454">Унесите URL адресу.</translation> <translation id="2548326553472216322">Нема недавних претрага</translation> +<translation id="7263440858009898357">Изаберите ставку са листе.</translation> +<translation id="5164977714490026579">Вредност сме да буде најмање <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (високи степен)</translation> <translation id="3040011195152428237">веза</translation> -<translation id="2745343197843472802">Преузми додатак</translation> -<translation id="5776402066334188252">Потврдите да желите да инсталирате овај додатак. Инсталирајте само додатке у које имате поверења.</translation> -<translation id="4003986561708175844">Потребан додатак није инсталиран</translation> -<translation id="3018094406922859308">Преузимање додатка...</translation> +<translation id="2745343197843472802">Преузми додатну компоненту</translation> +<translation id="8451268428117625855">Изаберите датотеку.</translation> +<translation id="5776402066334188252">Потврдите да желите да инсталирате ову додатну компоненту. Инсталирајте само додатне компоненте у које имате поверења.</translation> +<translation id="3018094406922859308">Преузимање додатних компоненти...</translation> <translation id="7364796246159120393">Одабери датотеку</translation> +<translation id="2761667185364618470">Потврдите избор у овом пољу за потврду уколико желите да наставите.</translation> <translation id="8964020114565522021">Превуците датотеку овде</translation> +<translation id="5129723458012748440">Додатак <ph name="PLUGIN"/> није инсталиран.</translation> <translation id="838869780401515933">изабери</translation> <translation id="2846343701378493991">1024 (средњи степен)</translation> <translation id="5476505524087279545">опозови избор</translation> <translation id="3789841737615482174">Инсталирај</translation> -<translation id="5253117816378681419">Потврдите да желите да инсталирате <ph name="PLUGIN"/> додатак. Инсталирајте само додатке у које имате поверења.</translation> +<translation id="2507943997699731163">Попуните ово поље.</translation> +<translation id="5253117816378681419">Потврдите да желите да инсталирате <ph name="PLUGIN"/> додатну компоненту. Инсталирајте само додатне компоненте у које имате поверења.</translation> <translation id="6663448176199120256">Недавне претраге</translation> +<translation id="7335060848622232389">Инсталација додатних компоненти је онемогућена.</translation> <translation id="2597378329261239068">Овај документ је заштићен лозинком. Унесите лозинку.</translation> +<translation id="5466621249238537318">Изаберите једну или више датотека.</translation> +<translation id="8750798805984357768">Изаберите неку од ових опција.</translation> <translation id="7740050170769002709">HTML садржај</translation> +<translation id="2226276347425096477">Скратите овај текст на <ph name="MAX_CHARACTERS"/> знак(ов)а или мање (тренутно користите <ph name="CURRENT_LENGTH"/> знак(ов)а).</translation> +<translation id="1639239467298939599">Учитавање</translation> +<translation id="2908441821576996758">Унесите листу адреса е-поште раздвојених зарезима.</translation> <translation id="5939518447894949180">Ресетуј</translation> +<translation id="835897206747267392">Неважећа вредност.</translation> +<translation id="3851140433852960970">Нема доступног додатка за приказивање овог садржаја.</translation> <translation id="1842960171412779397">изабери</translation> -<translation id="7638452146404718955">Кликните овде да бисте преузели додатак</translation> +<translation id="3450233048674729344">Вредност сме да буде највише <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Потребнa додатна компонента није инсталирана.</translation> +<translation id="7638452146404718955">Кликните овде да бисте преузели додатну компоненту</translation> <translation id="6119846243427417423">активирај</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> датотеке(а)</translation> -<translation id="4470547978413275879">Додатак <ph name="PLUGIN"/> није инсталиран</translation> -<translation id="6765711848403622008">Ниједан додатак није доступан за приказивање овог садржаја</translation> +<translation id="3934680773876859118">Учитавање PDF документа није успело</translation> <translation id="8597182159515967513">наслов</translation> <translation id="2653659639078652383">Пошаљи</translation> -<translation id="8475551193147984329">Потребан је <ph name="PLUGIN"/> додатак</translation> +<translation id="8475551193147984329">Потребна је <ph name="PLUGIN"/> додатна компонента</translation> </translationbundle>
\ No newline at end of file diff --git a/webkit/glue/resources/webkit_strings_sv.xtb b/webkit/glue/resources/webkit_strings_sv.xtb index 7cbe67d..d2959bc 100644 --- a/webkit/glue/resources/webkit_strings_sv.xtb +++ b/webkit/glue/resources/webkit_strings_sv.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Det gick inte att installera plugin-program från <ph name="URL"/></translation> <translation id="9186171386827445984">Läser in dokument: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> sidor...</translation> <translation id="1235745349614807883">Rensa senaste sökningar</translation> +<translation id="1171774979989969504">Ange en e-postadress.</translation> +<translation id="709897737746224366">Matcha det format som anges.</translation> <translation id="5048533449481078685">listmarkör</translation> <translation id="372362261556059955">Ett ytterligare plugin-program krävs</translation> <translation id="4202807286478387388">fortsätta</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Laddar...</translation> <translation id="6845533974506654842">tryck</translation> <translation id="8244226242650769279">bildkarta</translation> +<translation id="310520048233152454">Ange en webbadress.</translation> <translation id="2548326553472216322">Inga nya sökningar</translation> +<translation id="7263440858009898357">Välj ett alternativ i listan.</translation> +<translation id="5164977714490026579">Värdet måste vara större än eller lika med <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (hög)</translation> <translation id="3040011195152428237">länk</translation> <translation id="2745343197843472802">Hämta plugin-program</translation> +<translation id="8451268428117625855">Välj en fil.</translation> <translation id="5776402066334188252">Bekräfta att du vill installera detta plugin-program. Installera bara plugin-program från tillförlitliga källor.</translation> -<translation id="4003986561708175844">Det begärda plugin-programmet har inte installerats</translation> <translation id="3018094406922859308">Hämtar plugin-programmet...</translation> <translation id="7364796246159120393">Välj fil</translation> +<translation id="2761667185364618470">Markera den här kryssrutan om du vill fortsätta.</translation> <translation id="8964020114565522021">Dra filen hit</translation> +<translation id="5129723458012748440">Plugin-programmet <ph name="PLUGIN"/> är inte installerat.</translation> <translation id="838869780401515933">kryssa för</translation> <translation id="2846343701378493991">1024 (medel)</translation> <translation id="5476505524087279545">kryssa av</translation> <translation id="3789841737615482174">Installera</translation> +<translation id="2507943997699731163">Fyll i det här fältet.</translation> <translation id="5253117816378681419">Bekräfta att du vill installera plugin-programmet <ph name="PLUGIN"/>. Installera bara plugin-program från tillförlitliga källor.</translation> <translation id="6663448176199120256">Senaste sökningar</translation> +<translation id="7335060848622232389">Installationen av plugin-program har inaktiverats.</translation> <translation id="2597378329261239068">Dokumentet är lösenordsskyddat. Ange ett lösenord.</translation> +<translation id="5466621249238537318">Välj en eller flera filer.</translation> +<translation id="8750798805984357768">Välj ett av följande alternativ.</translation> <translation id="7740050170769002709">HTML-innehåll</translation> +<translation id="2226276347425096477">Förkorta texten till <ph name="MAX_CHARACTERS"/> tecken eller mindre (nu är texten <ph name="CURRENT_LENGTH"/> tecken).</translation> +<translation id="1639239467298939599">Läser in</translation> +<translation id="2908441821576996758">Ange en kommaavgränsad lista med e-postadresser.</translation> <translation id="5939518447894949180">Återställ</translation> +<translation id="835897206747267392">Ogiltigt värde.</translation> +<translation id="3851140433852960970">Det finns inget plugin-program för att visa det här innehållet</translation> <translation id="1842960171412779397">välj</translation> +<translation id="3450233048674729344">Värdet måste vara mindre än eller lika med <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Det plugin-program som krävs är inte installerat.</translation> <translation id="7638452146404718955">Klicka här för att hämta plugin-programmet</translation> <translation id="6119846243427417423">aktivera</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> filer</translation> -<translation id="4470547978413275879">Plugin-programmet <ph name="PLUGIN"/> har inte installerats</translation> -<translation id="6765711848403622008">Det finns inget plugin-program för att visa det här innehållet</translation> +<translation id="3934680773876859118">Det gick inte att läsa in PDF-dokumentet</translation> <translation id="8597182159515967513">rubrik</translation> <translation id="2653659639078652383">Skicka</translation> <translation id="8475551193147984329">Plugin-programmet <ph name="PLUGIN"/> krävs</translation> diff --git a/webkit/glue/resources/webkit_strings_ta.xtb b/webkit/glue/resources/webkit_strings_ta.xtb index f8dbf00..476045d 100644 --- a/webkit/glue/resources/webkit_strings_ta.xtb +++ b/webkit/glue/resources/webkit_strings_ta.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> இலிருந்து செருகுநிரலை நிறுவுதல் தோல்வியடைந்தது</translation> <translation id="9186171386827445984">ஆவணத்தை ஏற்றுகிறது: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> பக்கங்கள்...</translation> <translation id="1235745349614807883">சமீபத்திய தேடல்களை சுத்தமாக்கு</translation> +<translation id="1171774979989969504">ஒரு மின்னஞ்சல் முகவரியை உள்ளிடவும்.</translation> +<translation id="709897737746224366">கோரிய வடிவமைப்பில் தருக.</translation> <translation id="5048533449481078685">பட்டியல் குறிப்பான்</translation> <translation id="372362261556059955">கூடுதல் செருகுநிரல் தேவைப்படுகிறது</translation> <translation id="4202807286478387388">தாவு</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">நினைவேறுகிறது...</translation> <translation id="6845533974506654842">அழுத்துக</translation> <translation id="8244226242650769279">பட மேப்</translation> +<translation id="310520048233152454">URL ஐ உள்ளிடுக.</translation> <translation id="2548326553472216322">சமீபத்திய தேடல்கள் எதுவுமில்லை</translation> +<translation id="7263440858009898357">பட்டியலிலிருந்து ஒரு உருப்படியைத் தேர்ந்தெடுங்கள்.</translation> +<translation id="5164977714490026579">மதிப்பானது, கண்டிப்பாக <ph name="MINIMUM"/> ஐ விட அதிகமாக அல்லது அதற்குச் சமமாக இருக்க வேண்டும்.</translation> <translation id="5944544982112848342">2048 (உயர் தரம்)</translation> <translation id="3040011195152428237">இணைப்பு</translation> <translation id="2745343197843472802">செருகுநிரலைப் பெறு</translation> +<translation id="8451268428117625855">ஒரு கோப்பை தேர்ந்தெடுக்கவும்.</translation> <translation id="5776402066334188252">இந்த செருகுநிரலை நீங்கள் நிறுவ விரும்புகிறீர்கள் என்பதை தயவுசெய்து உறுதிசெய்க. நீங்கள் நம்பும் செருகுநிரல்களை மட்டும் நீங்கள் நிறுவ வேண்டும்.</translation> -<translation id="4003986561708175844">தேவையான செருகுநிரல் நிறுவப்படவில்லை</translation> <translation id="3018094406922859308">செருகுநிரலைப் பதிவிறக்குகிறது...</translation> <translation id="7364796246159120393">கோப்பைத் தேர்வு செய்க</translation> +<translation id="2761667185364618470">தொடர விரும்பினால், இந்தப் பெட்டியைத் தேர்ந்தெடுங்கள்.</translation> <translation id="8964020114565522021">கோப்பை இங்கே இழுத்து வருக</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> செருகுநிரல் நிறுவப்படவில்லை.</translation> <translation id="838869780401515933">சரிபார்</translation> <translation id="2846343701378493991">1024 (இடைநிலைத் தரம்)</translation> <translation id="5476505524087279545">தேர்வு நீக்கு</translation> <translation id="3789841737615482174">நிறுவு</translation> +<translation id="2507943997699731163">இந்தப் புலத்தை நிரப்புக.</translation> <translation id="5253117816378681419"><ph name="PLUGIN"/> செருகுநிரலை நிறுவ நீங்கள் விரும்புகிறீர்கள் என்பதை தயவுசெய்து உறுதிசெய்க. நீங்கள் நம்பும் செருகுநிரல்களை மட்டும் நிறுவ வேண்டும்.</translation> <translation id="6663448176199120256">சமீபத்திய தேடல்கள்</translation> +<translation id="7335060848622232389">செருகுநிரல்களை நிறுவுதல் முடக்கப்பட்டது.</translation> <translation id="2597378329261239068">இந்த ஆவணம் கடவுச்சொல் பாதுகாக்கப்பட்ட ஒன்று. தயவுசெய்து ஒரு கடவுச்சொல்லை உள்ளிடுக.</translation> +<translation id="5466621249238537318">ஒன்று அல்லது அதற்குமேற்பட்ட கோப்புகளைத் தேர்ந்தெடுங்கள்.</translation> +<translation id="8750798805984357768">தயவுசெய்து இந்த விருப்பங்களில் ஒன்றைத் தேர்ந்தெடுங்கள்.</translation> <translation id="7740050170769002709">HTML உள்ளடக்கம்</translation> +<translation id="2226276347425096477">இந்த உரையை <ph name="MAX_CHARACTERS"/> எழுத்துக்குறிகள் அல்லது அதற்கும் குறைவாக சுருக்கிடுங்கள் (நீங்கள் தற்போது <ph name="CURRENT_LENGTH"/> எழுத்துக்குறிகளைப் பயன்படுத்துகிறீர்கள்).</translation> +<translation id="1639239467298939599">ஏற்றுகிறது</translation> +<translation id="2908441821576996758">காற்புள்ளியால் பிரிக்கப்பட்ட மின்னஞ்சல் முகவரிகளின் பட்டியலை உள்ளிடுக.</translation> <translation id="5939518447894949180">மீட்டமை</translation> +<translation id="835897206747267392">செல்லாத மதிப்பு.</translation> +<translation id="3851140433852960970">இந்த உள்ளடக்கத்தைக் காண்பிப்பதற்கான செருகுநிரல் கிடைக்கவில்லை.</translation> <translation id="1842960171412779397">தேர்ந்தெடு</translation> +<translation id="3450233048674729344">மதிப்பானது கண்டிப்பாக <ph name="MAXIMUM"/> ஐ விடக்குறைவாக அல்லது அதற்குச் சமமாக இருக்க வேண்டும்.</translation> +<translation id="9198010615634362518">தேவையான செருகுநிரல் நிறுவப்படவில்லை.</translation> <translation id="7638452146404718955">செருகுநிரலைப் பதிவிறக்க இங்கே கிளிக் செய்க</translation> <translation id="6119846243427417423">செயல்படுத்து</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> கோப்புகள்</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> செருகுநிரல் நிறுவப்படவில்லை</translation> -<translation id="6765711848403622008">இந்த உள்ளடக்கத்தைக் காண்பிப்பதற்கான செருகுநிரல் கிடைக்கவில்லை</translation> +<translation id="3934680773876859118">PDF ஆவணத்தை ஏற்றுவது தோல்வியடைந்தது</translation> <translation id="8597182159515967513">தலைப்பு</translation> <translation id="2653659639078652383">சமர்ப்பி</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> செருகுநிரல் தேவை</translation> diff --git a/webkit/glue/resources/webkit_strings_te.xtb b/webkit/glue/resources/webkit_strings_te.xtb index a1f9fd6..31f6733 100644 --- a/webkit/glue/resources/webkit_strings_te.xtb +++ b/webkit/glue/resources/webkit_strings_te.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997"><ph name="URL"/> నుండి ప్లగ్-ఇన్ను వ్యవస్థాపించడానికి విఫలమైంది</translation> <translation id="9186171386827445984">పత్రాన్ని లోడ్ చేస్తోంది: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> పేజీలు...</translation> <translation id="1235745349614807883">ఇటీవల శోధనలను క్లియర్ చెయ్యి</translation> +<translation id="1171774979989969504">దయచేసి ఇమెయిల్ చిరునామాను ఎంటర్ చెయ్యండి.</translation> +<translation id="709897737746224366">దయచేసి అభ్యర్థించిన ఆకృతీకరణను సరిపోల్చండి.</translation> <translation id="5048533449481078685">జాబితా మార్కర్</translation> <translation id="372362261556059955">అదనపు ప్లగ్-ఇన్ అవసరం</translation> <translation id="4202807286478387388">వెళ్ళు</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">లోడ్ అవుతోంది...</translation> <translation id="6845533974506654842">నొక్కండి</translation> <translation id="8244226242650769279">చిత్రం మాప్</translation> +<translation id="310520048233152454">దయచేసి ఒక URLని ఎంటర్ చెయ్యండి.</translation> <translation id="2548326553472216322">ఇటీవల శోధనలు లేవు</translation> +<translation id="7263440858009898357">దయచేసి జాబితాలోని ఒక అంశాన్ని ఎంచుకోండి.</translation> +<translation id="5164977714490026579">విలువ ఖచ్చితంగా <ph name="MINIMUM"/> కంటే ఎక్కువగా లేదా సమానంగా ఉండాలి.</translation> <translation id="5944544982112848342">2048 (ఉత్తమ గ్రేడ్)</translation> <translation id="3040011195152428237">లింక్</translation> <translation id="2745343197843472802">ప్లగ్-ఇన్ను పొందండి</translation> +<translation id="8451268428117625855">దయచేసి ఒక ఫైల్ని ఎంచుకోండి.</translation> <translation id="5776402066334188252">దయచేసి మీరు ఈ ప్లగ్-ఇన్ను వ్యవస్థాపించాలని అనుకుంటున్నట్లు నిర్ధారించండి. మీరు నమ్మేటటువంటి ప్లగ్-ఇన్లను మాత్రమే మీరు వ్యవస్థాపించాలి.</translation> -<translation id="4003986561708175844">అవసరమైన ప్లగ్-ఇన్ వ్యవస్థాపించబడలేదు</translation> <translation id="3018094406922859308">ప్లగ్-ఇన్ను డౌన్లోడ్ చేస్తోంది...</translation> <translation id="7364796246159120393">ఫైల్ను ఎంచుకోండి</translation> +<translation id="2761667185364618470">దయచేసి మీరు కొనసాగాలనుకుంటే ఈ బాక్స్కి టిక్కు పెట్టండి.</translation> <translation id="8964020114565522021">ఫైల్ను ఇక్కడకు లాగండి</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> ప్లగ్-ఇన్ వ్యవస్థాపించబడలేదు.</translation> <translation id="838869780401515933">తనిఖీ చెయ్యి</translation> <translation id="2846343701378493991">1024 (మధ్యస్థ గ్రేడ్)</translation> <translation id="5476505524087279545">ఎంపిక చెయ్యబడలేదు</translation> <translation id="3789841737615482174">ఇన్స్టాల్ చెయ్యి</translation> +<translation id="2507943997699731163">దయచేసి ఈ ఫీల్డ్ని పూర్తి చెయ్యండి.</translation> <translation id="5253117816378681419">దయచేసి మీరు <ph name="PLUGIN"/> ప్లగ్-ఇన్ను వ్యవస్థాపించాలనుకుంటున్నారని నిర్థారించండి. మీరు విశ్వసించే ప్లగ్-ఇన్లను మాత్రమే వ్యవస్థాపించాలి.</translation> <translation id="6663448176199120256">ఇటీవల శోధనలు</translation> +<translation id="7335060848622232389">వ్యవస్థాపించబడిన ప్లగ్-ఇన్లు నిలిపివెయ్యబడ్డాయి.</translation> <translation id="2597378329261239068">ఈ పత్రం అనుమతి పదంచే రక్షించబడింది. దయచేసి అనుమతి పదాన్ని నమోదు చేయండి.</translation> +<translation id="5466621249238537318">దయచేసి ఒకటి లేదా మరిన్ని ఫైళ్ళను ఎంచుకోండి.</translation> +<translation id="8750798805984357768">దయచేసి ఈ ఎంపికలలో ఒకదాన్ని ఎంచుకోండి.</translation> <translation id="7740050170769002709">HTML కంటెంట్</translation> +<translation id="2226276347425096477">దయచేసి ఈ వచనాన్ని <ph name="MAX_CHARACTERS"/> అక్షరాలకు లేదా అంతకంటే తక్కువ (మీరు ప్రస్తుతం <ph name="CURRENT_LENGTH"/> అక్షరాలను ఉపయోగిస్తున్నారు)కు తగ్గించండి.</translation> +<translation id="1639239467298939599">లోడ్ అవుతోంది</translation> +<translation id="2908441821576996758">దయచేసి కామాతో వేరు చేసిన ఇమెయిల్ చిరునామాల జాబితాను ఎంటర్ చెయ్యండి.</translation> <translation id="5939518447894949180">తిరిగి అమర్చండి</translation> +<translation id="835897206747267392">చెల్లని విలువ.</translation> +<translation id="3851140433852960970">ఈ కంటెంట్ను ప్రదర్శించడానికి ఏ ప్లగ్-ఇన్ అందుబాటులో లేదు.</translation> <translation id="1842960171412779397">ఎంచుకోండి</translation> +<translation id="3450233048674729344">విలువ ఖచ్చితంగా <ph name="MAXIMUM"/> కంటే తగ్గువగా లేదా సమానంగా ఉండాలి.</translation> +<translation id="9198010615634362518">అవసరమైన ప్లగ్-ఇన్ వ్యవస్థాపించబడలేదు.</translation> <translation id="7638452146404718955">ప్లగ్-ఇన్ను డౌన్లోడ్ చేయడానికి ఇక్కడ క్లిక్ చేయండి</translation> <translation id="6119846243427417423">ఆక్టివేట్ చెయ్యి</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ఫైళ్ళు</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> ప్లగ్-ఇన్ వ్యవస్థాపించబడలేదు</translation> -<translation id="6765711848403622008">ఈ కంటెంట్ను ప్రదర్శించడానికి ఏ ప్లగ్-ఇన్ అందుబాటులో లేదు</translation> +<translation id="3934680773876859118">PDF పత్రాన్ని లోడ్ చెయ్యడానికి విఫలమైంది</translation> <translation id="8597182159515967513">శీర్షిక</translation> <translation id="2653659639078652383">సమర్పించు</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> ప్లగ్-ఇన్ అవసరం</translation> diff --git a/webkit/glue/resources/webkit_strings_th.xtb b/webkit/glue/resources/webkit_strings_th.xtb index a6ffcc6..4fda865 100644 --- a/webkit/glue/resources/webkit_strings_th.xtb +++ b/webkit/glue/resources/webkit_strings_th.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">การติดตั้งปลั๊กอินจาก <ph name="URL"/> ล้มเหลว</translation> <translation id="9186171386827445984">กำลังโหลดเอกสาร: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> หน้า...</translation> <translation id="1235745349614807883">ลบการค้นหาล่าสุด</translation> +<translation id="1171774979989969504">โปรดป้อนที่อยู่อีเมล</translation> +<translation id="709897737746224366">โปรดจับคู่รูปแบบที่ร้องขอ</translation> <translation id="5048533449481078685">ผู้สร้างรายการ</translation> <translation id="372362261556059955">ต้องการปลั๊กอินเพิ่มเติม</translation> <translation id="4202807286478387388">ข้าม</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">กำลังโหลด...</translation> <translation id="6845533974506654842">กด</translation> <translation id="8244226242650769279">แผนที่รูปภาพ</translation> +<translation id="310520048233152454">โปรดป้อน URL</translation> <translation id="2548326553472216322">ไม่พบการค้นหาล่าสุด</translation> +<translation id="7263440858009898357">โปรดเลือกรายการจากหน้ารายการ</translation> +<translation id="5164977714490026579">ค่าต้องมากกว่าหรือเท่ากับ <ph name="MINIMUM"/></translation> <translation id="5944544982112848342">2048 (เกรดสูง)</translation> <translation id="3040011195152428237">ลิงก์</translation> <translation id="2745343197843472802">รับปลั๊กอิน</translation> +<translation id="8451268428117625855">โปรดเลือกไฟล์</translation> <translation id="5776402066334188252">โปรดยืนยันว่าคุณต้องการติดตั้งปลั๊กอินนี้ คุณควรติดตั้งเฉพาะปลั๊กอินที่คุณไว้ใจเท่านั้น </translation> -<translation id="4003986561708175844">ไม่ได้ติดตั้งปลั๊กอินที่จำเป็น</translation> <translation id="3018094406922859308">กำลังดาวน์โหลดปลั๊กอิน...</translation> <translation id="7364796246159120393">เลือกไฟล์</translation> +<translation id="2761667185364618470">โปรดเลือกช่องนี้หากคุณต้องการดำเนินการต่อ</translation> <translation id="8964020114565522021">ลากไฟล์มาที่นี่</translation> +<translation id="5129723458012748440">ไม่ได้ติดตั้งปลั๊กอิน <ph name="PLUGIN"/></translation> <translation id="838869780401515933">ทำเครื่องหมาย</translation> <translation id="2846343701378493991">1024 (เกรดปานกลาง)</translation> <translation id="5476505524087279545">ยกเลิกการทำเครื่องหมาย</translation> <translation id="3789841737615482174">ติดตั้ง</translation> +<translation id="2507943997699731163">โปรดกรอกฟิลด์นี้</translation> <translation id="5253117816378681419">โปรดยืนยันว่าคุณต้องการติดตั้งปลั๊กอิน <ph name="PLUGIN"/> คุณควรติดตั้งเฉพาะปลั๊กอินที่คุณไว้ใจเท่านั้น</translation> <translation id="6663448176199120256">การค้นหาล่าสุด</translation> +<translation id="7335060848622232389">การติดตั้งปลั๊กอินถูกปิดใช้งาน</translation> <translation id="2597378329261239068">เอกสารนี้ได้รับการป้องกันด้วยรหัสผ่าน โปรดป้อนรหัสผ่าน</translation> +<translation id="5466621249238537318">โปรดเลือกอย่างน้อยหนึ่งไฟล์</translation> +<translation id="8750798805984357768">โปรดเลือกตัวเลือกอย่างหนึ่งอย่างใดเหล่านี้</translation> <translation id="7740050170769002709">เนื้อหา HTML</translation> +<translation id="2226276347425096477">โปรดย่อข้อความนี้ให้เหลือไม่เกิน <ph name="MAX_CHARACTERS"/> อักขระ (ขณะนี้ข้อความของคุณมี <ph name="CURRENT_LENGTH"/> อักขระ)</translation> +<translation id="1639239467298939599">กำลังโหลด</translation> +<translation id="2908441821576996758">โปรดป้อนรายการที่อยู่อีเมลโดยคั่นด้วยเครื่องหมายจุลภาค</translation> <translation id="5939518447894949180">ตั้งค่าใหม่</translation> +<translation id="835897206747267392">ค่าไม่ถูกต้อง</translation> +<translation id="3851140433852960970">ไม่มีปลั๊กอินที่จะแสดงเนื้อหานี้</translation> <translation id="1842960171412779397">เลือก</translation> +<translation id="3450233048674729344">ค่าต้องน้อยกว่าหรือเท่ากับ <ph name="MAXIMUM"/></translation> +<translation id="9198010615634362518">ไม่ได้ติดตั้งปลั๊กอินที่จำเป็น</translation> <translation id="7638452146404718955">คลิกที่นี่เพื่อดาวน์โหลดปลั๊กอิน</translation> <translation id="6119846243427417423">เปิดใช้งาน</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> ไฟล์</translation> -<translation id="4470547978413275879">ไม่ได้ติดตั้งปลั๊กอิน <ph name="PLUGIN"/></translation> -<translation id="6765711848403622008">ไม่มีปลั๊กอินที่จะแสดงเนื้อหานี้</translation> +<translation id="3934680773876859118">โหลดเอกสาร PDF ล้มเหลว</translation> <translation id="8597182159515967513">ส่วนหัว</translation> <translation id="2653659639078652383">ส่ง</translation> <translation id="8475551193147984329">ต้องการปลั๊กอิน <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_tr.xtb b/webkit/glue/resources/webkit_strings_tr.xtb index 5a24891..8b0a400 100644 --- a/webkit/glue/resources/webkit_strings_tr.xtb +++ b/webkit/glue/resources/webkit_strings_tr.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Eklenti, <ph name="URL"/> kaynağından yüklenemedi</translation> <translation id="9186171386827445984">Belge yükleniyor: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> sayfa...</translation> <translation id="1235745349614807883">Son Aramaları Temizle</translation> +<translation id="1171774979989969504">Lütfen e-posta adresi girin.</translation> +<translation id="709897737746224366">Lütfen istenen biçimi eşleştirin.</translation> <translation id="5048533449481078685">liste işaretçisi</translation> <translation id="372362261556059955">Başka eklenti gerekiyor</translation> <translation id="4202807286478387388">git</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Yükleniyor...</translation> <translation id="6845533974506654842">bas</translation> <translation id="8244226242650769279">resim haritası</translation> +<translation id="310520048233152454">Lütfen bir URL girin.</translation> <translation id="2548326553472216322">Yeni arama yok</translation> +<translation id="7263440858009898357">Lütfen listeden bir öğe seçin.</translation> +<translation id="5164977714490026579">Değer <ph name="MINIMUM"/> veya daha büyük olmalıdır.</translation> <translation id="5944544982112848342">2048 (Yüksek Düzey)</translation> <translation id="3040011195152428237">bağlantı</translation> <translation id="2745343197843472802">Eklentiyi edinin</translation> +<translation id="8451268428117625855">Lütfen bir dosya seçin.</translation> <translation id="5776402066334188252">Lütfen bu eklentiyi yüklemek istediğinizi onaylayın. Yalnızca güvendiğiniz eklentileri yüklemelisiniz.</translation> -<translation id="4003986561708175844">Gereken eklenti yüklü değil</translation> <translation id="3018094406922859308">Eklenti indiriliyor...</translation> <translation id="7364796246159120393">Dosya Seç</translation> +<translation id="2761667185364618470">İlerlemek istiyorsanız lütfen bu kutuyu işaretleyin.</translation> <translation id="8964020114565522021">Dosyayı buraya sürükleyin</translation> +<translation id="5129723458012748440"><ph name="PLUGIN"/> eklentisi yüklü değil.</translation> <translation id="838869780401515933">işaretle</translation> <translation id="2846343701378493991">1024 (Orta Düzey)</translation> <translation id="5476505524087279545">işareti kaldır</translation> <translation id="3789841737615482174">Yükle</translation> +<translation id="2507943997699731163">Lütfen bu alanı doldurun.</translation> <translation id="5253117816378681419">Lütfen <ph name="PLUGIN"/> eklentisini yüklemek istediğinizi onaylayın. Yalnızca güvendiğiniz eklentileri yüklemelisiniz.</translation> <translation id="6663448176199120256">Son Aramalar</translation> +<translation id="7335060848622232389">Eklenti yükleme devre dışı bırakıldı.</translation> <translation id="2597378329261239068">Doküman şifre korumalı. Lütfen şifreyi girin.</translation> +<translation id="5466621249238537318">Lütfen bir veya daha fazla dosya seçin.</translation> +<translation id="8750798805984357768">Lütfen bu seçeneklerden birini belirleyin.</translation> <translation id="7740050170769002709">HTML içeriği</translation> +<translation id="2226276347425096477">Lütfen bu metni <ph name="MAX_CHARACTERS"/> veya daha az karakter olacak şekilde kısaltın (şu anda <ph name="CURRENT_LENGTH"/> karakter kullanıyorsunuz).</translation> +<translation id="1639239467298939599">Yükleniyor</translation> +<translation id="2908441821576996758">Lütfen e-posta adreslerinin virgülle ayrılmış listesini girin.</translation> <translation id="5939518447894949180">Sıfırla</translation> +<translation id="835897206747267392">Geçersiz değer.</translation> +<translation id="3851140433852960970">Bu içeriği görüntüleyecek hiçbir eklenti yok.</translation> <translation id="1842960171412779397">seç</translation> +<translation id="3450233048674729344">Değer <ph name="MAXIMUM"/> veya daha küçük olmalıdır.</translation> +<translation id="9198010615634362518">Gereken eklenti yüklü değil.</translation> <translation id="7638452146404718955">Eklentiyi indirmek için burayı tıklayın</translation> <translation id="6119846243427417423">etkinleştir</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> dosya</translation> -<translation id="4470547978413275879"><ph name="PLUGIN"/> eklentisi yüklü değil</translation> -<translation id="6765711848403622008">Bu içeriği görüntüleyecek hiçbir eklenti yok</translation> +<translation id="3934680773876859118">PDF dokümanı yüklenemedi</translation> <translation id="8597182159515967513">başlık</translation> <translation id="2653659639078652383">Gönder</translation> <translation id="8475551193147984329"><ph name="PLUGIN"/> eklentisi gerekiyor</translation> diff --git a/webkit/glue/resources/webkit_strings_uk.xtb b/webkit/glue/resources/webkit_strings_uk.xtb index 360c85f..b9453c4 100644 --- a/webkit/glue/resources/webkit_strings_uk.xtb +++ b/webkit/glue/resources/webkit_strings_uk.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">Не вдалося встановити плагін із <ph name="URL"/></translation> <translation id="9186171386827445984">Завантаження документа – сторінки: <ph name="PAGE_NUMBER"/> із <ph name="NUMBER_OF_PAGES"/>...</translation> <translation id="1235745349614807883">Очистити останні пошуки</translation> +<translation id="1171774979989969504">Введіть електронну адресу.</translation> +<translation id="709897737746224366">Виберіть потрібний формат.</translation> <translation id="5048533449481078685">маркер списку</translation> <translation id="372362261556059955">Потрібен додатковий плагін.</translation> <translation id="4202807286478387388">перейти</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Завантаження...</translation> <translation id="6845533974506654842">натиснути</translation> <translation id="8244226242650769279">мапа зображення</translation> +<translation id="310520048233152454">Введіть URL-адресу.</translation> <translation id="2548326553472216322">Немає останніх пошуків</translation> +<translation id="7263440858009898357">Виберіть елемент зі списку.</translation> +<translation id="5164977714490026579">Значення має бути більшим або дорівнювати <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Високий рівень)</translation> <translation id="3040011195152428237">посилання</translation> <translation id="2745343197843472802">Отримати плагін</translation> +<translation id="8451268428117625855">Виберіть файл.</translation> <translation id="5776402066334188252">Підтвердьте встановлення цього плагіна. Слід установлювати лише плагіни, яким ви довіряєте.</translation> -<translation id="4003986561708175844">Потрібний плагін не встановлено</translation> <translation id="3018094406922859308">Завантаження плагіна...</translation> <translation id="7364796246159120393">Вибрати файл</translation> +<translation id="2761667185364618470">Поставте тут прапорець, якщо хочете продовжити.</translation> <translation id="8964020114565522021">Перетягніть файл сюди</translation> +<translation id="5129723458012748440">Плагін <ph name="PLUGIN"/> не встановлено.</translation> <translation id="838869780401515933">установити прапорець</translation> <translation id="2846343701378493991">1024 (Середній рівень)</translation> <translation id="5476505524087279545">зняти прапорець</translation> <translation id="3789841737615482174">Інсталювати</translation> +<translation id="2507943997699731163">Заповніть це поле.</translation> <translation id="5253117816378681419">Підтвердьте встановлення плагіна <ph name="PLUGIN"/>. Слід установлювати лише плагіни, яким ви довіряєте.</translation> <translation id="6663448176199120256">Останні пошуки</translation> +<translation id="7335060848622232389">Встановлення плагінів вимкнено.</translation> <translation id="2597378329261239068">Цей документ захищено паролем. Введіть пароль.</translation> +<translation id="5466621249238537318">Виберіть один або декілька файлів.</translation> +<translation id="8750798805984357768">Виберіть один із запропонованих варіантів.</translation> <translation id="7740050170769002709">Вміст HTML</translation> +<translation id="2226276347425096477">Скоротіть текст до такої кількості символів або менше: <ph name="MAX_CHARACTERS"/> (наразі використано символів: <ph name="CURRENT_LENGTH"/>).</translation> +<translation id="1639239467298939599">Завантаження</translation> +<translation id="2908441821576996758">Введіть список електронних адрес, розділених комою.</translation> <translation id="5939518447894949180">Скинути</translation> +<translation id="835897206747267392">Недійсне значення</translation> +<translation id="3851140433852960970">Немає плагінів для відображення цього вмісту.</translation> <translation id="1842960171412779397">вибрати</translation> +<translation id="3450233048674729344">Значення має бути меншим або дорівнювати <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Потрібний плагін не встановлено.</translation> <translation id="7638452146404718955">Натисніть тут, щоб завантажити плагін</translation> <translation id="6119846243427417423">активувати</translation> <translation id="8444882422881193423">файлів: <ph name="NUMBER_OF_FILES"/></translation> -<translation id="4470547978413275879">Плагін <ph name="PLUGIN"/> не встановлено</translation> -<translation id="6765711848403622008">Немає доступного плагіна для відображення цього вмісту</translation> +<translation id="3934680773876859118">Не вдалося завантажити документ PDF</translation> <translation id="8597182159515967513">заголовок</translation> <translation id="2653659639078652383">Надіслати</translation> <translation id="8475551193147984329">Потрібен плагін <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_vi.xtb b/webkit/glue/resources/webkit_strings_vi.xtb index 0ee2d09..0c963ca 100644 --- a/webkit/glue/resources/webkit_strings_vi.xtb +++ b/webkit/glue/resources/webkit_strings_vi.xtb @@ -4,11 +4,13 @@ <translation id="4519964825805946997">Cài đặt trình cắm từ <ph name="URL"/> không thành công</translation> <translation id="9186171386827445984">Đang tải tài liệu: <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> trang...</translation> <translation id="1235745349614807883">Xoá Tìm kiếm Gần đây</translation> +<translation id="1171774979989969504">Vui lòng nhập địa chỉ email.</translation> +<translation id="709897737746224366">Vui lòng khớp với định dạng được yêu cầu.</translation> <translation id="5048533449481078685">đánh dấu danh sách</translation> <translation id="372362261556059955">Cần trình cắm bổ sung</translation> <translation id="4202807286478387388">chuyển</translation> <translation id="4611115858363067980"><ph name="FILENAME"/><ph name="WIDTH"/>×<ph name="HEIGHT"/></translation> -<translation id="7658239707568436148">Huỷ</translation> +<translation id="7658239707568436148">Hủy</translation> <translation id="795667975304826397">Không có tệp nào được chọn</translation> <translation id="1416462845279468967">Cài đặt trình cắm không thành công</translation> <translation id="8141602879876242471">Đây là chỉ mục có thể tìm kiếm. Nhập từ khoá tìm kiếm vào:</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">Đang tải...</translation> <translation id="6845533974506654842">nhấn</translation> <translation id="8244226242650769279">bản đồ hình ảnh</translation> +<translation id="310520048233152454">Vui lòng nhập URL.</translation> <translation id="2548326553472216322">Không có tìm kiếm nào gần đây</translation> +<translation id="7263440858009898357">Vui lòng chọn một mục trong danh sách.</translation> +<translation id="5164977714490026579">Giá trị phải lớn hơn hoặc bằng <ph name="MINIMUM"/>.</translation> <translation id="5944544982112848342">2048 (Cấp độ cao)</translation> <translation id="3040011195152428237">liên kết</translation> <translation id="2745343197843472802">Tải Trình cắm</translation> +<translation id="8451268428117625855">Vui lòng chọn một tệp.</translation> <translation id="5776402066334188252">Vui lòng xác nhận rằng bạn muốn cài đặt trình cắm này. Bạn chỉ nên cài đặt trình cắm mà bạn tin tưởng.</translation> -<translation id="4003986561708175844">Trình cắm được yêu cầu chưa được cài đặt</translation> <translation id="3018094406922859308">Đang tải xuống trình cắm...</translation> <translation id="7364796246159120393">Chọn Tệp tin</translation> +<translation id="2761667185364618470">Vui lòng chọn hộp kiểm này nếu bạn muốn tiếp tục.</translation> <translation id="8964020114565522021">Kéo tệp tại đây</translation> +<translation id="5129723458012748440">Plugin <ph name="PLUGIN"/> chưa được cài đặt.</translation> <translation id="838869780401515933">chọn</translation> <translation id="2846343701378493991">1024 (Loại Trung bình)</translation> <translation id="5476505524087279545">bỏ chọn</translation> <translation id="3789841737615482174">Cài đặt</translation> +<translation id="2507943997699731163">Vui lòng điền vào trường này.</translation> <translation id="5253117816378681419">Vui lòng xác nhận rằng bạn muốn cài đặt trình cắm <ph name="PLUGIN"/>. Bạn chỉ nên cài đặt những trình cắm mà bạn tin tưởng.</translation> <translation id="6663448176199120256">Tìm kiếm Gần đây</translation> +<translation id="7335060848622232389">Cài đặt plug-in đã bị tắt.</translation> <translation id="2597378329261239068">Tài liệu này được bảo vệ bằng mật khẩu. Vui lòng nhập mật khẩu.</translation> +<translation id="5466621249238537318">Vui lòng chọn một hoặc nhiều tệp.</translation> +<translation id="8750798805984357768">Vui lòng chọn một trong các tùy chọn sau.</translation> <translation id="7740050170769002709">Nội dung HTML</translation> +<translation id="2226276347425096477">Hãy cắt ngắn văn bản này thành <ph name="MAX_CHARACTERS"/> ký tự hoặc ít hơn (bạn hiện đang sử dụng <ph name="CURRENT_LENGTH"/> ký tự).</translation> +<translation id="1639239467298939599">Đang tải</translation> +<translation id="2908441821576996758">Vui lòng nhập danh sách địa chỉ email được phân cách bằng dấu phẩy.</translation> <translation id="5939518447894949180">Đặt lại</translation> +<translation id="835897206747267392">Giá trị không hợp lệ.</translation> +<translation id="3851140433852960970">Không có plugin nào để hiển thị nội dung này.</translation> <translation id="1842960171412779397">chọn</translation> +<translation id="3450233048674729344">Giá trị phải nhỏ hơn hoặc bằng <ph name="MAXIMUM"/>.</translation> +<translation id="9198010615634362518">Plugin được yêu cầu chưa được cài đặt.</translation> <translation id="7638452146404718955">Nhấp vào đây để tải xuống trình cắm</translation> <translation id="6119846243427417423">kích hoạt</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> tệp</translation> -<translation id="4470547978413275879">Trình cắm <ph name="PLUGIN"/> chưa được cài đặt</translation> -<translation id="6765711848403622008">Không có trình cắm nào để hiển thị nội dung này</translation> +<translation id="3934680773876859118">Không thể tải tài liệu PDF</translation> <translation id="8597182159515967513">đầu đề</translation> <translation id="2653659639078652383">Gửi</translation> <translation id="8475551193147984329">Cần trình cắm <ph name="PLUGIN"/></translation> diff --git a/webkit/glue/resources/webkit_strings_zh-CN.xtb b/webkit/glue/resources/webkit_strings_zh-CN.xtb index f931c5c..c02178b 100644 --- a/webkit/glue/resources/webkit_strings_zh-CN.xtb +++ b/webkit/glue/resources/webkit_strings_zh-CN.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">无法从 <ph name="URL"/> 安装插件</translation> <translation id="9186171386827445984">正在载入文档:已载入 <ph name="PAGE_NUMBER"/> 页,共 <ph name="NUMBER_OF_PAGES"/> 页...</translation> <translation id="1235745349614807883">清除最近的搜索</translation> +<translation id="1171774979989969504">请输入电子邮件地址。</translation> +<translation id="709897737746224366">请与所请求的格式保持一致。</translation> <translation id="5048533449481078685">列表标记</translation> <translation id="372362261556059955">需要其他插件</translation> <translation id="4202807286478387388">略过</translation> @@ -16,30 +18,45 @@ <translation id="370665806235115550">正在载入...</translation> <translation id="6845533974506654842">按</translation> <translation id="8244226242650769279">图片映射</translation> +<translation id="310520048233152454">请输入网址。</translation> <translation id="2548326553472216322">最近未执行搜索</translation> +<translation id="7263440858009898357">请在列表中选择一项。</translation> +<translation id="5164977714490026579">值必须大于或等于 <ph name="MINIMUM"/>。</translation> <translation id="5944544982112848342">2048(高强度)</translation> <translation id="3040011195152428237">链接</translation> <translation id="2745343197843472802">获取插件</translation> +<translation id="8451268428117625855">请选择一个文件。</translation> <translation id="5776402066334188252">请确认您要安装此插件。您应该只安装自己信任的插件。</translation> -<translation id="4003986561708175844">未安装所需插件</translation> <translation id="3018094406922859308">正在下载插件...</translation> <translation id="7364796246159120393">选择文件</translation> +<translation id="2761667185364618470">如果要继续,请选中此框。</translation> <translation id="8964020114565522021">将文件拖到此处</translation> +<translation id="5129723458012748440">未安装 <ph name="PLUGIN"/> 插件。</translation> <translation id="838869780401515933">选中</translation> <translation id="2846343701378493991">1024(中等强度)</translation> <translation id="5476505524087279545">取消选中</translation> <translation id="3789841737615482174">安装</translation> +<translation id="2507943997699731163">请填写此字段。</translation> <translation id="5253117816378681419">请确认您要安装 <ph name="PLUGIN"/> 插件。您应该只安装自己信任的插件。</translation> <translation id="6663448176199120256">近期搜索</translation> +<translation id="7335060848622232389">已停用插件安装。</translation> <translation id="2597378329261239068">本文档设置了密码保护,请输入密码。</translation> +<translation id="5466621249238537318">请选择一个或多个文件。</translation> +<translation id="8750798805984357768">请从这些选项中选择一个。</translation> <translation id="7740050170769002709">HTML 内容</translation> +<translation id="2226276347425096477">请将该文本减少为 <ph name="MAX_CHARACTERS"/> 个字符或更少(您当前使用了 <ph name="CURRENT_LENGTH"/> 个字符)。</translation> +<translation id="1639239467298939599">正在载入</translation> +<translation id="2908441821576996758">请输入用逗号分隔的电子邮件地址的列表。</translation> <translation id="5939518447894949180">重置</translation> +<translation id="835897206747267392">值无效。</translation> +<translation id="3851140433852960970">没有用于显示此内容的插件。</translation> <translation id="1842960171412779397">选中</translation> +<translation id="3450233048674729344">值必须小于或等于 <ph name="MAXIMUM"/>。</translation> +<translation id="9198010615634362518">未安装所需插件。</translation> <translation id="7638452146404718955">点击此处可下载插件</translation> <translation id="6119846243427417423">激活</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> 个文件</translation> -<translation id="4470547978413275879">未安装 <ph name="PLUGIN"/> 插件</translation> -<translation id="6765711848403622008">没有用于显示此内容的插件</translation> +<translation id="3934680773876859118">无法载入 PDF 文档</translation> <translation id="8597182159515967513">标题</translation> <translation id="2653659639078652383">提交</translation> <translation id="8475551193147984329">需要 <ph name="PLUGIN"/> 插件</translation> diff --git a/webkit/glue/resources/webkit_strings_zh-TW.xtb b/webkit/glue/resources/webkit_strings_zh-TW.xtb index 368a365..7c9d083 100644 --- a/webkit/glue/resources/webkit_strings_zh-TW.xtb +++ b/webkit/glue/resources/webkit_strings_zh-TW.xtb @@ -4,6 +4,8 @@ <translation id="4519964825805946997">無法從 <ph name="URL"/> 安裝外掛程式</translation> <translation id="9186171386827445984">正在載入文件:第 <ph name="PAGE_NUMBER"/> 頁,共 <ph name="NUMBER_OF_PAGES"/> 頁...</translation> <translation id="1235745349614807883">清除最近的搜尋記錄</translation> +<translation id="1171774979989969504">請輸入電子郵件地址。</translation> +<translation id="709897737746224366">請符合要求的格式。</translation> <translation id="5048533449481078685">清單標記</translation> <translation id="372362261556059955">需要其他外掛程式</translation> <translation id="4202807286478387388">跳至另一頁</translation> @@ -15,31 +17,46 @@ <translation id="5650795167354946011">安裝外掛程式後,請按一下這裡重新整理</translation> <translation id="370665806235115550">載入中...</translation> <translation id="6845533974506654842">按下</translation> -<translation id="8244226242650769279">影像地圖</translation> +<translation id="8244226242650769279">圖片點擊區</translation> +<translation id="310520048233152454">請輸入網址。</translation> <translation id="2548326553472216322">沒有近期的搜尋</translation> +<translation id="7263440858009898357">請選取一個清單中的項目。</translation> +<translation id="5164977714490026579">值必須大於或等於 <ph name="MINIMUM"/>。</translation> <translation id="5944544982112848342">2048 (高級)</translation> <translation id="3040011195152428237">連結</translation> <translation id="2745343197843472802">取得外掛程式</translation> +<translation id="8451268428117625855">請選取檔案。</translation> <translation id="5776402066334188252">請確認您要安裝此外掛程式,建議您僅安裝您所信任的外掛程式。</translation> -<translation id="4003986561708175844">未安裝必要的外掛程式</translation> <translation id="3018094406922859308">正在下載外掛程式...</translation> <translation id="7364796246159120393">選擇檔案</translation> +<translation id="2761667185364618470">如果您要繼續執行,請勾選這個核取方塊。</translation> <translation id="8964020114565522021">拖曳檔案至此</translation> +<translation id="5129723458012748440">未安裝 <ph name="PLUGIN"/> 外掛程式。</translation> <translation id="838869780401515933">選取</translation> <translation id="2846343701378493991">1024 (中等)</translation> <translation id="5476505524087279545">取消選取</translation> <translation id="3789841737615482174">安裝</translation> +<translation id="2507943997699731163">請填寫這個欄位。</translation> <translation id="5253117816378681419">請確認您要安裝 <ph name="PLUGIN"/> 外掛程式,建議您僅安裝您所信任的外掛程式。</translation> <translation id="6663448176199120256">最近的搜尋</translation> +<translation id="7335060848622232389">外掛程式安裝功能已停用。</translation> <translation id="2597378329261239068">此文件受到密碼保護,請輸入密碼。</translation> +<translation id="5466621249238537318">請選取一或多個檔案。</translation> +<translation id="8750798805984357768">請選取其中一個選項。</translation> <translation id="7740050170769002709">HTML 內容</translation> +<translation id="2226276347425096477">請將這段文字刪減至 <ph name="MAX_CHARACTERS"/> 個字元以下 (目前的字元數為 <ph name="CURRENT_LENGTH"/> 個)。</translation> +<translation id="1639239467298939599">載入中</translation> +<translation id="2908441821576996758">請輸入以逗號分隔的電子郵件地址清單。</translation> <translation id="5939518447894949180">重設</translation> +<translation id="835897206747267392">無效的值。</translation> +<translation id="3851140433852960970">沒有可以顯示這個內容的外掛程式</translation> <translation id="1842960171412779397">選取</translation> +<translation id="3450233048674729344">值必須小於或等於 <ph name="MAXIMUM"/>。</translation> +<translation id="9198010615634362518">未安裝必要的外掛程式</translation> <translation id="7638452146404718955">按一下這裡下載外掛程式</translation> <translation id="6119846243427417423">啟動</translation> <translation id="8444882422881193423"><ph name="NUMBER_OF_FILES"/> 個檔案</translation> -<translation id="4470547978413275879">未安裝 <ph name="PLUGIN"/> 外掛程式</translation> -<translation id="6765711848403622008">沒有可以顯示此內容的外掛程式</translation> +<translation id="3934680773876859118">無法載入 PDF 文件</translation> <translation id="8597182159515967513">標題</translation> <translation id="2653659639078652383">提交</translation> <translation id="8475551193147984329">需要 <ph name="PLUGIN"/> 外掛程式</translation> diff --git a/webkit/glue/user_agent.cc b/webkit/glue/user_agent.cc index 04fab21..f92bc9a 100644 --- a/webkit/glue/user_agent.cc +++ b/webkit/glue/user_agent.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -64,14 +64,15 @@ std::string BuildOSCpuInfo() { #if defined(OS_WIN) std::string architecture_token; - if (base::win::GetWOW64Status() == base::win::WOW64_ENABLED) { + base::win::OSInfo* os_info = base::win::OSInfo::GetInstance(); + if (os_info->wow64_status() == base::win::OSInfo::WOW64_ENABLED) { architecture_token = "; WOW64"; } else { - base::win::WindowsArchitecture windows_architecture = - base::win::GetWindowsArchitecture(); - if (windows_architecture == base::win::X64_ARCHITECTURE) + base::win::OSInfo::WindowsArchitecture windows_architecture = + os_info->architecture(); + if (windows_architecture == base::win::OSInfo::X64_ARCHITECTURE) architecture_token = "; Win64; x64"; - else if (windows_architecture == base::win::IA64_ARCHITECTURE) + else if (windows_architecture == base::win::OSInfo::IA64_ARCHITECTURE) architecture_token = "; Win64; IA64"; } #endif @@ -89,7 +90,11 @@ std::string BuildOSCpuInfo() { os_minor_version, os_bugfix_version #elif defined(OS_CHROMEOS) - "CrOS %s %d.%d.%d", + "CrOS " +#if defined(TOUCH_UI) + "Touch " +#endif + "%s %d.%d.%d", cputype.c_str(), // e.g. i686 os_major_version, os_minor_version, diff --git a/webkit/glue/webaccessibility.cc b/webkit/glue/webaccessibility.cc index f6df3b2..615aeda 100644 --- a/webkit/glue/webaccessibility.cc +++ b/webkit/glue/webaccessibility.cc @@ -1,9 +1,11 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "webkit/glue/webaccessibility.h" +#include <set> + #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" @@ -19,6 +21,7 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebNamedNodeMap.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" @@ -328,9 +331,12 @@ void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, attributes[ATTR_URL] = src.url().spec().utf16(); WebKit::WebNode node = src.node(); + bool is_iframe = false; if (!node.isNull() && node.isElementNode()) { WebKit::WebElement element = node.to<WebKit::WebElement>(); + is_iframe = (element.tagName() == ASCIIToUTF16("IFRAME")); + // TODO(ctguil): The tagName in WebKit is lower cased but // HTMLElement::nodeName calls localNameUpper. Consider adding // a WebElement method that returns the original lower cased tagName. @@ -380,26 +386,52 @@ void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, // Add the source object to the cache and store its id. id = cache->addOrGetId(src); - if (role == WebAccessibility::ROLE_EDITABLE_TEXT || - role == WebAccessibility::ROLE_TEXTAREA || - role == WebAccessibility::ROLE_TEXT_FIELD) { - include_children = false; - } - if (include_children) { // Recursively create children. int child_count = src.childCount(); + std::set<int32> child_ids; for (int i = 0; i < child_count; i++) { WebAccessibilityObject child = src.childAt(i); + int32 child_id = cache->addOrGetId(child); // The child may be invalid due to issues in webkit accessibility code. - // Don't add children are invalid thus preventing a crash. + // Don't add children that are invalid thus preventing a crash. // https://bugs.webkit.org/show_bug.cgi?id=44149 // TODO(ctguil): We may want to remove this check as webkit stabilizes. - if (child.isValid()) + if (!child.isValid()) + continue; + + // Children may duplicated in the webkit accessibility tree. Only add a + // child once for the web accessibility tree. + // https://bugs.webkit.org/show_bug.cgi?id=58930 + if (child_ids.find(child_id) != child_ids.end()) + continue; + child_ids.insert(child_id); + + // Some nodes appear in the tree in more than one place: for example, + // a cell in a table appears as a child of both a row and a column. + // Only recursively add child nodes that have this node as its + // unignored parent. For child nodes that are actually parented to + // somethinng else, store only the ID. + // + // As an exception, also add children of an iframe element. + // https://bugs.webkit.org/show_bug.cgi?id=57066 + if (is_iframe || IsParentUnignoredOf(src, child)) { children.push_back(WebAccessibility(child, cache, include_children)); + } else { + indirect_child_ids.push_back(child_id); + } } } } +bool WebAccessibility::IsParentUnignoredOf( + const WebKit::WebAccessibilityObject& ancestor, + const WebKit::WebAccessibilityObject& child) { + WebKit::WebAccessibilityObject parent = child.parentObject(); + while (!parent.isNull() && parent.accessibilityIsIgnored()) + parent = parent.parentObject(); + return parent.equals(ancestor); +} + } // namespace webkit_glue diff --git a/webkit/glue/webaccessibility.h b/webkit/glue/webaccessibility.h index 081d156..ea4edce 100644 --- a/webkit/glue/webaccessibility.h +++ b/webkit/glue/webaccessibility.h @@ -9,7 +9,7 @@ #include <vector> #include "base/string16.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" +#include "ui/gfx/rect.h" namespace WebKit { class WebAccessibilityCache; @@ -193,11 +193,18 @@ struct WebAccessibility { ~WebAccessibility(); private: - // Initialize an already-created struct, same as the constructor a + // Initialize an already-created struct, same as the constructor above. void Init(const WebKit::WebAccessibilityObject& src, WebKit::WebAccessibilityCache* cache, bool include_children); + // Returns true if |ancestor| is the first unignored parent of |child|, + // which means that when walking up the parent chain from |child|, + // |ancestor| is the *first* ancestor that isn't marked as + // accessibilityIsIgnored(). + bool IsParentUnignoredOf(const WebKit::WebAccessibilityObject& ancestor, + const WebKit::WebAccessibilityObject& child); + public: // This is a simple serializable struct. All member variables should be // copyable. @@ -206,9 +213,10 @@ struct WebAccessibility { string16 value; Role role; uint32 state; - WebKit::WebRect location; + gfx::Rect location; std::map<int32, string16> attributes; std::vector<WebAccessibility> children; + std::vector<int32> indirect_child_ids; std::vector<std::pair<string16, string16> > html_attributes; }; diff --git a/webkit/glue/webclipboard_impl.cc b/webkit/glue/webclipboard_impl.cc index b917677..10dddab 100644 --- a/webkit/glue/webclipboard_impl.cc +++ b/webkit/glue/webclipboard_impl.cc @@ -10,6 +10,7 @@ #include "googleurl/src/gurl.h" #include "net/base/escape.h" #include "third_party/skia/include/core/SkBitmap.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebData.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebImage.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" @@ -24,6 +25,7 @@ #endif using WebKit::WebClipboard; +using WebKit::WebData; using WebKit::WebImage; using WebKit::WebString; using WebKit::WebURL; @@ -65,7 +67,15 @@ bool WebClipboardImpl::isFormatAvailable(Format format, Buffer buffer) { ui::Clipboard::FormatType format_type; ui::Clipboard::Buffer buffer_type; + if (!ConvertBufferType(buffer, &buffer_type)) + return false; + switch (format) { + case FormatPlainText: + return ClipboardIsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), + buffer_type) || + ClipboardIsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(), + buffer_type); case FormatHTML: format_type = ui::Clipboard::GetHtmlFormatType(); break; @@ -82,9 +92,6 @@ bool WebClipboardImpl::isFormatAvailable(Format format, Buffer buffer) { return false; } - if (!ConvertBufferType(buffer, &buffer_type)) - return false; - return ClipboardIsFormatAvailable(format_type, buffer_type); } @@ -124,6 +131,16 @@ WebString WebClipboardImpl::readHTML(Buffer buffer, WebURL* source_url) { return html_stdstr; } +WebData WebClipboardImpl::readImage(Buffer buffer) { + ui::Clipboard::Buffer buffer_type; + if (!ConvertBufferType(buffer, &buffer_type)) + return WebData(); + + std::string png_data; + ClipboardReadImage(buffer_type, &png_data); + return WebData(png_data); +} + void WebClipboardImpl::writeHTML( const WebString& html_text, const WebURL& source_url, const WebString& plain_text, bool write_smart_paste) { diff --git a/webkit/glue/webclipboard_impl.h b/webkit/glue/webclipboard_impl.h index ba3e747..c50f38d 100644 --- a/webkit/glue/webclipboard_impl.h +++ b/webkit/glue/webclipboard_impl.h @@ -25,6 +25,7 @@ class WebClipboardImpl : public WebKit::WebClipboard { virtual bool isFormatAvailable(Format, Buffer); virtual WebKit::WebString readPlainText(Buffer); virtual WebKit::WebString readHTML(Buffer, WebKit::WebURL* source_url); + virtual WebKit::WebData readImage(Buffer); virtual void writeHTML( const WebKit::WebString& html_text, const WebKit::WebURL& source_url, diff --git a/webkit/glue/webdropdata.cc b/webkit/glue/webdropdata.cc index 02c1a4c..0a06ac3 100644 --- a/webkit/glue/webdropdata.cc +++ b/webkit/glue/webdropdata.cc @@ -15,13 +15,8 @@ using WebKit::WebDragData; using WebKit::WebString; using WebKit::WebVector; -WebDropData::WebDropData(int32 drag_identity) - : identity(drag_identity) { -} - WebDropData::WebDropData(const WebDragData& drag_data) - : identity(0), - url(drag_data.url()), + : url(drag_data.url()), url_title(drag_data.urlTitle()), download_metadata(drag_data.downloadMetadata()), file_extension(drag_data.fileExtension()), @@ -40,8 +35,7 @@ WebDropData::WebDropData(const WebDragData& drag_data) file_contents.assign(contents.data(), contents.size()); } -WebDropData::WebDropData() - : identity(0) { +WebDropData::WebDropData() { } WebDropData::~WebDropData() { diff --git a/webkit/glue/webdropdata.h b/webkit/glue/webdropdata.h index d129b06..a9a4ae7 100644 --- a/webkit/glue/webdropdata.h +++ b/webkit/glue/webdropdata.h @@ -22,20 +22,13 @@ class WebDragData; } struct WebDropData { - // Construct with a given drag identity. Note: identity is an int32 because - // it is passed over the renderer NPAPI interface to gears. - explicit WebDropData(int32 drag_identity); - // Construct from a WebDragData object. explicit WebDropData(const WebKit::WebDragData&); - // For default constructions, use drag |identity| 0. WebDropData(); ~WebDropData(); - int32 identity; - // User is dragging a link into the webview. GURL url; string16 url_title; // The title associated with |url|. diff --git a/webkit/glue/webkit_glue.cc b/webkit/glue/webkit_glue.cc index 227bfe7..5ba216a 100644 --- a/webkit/glue/webkit_glue.cc +++ b/webkit/glue/webkit_glue.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -13,7 +13,7 @@ #include "base/lazy_instance.h" #include "base/logging.h" -#include "base/scoped_ptr.h" +#include "base/memory/scoped_ptr.h" #include "base/string_piece.h" #include "base/string_tokenizer.h" #include "base/string_util.h" diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi index e742b8f..1b5be84 100644 --- a/webkit/glue/webkit_glue.gypi +++ b/webkit/glue/webkit_glue.gypi @@ -11,10 +11,6 @@ 'webkit_src_dir': '../../third_party/WebKit', }], ], - - 'grit_info_cmd': ['python', '<(DEPTH)/tools/grit/grit_info.py', - '<@(grit_defines)'], - 'grit_cmd': ['python', '<(DEPTH)/tools/grit/grit.py'], }, 'targets': [ { @@ -28,48 +24,19 @@ { 'action_name': 'webkit_resources', 'variables': { - 'input_path': './webkit_resources.grd', + 'grit_grd_file': 'webkit_resources.grd', }, - 'inputs': [ - '<!@(<(grit_info_cmd) --inputs <(input_path))', - ], - 'outputs': [ - '<!@(<(grit_info_cmd) --outputs \'<(grit_out_dir)\' <(input_path))', - ], - 'action': ['<@(grit_cmd)', - '-i', '<(input_path)', 'build', - '-o', '<(grit_out_dir)', - '<@(grit_defines)'], - 'message': 'Generating resources from <(input_path)', + 'includes': [ '../../build/grit_action.gypi' ], }, { 'action_name': 'webkit_chromium_resources', 'variables': { - 'input_path': '<(webkit_src_dir)/Source/WebKit/chromium/WebKit.grd', + 'grit_grd_file': '<(webkit_src_dir)/Source/WebKit/chromium/WebKit.grd', }, - 'inputs': [ - '<!@(<(grit_info_cmd) --inputs <(input_path))', - ], - 'outputs': [ - '<!@(<(grit_info_cmd) --outputs \'<(grit_out_dir)\' <(input_path))', - ], - 'action': ['<@(grit_cmd)', - '-i', '<(input_path)', 'build', - '-o', '<(grit_out_dir)', - '<@(grit_defines)'], - 'message': 'Generating resources from <(input_path)', + 'includes': [ '../../build/grit_action.gypi' ], }, ], - 'direct_dependent_settings': { - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)/webkit', - ], - }, - 'conditions': [ - ['OS=="win"', { - 'dependencies': ['<(DEPTH)/build/win/system.gyp:cygwin'], - }], - ], + 'includes': [ '../../build/grit_target.gypi' ], }, { 'target_name': 'webkit_strings', @@ -82,31 +49,12 @@ { 'action_name': 'webkit_strings', 'variables': { - 'input_path': './webkit_strings.grd', + 'grit_grd_file': 'webkit_strings.grd', }, - 'inputs': [ - '<!@(<(grit_info_cmd) --inputs <(input_path))', - ], - 'outputs': [ - '<!@(<(grit_info_cmd) --outputs \'<(grit_out_dir)\' <(input_path))', - ], - 'action': ['<@(grit_cmd)', - '-i', '<(input_path)', 'build', - '-o', '<(grit_out_dir)', - '<@(grit_defines)'], - 'message': 'Generating resources from <(input_path)', + 'includes': [ '../../build/grit_action.gypi' ], }, ], - 'direct_dependent_settings': { - 'include_dirs': [ - '<(SHARED_INTERMEDIATE_DIR)/webkit', - ], - }, - 'conditions': [ - ['OS=="win"', { - 'dependencies': ['<(DEPTH)/build/win/system.gyp:cygwin'], - }], - ], + 'includes': [ '../../build/grit_target.gypi' ], }, { 'target_name': 'webkit_user_agent', @@ -159,6 +107,7 @@ 'dependencies': [ '<(DEPTH)/app/app.gyp:app_base', '<(DEPTH)/base/base.gyp:base_i18n', + '<(DEPTH)/gpu/gpu.gyp:gpu_common', '<(DEPTH)/gpu/gpu.gyp:gles2_implementation', '<(DEPTH)/net/net.gyp:net', '<(DEPTH)/ppapi/ppapi.gyp:ppapi_shared_impl', @@ -166,8 +115,6 @@ '<(DEPTH)/skia/skia.gyp:skia', '<(DEPTH)/third_party/icu/icu.gyp:icui18n', '<(DEPTH)/third_party/icu/icu.gyp:icuuc', - '<(DEPTH)/third_party/libjingle/libjingle.gyp:libjingle', - '<(DEPTH)/third_party/libjingle/libjingle.gyp:libjingle_p2p', '<(DEPTH)/third_party/npapi/npapi.gyp:npapi', '<(DEPTH)/ppapi/ppapi.gyp:ppapi_c', 'webkit_resources', @@ -266,6 +213,8 @@ '../plugins/ppapi/file_path.cc', '../plugins/ppapi/file_path.h', '../plugins/ppapi/fullscreen_container.h', + '../plugins/ppapi/message_channel.cc', + '../plugins/ppapi/message_channel.h', '../plugins/ppapi/npapi_glue.cc', '../plugins/ppapi/npapi_glue.h', '../plugins/ppapi/plugin_delegate.h', @@ -279,12 +228,18 @@ '../plugins/ppapi/ppapi_webplugin_impl.h', '../plugins/ppapi/ppb_audio_impl.cc', '../plugins/ppapi/ppb_audio_impl.h', + '../plugins/ppapi/ppb_broker_impl.cc', + '../plugins/ppapi/ppb_broker_impl.h', '../plugins/ppapi/ppb_buffer_impl.cc', '../plugins/ppapi/ppb_buffer_impl.h', '../plugins/ppapi/ppb_char_set_impl.cc', '../plugins/ppapi/ppb_char_set_impl.h', + '../plugins/ppapi/ppb_console_impl.cc', + '../plugins/ppapi/ppb_console_impl.h', '../plugins/ppapi/ppb_context_3d_impl.cc', '../plugins/ppapi/ppb_context_3d_impl.h', + '../plugins/ppapi/ppb_crypto_impl.cc', + '../plugins/ppapi/ppb_crypto_impl.h', '../plugins/ppapi/ppb_cursor_control_impl.cc', '../plugins/ppapi/ppb_cursor_control_impl.h', '../plugins/ppapi/ppb_directory_reader_impl.cc', @@ -350,10 +305,12 @@ '../plugins/ppapi/resource_tracker.h', '../plugins/ppapi/string.cc', '../plugins/ppapi/string.h', + '../plugins/ppapi/usb_code_for_event.cc', + '../plugins/ppapi/usb_code_for_event.h', '../plugins/ppapi/var.cc', '../plugins/ppapi/var.h', - '../plugins/ppapi/var_object_class.cc', - '../plugins/ppapi/var_object_class.h', + '../plugins/sad_plugin.cc', + '../plugins/sad_plugin.h', 'media/audio_decoder.cc', 'media/audio_decoder.h', 'media/buffered_data_source.cc', @@ -366,6 +323,8 @@ 'media/video_renderer_impl.h', 'media/web_data_source.cc', 'media/web_data_source.h', + 'media/web_data_source_factory.cc', + 'media/web_data_source_factory.h', 'media/web_video_renderer.h', 'alt_error_page_resource_fetcher.cc', 'alt_error_page_resource_fetcher.h', @@ -385,6 +344,8 @@ 'form_field.h', 'ftp_directory_listing_response_delegate.cc', 'ftp_directory_listing_response_delegate.h', + 'gl_bindings_skia_cmd_buffer.cc', + 'gl_bindings_skia_cmd_buffer.h', 'glue_serialize.cc', 'glue_serialize.h', 'idb_bindings.cc', @@ -397,6 +358,7 @@ 'multipart_response_delegate.h', 'npruntime_util.cc', 'npruntime_util.h', + 'p2p_transport.h', 'password_form.cc', 'password_form.h', 'password_form_dom_manager.cc', @@ -441,8 +403,6 @@ 'webmenuitem.h', 'webmenurunner_mac.h', 'webmenurunner_mac.mm', - 'webpasswordautocompletelistener_impl.cc', - 'webpasswordautocompletelistener_impl.h', 'webpreferences.cc', 'webpreferences.h', 'websocketstreamhandle_bridge.h', @@ -465,8 +425,6 @@ '../extensions/v8/benchmarking_extension.h', '../extensions/v8/gc_extension.cc', '../extensions/v8/gc_extension.h', - '../extensions/v8/gears_extension.cc', - '../extensions/v8/gears_extension.h', '../extensions/v8/heap_profiler_extension.cc', '../extensions/v8/heap_profiler_extension.h', '../extensions/v8/playback_extension.cc', @@ -562,26 +520,12 @@ { 'action_name': 'inspector_strings', 'variables': { - 'input_path': './inspector_strings.grd', + 'grit_grd_file': 'inspector_strings.grd', }, - 'inputs': [ - '<!@(<(grit_info_cmd) --inputs <(input_path))', - ], - 'outputs': [ - '<!@(<(grit_info_cmd) --outputs \'<(grit_out_dir)\' <(input_path))', - ], - 'action': ['<@(grit_cmd)', - '-i', '<(input_path)', 'build', - '-o', '<(grit_out_dir)', - '<@(grit_defines)'], - 'message': 'Generating resources from <(input_path)', + 'includes': [ '../../build/grit_action.gypi' ], }, ], - 'conditions': [ - ['OS=="win"', { - 'dependencies': ['<(DEPTH)/build/win/system.gyp:cygwin'], - }], - ], + 'includes': [ '../../build/grit_target.gypi' ], }, ], }], diff --git a/webkit/glue/webkit_glue.h b/webkit/glue/webkit_glue.h index c1f45e6..7a8bedb 100644 --- a/webkit/glue/webkit_glue.h +++ b/webkit/glue/webkit_glue.h @@ -156,11 +156,6 @@ int GetGlyphPageCount(); //---- BEGIN FUNCTIONS IMPLEMENTED BY EMBEDDER -------------------------------- -// This function is called to request a prefetch of the entire URL, loading it -// into our cache for (expected) future needs. The given URL may NOT be in -// canonical form and it will NOT be null-terminated; use the length instead. -void PrecacheUrl(const char16* url, int url_length); - // This function is called to add a line to the application's log file. void AppendToLog(const char* filename, int line, const char* message); @@ -188,6 +183,11 @@ ui::Clipboard* ClipboardGetClipboard(); bool ClipboardIsFormatAvailable(const ui::Clipboard::FormatType& format, ui::Clipboard::Buffer buffer); +// Reads the available types from the clipboard, if available. +void ClipboardReadAvailableTypes(ui::Clipboard::Buffer buffer, + std::vector<string16>* types, + bool* contains_filenames); + // Reads UNICODE text from the clipboard, if available. void ClipboardReadText(ui::Clipboard::Buffer buffer, string16* result); @@ -198,10 +198,7 @@ void ClipboardReadAsciiText(ui::Clipboard::Buffer buffer, std::string* result); void ClipboardReadHTML(ui::Clipboard::Buffer buffer, string16* markup, GURL* url); -// Reads the available types from the clipboard, if available. -bool ClipboardReadAvailableTypes(ui::Clipboard::Buffer buffer, - std::vector<string16>* types, - bool* contains_filenames); +void ClipboardReadImage(ui::Clipboard::Buffer buffer, std::string* data); // Reads one type of data from the clipboard, if available. bool ClipboardReadData(ui::Clipboard::Buffer buffer, const string16& type, @@ -265,6 +262,13 @@ void SetCacheMode(bool enabled); // SSL information should be purged. void ClearCache(bool preserve_ssl_host_info); +// Clear the host resolver cache. Used for debugging. +void ClearHostResolverCache(); + +// Clear the predictor cache (for DNS prefetch and preconnect). Used for +// debugging. +void ClearPredictorCache(); + // Returns the product version. E.g., Chrome/4.1.333.0 std::string GetProductVersion(); diff --git a/webkit/glue/webkit_resources.grd b/webkit/glue/webkit_resources.grd index 20b684c..8d4f152 100644 --- a/webkit/glue/webkit_resources.grd +++ b/webkit/glue/webkit_resources.grd @@ -53,9 +53,9 @@ <include name="IDR_AUTOFILL_CC_MASTERCARD" file="resources\mastercard.png" type="BINDATA" /> <include name="IDR_AUTOFILL_CC_SOLO" file="resources\solo.png" type="BINDATA" /> <include name="IDR_AUTOFILL_CC_VISA" file="resources\visa.png" type="BINDATA" /> - <include name="IDR_PDF_BUTTON_FTH" file="resources\pdf_button_fth.png" type="BINDATA" /> - <include name="IDR_PDF_BUTTON_FTH_HOVER" file="resources\pdf_button_fth_hover.png" type="BINDATA" /> - <include name="IDR_PDF_BUTTON_FTH_PRESSED" file="resources\pdf_button_fth_pressed.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_FTP" file="resources\pdf_button_ftp.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_FTP_HOVER" file="resources\pdf_button_ftp_hover.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_FTP_PRESSED" file="resources\pdf_button_ftp_pressed.png" type="BINDATA" /> <include name="IDR_PDF_BUTTON_FTW" file="resources\pdf_button_ftw.png" type="BINDATA" /> <include name="IDR_PDF_BUTTON_FTW_HOVER" file="resources\pdf_button_ftw_hover.png" type="BINDATA" /> <include name="IDR_PDF_BUTTON_FTW_PRESSED" file="resources\pdf_button_ftw_pressed.png" type="BINDATA" /> @@ -65,6 +65,12 @@ <include name="IDR_PDF_BUTTON_ZOOMOUT" file="resources\pdf_button_zoomout.png" type="BINDATA" /> <include name="IDR_PDF_BUTTON_ZOOMOUT_HOVER" file="resources\pdf_button_zoomout_hover.png" type="BINDATA" /> <include name="IDR_PDF_BUTTON_ZOOMOUT_PRESSED" file="resources\pdf_button_zoomout_pressed.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_SAVE" file="resources\pdf_button_save.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_SAVE_HOVER" file="resources\pdf_button_save_hover.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_SAVE_PRESSED" file="resources\pdf_button_save_pressed.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_PRINT" file="resources\pdf_button_print.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_PRINT_HOVER" file="resources\pdf_button_print_hover.png" type="BINDATA" /> + <include name="IDR_PDF_BUTTON_PRINT_PRESSED" file="resources\pdf_button_print_pressed.png" type="BINDATA" /> <include name="IDR_PDF_THUMBNAIL_0" file="resources\pdf_thumbnail_0.png" type="BINDATA" /> <include name="IDR_PDF_THUMBNAIL_1" file="resources\pdf_thumbnail_1.png" type="BINDATA" /> <include name="IDR_PDF_THUMBNAIL_2" file="resources\pdf_thumbnail_2.png" type="BINDATA" /> diff --git a/webkit/glue/webkitclient_impl.cc b/webkit/glue/webkitclient_impl.cc index 3a47de4..4e2b10a 100644 --- a/webkit/glue/webkitclient_impl.cc +++ b/webkit/glue/webkitclient_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -13,18 +13,19 @@ #include <vector> #include "base/debug/trace_event.h" +#include "base/memory/singleton.h" #include "base/message_loop.h" #include "base/metrics/histogram.h" #include "base/metrics/stats_counters.h" #include "base/platform_file.h" #include "base/process_util.h" #include "base/rand_util.h" -#include "base/singleton.h" #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/synchronization/lock.h" #include "base/time.h" #include "base/utf_string_conversions.h" +#include "gpu/common/gpu_trace_event.h" #include "grit/webkit_chromium_resources.h" #include "grit/webkit_resources.h" #include "grit/webkit_strings.h" @@ -263,34 +264,36 @@ void WebKitClientImpl::histogramCustomCounts( const char* name, int sample, int min, int max, int bucket_count) { // Copied from histogram macro, but without the static variable caching // the histogram because name is dynamic. - scoped_refptr<base::Histogram> counter = + base::Histogram* counter = base::Histogram::FactoryGet(name, min, max, bucket_count, base::Histogram::kUmaTargetedHistogramFlag); DCHECK_EQ(name, counter->histogram_name()); - if (counter.get()) - counter->Add(sample); + counter->Add(sample); } void WebKitClientImpl::histogramEnumeration( const char* name, int sample, int boundary_value) { // Copied from histogram macro, but without the static variable caching // the histogram because name is dynamic. - scoped_refptr<base::Histogram> counter = + base::Histogram* counter = base::LinearHistogram::FactoryGet(name, 1, boundary_value, boundary_value + 1, base::Histogram::kUmaTargetedHistogramFlag); DCHECK_EQ(name, counter->histogram_name()); - if (counter.get()) - counter->Add(sample); + counter->Add(sample); } void WebKitClientImpl::traceEventBegin(const char* name, void* id, const char* extra) { TRACE_EVENT_BEGIN(name, id, extra); + GPU_TRACE_EVENT_BEGIN2("webkit", name, + "id", StringPrintf("%p", id).c_str(), + "extra", extra ? extra : ""); } void WebKitClientImpl::traceEventEnd(const char* name, void* id, const char* extra) { TRACE_EVENT_END(name, id, extra); + GPU_TRACE_EVENT_END0("webkit", name); } namespace { diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index eda79f5..e204be6 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -5,20 +5,23 @@ #include "webkit/glue/webmediaplayer_impl.h" #include <limits> +#include <string> #include "base/callback.h" #include "base/command_line.h" +#include "media/base/composite_data_source_factory.h" #include "media/base/filter_collection.h" #include "media/base/limits.h" #include "media/base/media_format.h" #include "media/base/media_switches.h" #include "media/base/pipeline_impl.h" #include "media/base/video_frame.h" +#include "media/filters/adaptive_demuxer.h" #include "media/filters/ffmpeg_audio_decoder.h" -#include "media/filters/ffmpeg_demuxer.h" +#include "media/filters/ffmpeg_demuxer_factory.h" #include "media/filters/ffmpeg_video_decoder.h" +#include "media/filters/rtc_video_decoder.h" #include "media/filters/null_audio_renderer.h" -#include "skia/ext/platform_canvas.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" @@ -32,6 +35,7 @@ using WebKit::WebCanvas; using WebKit::WebRect; using WebKit::WebSize; +using media::PipelineStatus; namespace { @@ -113,13 +117,13 @@ void WebMediaPlayerImpl::Proxy::SetVideoRenderer( video_renderer_ = video_renderer; } -void WebMediaPlayerImpl::Proxy::AddDataSource( - scoped_refptr<WebDataSource> data_source) { - base::AutoLock auto_lock(data_sources_lock_); - data_sources_.push_back(data_source); +WebDataSourceBuildObserverHack* WebMediaPlayerImpl::Proxy::GetBuildObserver() { + if (!build_observer_.get()) + build_observer_.reset(NewCallback(this, &Proxy::AddDataSource)); + return build_observer_.get(); } -void WebMediaPlayerImpl::Proxy::Paint(skia::PlatformCanvas* canvas, +void WebMediaPlayerImpl::Proxy::Paint(SkCanvas* canvas, const gfx::Rect& dest_rect) { DCHECK(MessageLoop::current() == render_loop_); if (video_renderer_) { @@ -170,29 +174,36 @@ void WebMediaPlayerImpl::Proxy::Detach() { } } -void WebMediaPlayerImpl::Proxy::PipelineInitializationCallback() { - render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, - &WebMediaPlayerImpl::Proxy::PipelineInitializationTask)); +void WebMediaPlayerImpl::Proxy::PipelineInitializationCallback( + PipelineStatus status) { + render_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &WebMediaPlayerImpl::Proxy::PipelineInitializationTask, status)); +} + +void WebMediaPlayerImpl::Proxy::PipelineSeekCallback(PipelineStatus status) { + render_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &WebMediaPlayerImpl::Proxy::PipelineSeekTask, status)); } -void WebMediaPlayerImpl::Proxy::PipelineSeekCallback() { - render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, - &WebMediaPlayerImpl::Proxy::PipelineSeekTask)); +void WebMediaPlayerImpl::Proxy::PipelineEndedCallback(PipelineStatus status) { + render_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &WebMediaPlayerImpl::Proxy::PipelineEndedTask, status)); } -void WebMediaPlayerImpl::Proxy::PipelineEndedCallback() { - render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, - &WebMediaPlayerImpl::Proxy::PipelineEndedTask)); +void WebMediaPlayerImpl::Proxy::PipelineErrorCallback(PipelineStatus error) { + DCHECK_NE(error, media::PIPELINE_OK); + render_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &WebMediaPlayerImpl::Proxy::PipelineErrorTask, error)); } -void WebMediaPlayerImpl::Proxy::PipelineErrorCallback() { - render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, - &WebMediaPlayerImpl::Proxy::PipelineErrorTask)); +void WebMediaPlayerImpl::Proxy::NetworkEventCallback(PipelineStatus status) { + render_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &WebMediaPlayerImpl::Proxy::NetworkEventTask, status)); } -void WebMediaPlayerImpl::Proxy::NetworkEventCallback() { - render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, - &WebMediaPlayerImpl::Proxy::NetworkEventTask)); +void WebMediaPlayerImpl::Proxy::AddDataSource(WebDataSource* data_source) { + base::AutoLock auto_lock(data_sources_lock_); + data_sources_.push_back(make_scoped_refptr(data_source)); } void WebMediaPlayerImpl::Proxy::RepaintTask() { @@ -207,38 +218,39 @@ void WebMediaPlayerImpl::Proxy::RepaintTask() { } } -void WebMediaPlayerImpl::Proxy::PipelineInitializationTask() { +void WebMediaPlayerImpl::Proxy::PipelineInitializationTask( + PipelineStatus status) { DCHECK(MessageLoop::current() == render_loop_); if (webmediaplayer_) { - webmediaplayer_->OnPipelineInitialize(); + webmediaplayer_->OnPipelineInitialize(status); } } -void WebMediaPlayerImpl::Proxy::PipelineSeekTask() { +void WebMediaPlayerImpl::Proxy::PipelineSeekTask(PipelineStatus status) { DCHECK(MessageLoop::current() == render_loop_); if (webmediaplayer_) { - webmediaplayer_->OnPipelineSeek(); + webmediaplayer_->OnPipelineSeek(status); } } -void WebMediaPlayerImpl::Proxy::PipelineEndedTask() { +void WebMediaPlayerImpl::Proxy::PipelineEndedTask(PipelineStatus status) { DCHECK(MessageLoop::current() == render_loop_); if (webmediaplayer_) { - webmediaplayer_->OnPipelineEnded(); + webmediaplayer_->OnPipelineEnded(status); } } -void WebMediaPlayerImpl::Proxy::PipelineErrorTask() { +void WebMediaPlayerImpl::Proxy::PipelineErrorTask(PipelineStatus error) { DCHECK(MessageLoop::current() == render_loop_); if (webmediaplayer_) { - webmediaplayer_->OnPipelineError(); + webmediaplayer_->OnPipelineError(error); } } -void WebMediaPlayerImpl::Proxy::NetworkEventTask() { +void WebMediaPlayerImpl::Proxy::NetworkEventTask(PipelineStatus status) { DCHECK(MessageLoop::current() == render_loop_); if (webmediaplayer_) { - webmediaplayer_->OnNetworkEvent(); + webmediaplayer_->OnNetworkEvent(status); } } @@ -271,8 +283,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( seeking_(false), playback_rate_(0.0f), client_(client), - proxy_(NULL), - pipeline_stopped_(false, false) { + proxy_(NULL) { // Saves the current message loop. DCHECK(!main_loop_); main_loop_ = MessageLoop::current(); @@ -309,25 +320,36 @@ bool WebMediaPlayerImpl::Initialize( &WebMediaPlayerImpl::Proxy::NetworkEventCallback)); // A simple data source that keeps all data in memory. - scoped_refptr<SimpleDataSource> simple_data_source( - new SimpleDataSource(MessageLoop::current(), frame)); + scoped_ptr<media::DataSourceFactory> simple_data_source_factory( + SimpleDataSource::CreateFactory(MessageLoop::current(), frame, + proxy_->GetBuildObserver())); // A sophisticated data source that does memory caching. - scoped_refptr<BufferedDataSource> buffered_data_source( - new BufferedDataSource(MessageLoop::current(), frame)); - proxy_->AddDataSource(buffered_data_source); + scoped_ptr<media::DataSourceFactory> buffered_data_source_factory( + BufferedDataSource::CreateFactory(MessageLoop::current(), frame, + proxy_->GetBuildObserver())); + + scoped_ptr<media::CompositeDataSourceFactory> data_source_factory( + new media::CompositeDataSourceFactory()); if (use_simple_data_source) { - filter_collection_->AddDataSource(simple_data_source); - filter_collection_->AddDataSource(buffered_data_source); + data_source_factory->AddFactory(simple_data_source_factory.release()); + data_source_factory->AddFactory(buffered_data_source_factory.release()); } else { - filter_collection_->AddDataSource(buffered_data_source); - filter_collection_->AddDataSource(simple_data_source); + data_source_factory->AddFactory(buffered_data_source_factory.release()); + data_source_factory->AddFactory(simple_data_source_factory.release()); + } + + scoped_ptr<media::DemuxerFactory> demuxer_factory( + new media::FFmpegDemuxerFactory(data_source_factory.release(), + pipeline_message_loop)); + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableAdaptive)) { + demuxer_factory.reset(new media::AdaptiveDemuxerFactory( + demuxer_factory.release())); } + filter_collection_->SetDemuxerFactory(demuxer_factory.release()); // Add in the default filter factories. - filter_collection_->AddDemuxer(new media::FFmpegDemuxer( - message_loop_factory_->GetMessageLoop("DemuxThread"))); filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder( message_loop_factory_->GetMessageLoop("AudioDecoderThread"))); filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder( @@ -351,8 +373,21 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url) { DCHECK(MessageLoop::current() == main_loop_); DCHECK(proxy_); + if (media::RTCVideoDecoder::IsUrlSupported(url.spec())) { + // Remove the default decoder + scoped_refptr<media::VideoDecoder> old_videodecoder; + filter_collection_->SelectVideoDecoder(&old_videodecoder); + media::RTCVideoDecoder* rtc_video_decoder = + new media::RTCVideoDecoder( + message_loop_factory_->GetMessageLoop("VideoDecoderThread"), + url.spec()); + filter_collection_->AddVideoDecoder(rtc_video_decoder); + } + // Handle any volume changes that occured before load(). setVolume(GetClient()->volume()); + // Get the preload value. + setPreload(GetClient()->preload()); // Initialize the pipeline. SetNetworkState(WebKit::WebMediaPlayer::Loading); @@ -466,10 +501,18 @@ void WebMediaPlayerImpl::setVisible(bool visible) { return; } -bool WebMediaPlayerImpl::setAutoBuffer(bool autoBuffer) { +#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, chromium_name) \ + COMPILE_ASSERT(int(WebKit::WebMediaPlayer::webkit_name) == \ + int(media::chromium_name), \ + mismatching_enums) +COMPILE_ASSERT_MATCHING_ENUM(None, NONE); +COMPILE_ASSERT_MATCHING_ENUM(MetaData, METADATA); +COMPILE_ASSERT_MATCHING_ENUM(Auto, AUTO); + +void WebMediaPlayerImpl::setPreload(WebKit::WebMediaPlayer::Preload preload) { DCHECK(MessageLoop::current() == main_loop_); - return false; + pipeline_->SetPreload(static_cast<media::Preload>(preload)); } bool WebMediaPlayerImpl::totalBytesKnown() { @@ -481,13 +524,13 @@ bool WebMediaPlayerImpl::totalBytesKnown() { bool WebMediaPlayerImpl::hasVideo() const { DCHECK(MessageLoop::current() == main_loop_); - return pipeline_->IsRendered(media::mime_type::kMajorTypeVideo); + return pipeline_->HasVideo(); } bool WebMediaPlayerImpl::hasAudio() const { DCHECK(MessageLoop::current() == main_loop_); - return pipeline_->IsRendered(media::mime_type::kMajorTypeAudio); + return pipeline_->HasAudio(); } WebKit::WebSize WebMediaPlayerImpl::naturalSize() const { @@ -671,32 +714,28 @@ WebKit::WebMediaPlayer::MovieLoadType return WebKit::WebMediaPlayer::Unknown; } -unsigned WebMediaPlayerImpl::decodedFrameCount() const -{ +unsigned WebMediaPlayerImpl::decodedFrameCount() const { DCHECK(MessageLoop::current() == main_loop_); media::PipelineStatistics stats = pipeline_->GetStatistics(); return stats.video_frames_decoded; } -unsigned WebMediaPlayerImpl::droppedFrameCount() const -{ +unsigned WebMediaPlayerImpl::droppedFrameCount() const { DCHECK(MessageLoop::current() == main_loop_); media::PipelineStatistics stats = pipeline_->GetStatistics(); return stats.video_frames_dropped; } -unsigned WebMediaPlayerImpl::audioDecodedByteCount() const -{ +unsigned WebMediaPlayerImpl::audioDecodedByteCount() const { DCHECK(MessageLoop::current() == main_loop_); media::PipelineStatistics stats = pipeline_->GetStatistics(); return stats.audio_bytes_decoded; } -unsigned WebMediaPlayerImpl::videoDecodedByteCount() const -{ +unsigned WebMediaPlayerImpl::videoDecodedByteCount() const { DCHECK(MessageLoop::current() == main_loop_); media::PipelineStatistics stats = pipeline_->GetStatistics(); @@ -731,9 +770,9 @@ void WebMediaPlayerImpl::Repaint() { GetClient()->repaint(); } -void WebMediaPlayerImpl::OnPipelineInitialize() { +void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) { DCHECK(MessageLoop::current() == main_loop_); - if (pipeline_->GetError() == media::PIPELINE_OK) { + if (status == media::PIPELINE_OK) { // Only keep one time range starting from 0. WebKit::WebTimeRanges new_buffered(static_cast<size_t>(1)); new_buffered[0].start = 0.0f; @@ -750,7 +789,7 @@ void WebMediaPlayerImpl::OnPipelineInitialize() { SetNetworkState(WebKit::WebMediaPlayer::Loaded); } } else { - // TODO(hclam): should use pipeline_->GetError() to determine the state + // TODO(hclam): should use |status| to determine the state // properly and reports error using MediaError. // WebKit uses FormatError to indicate an error for bogus URL or bad file. // Since we are at the initialization stage we can safely treat every error @@ -762,9 +801,9 @@ void WebMediaPlayerImpl::OnPipelineInitialize() { Repaint(); } -void WebMediaPlayerImpl::OnPipelineSeek() { +void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { DCHECK(MessageLoop::current() == main_loop_); - if (pipeline_->GetError() == media::PIPELINE_OK) { + if (status == media::PIPELINE_OK) { // Update our paused time. if (paused_) { paused_time_ = pipeline_->GetCurrentTime(); @@ -776,17 +815,20 @@ void WebMediaPlayerImpl::OnPipelineSeek() { } } -void WebMediaPlayerImpl::OnPipelineEnded() { +void WebMediaPlayerImpl::OnPipelineEnded(PipelineStatus status) { DCHECK(MessageLoop::current() == main_loop_); - if (pipeline_->GetError() == media::PIPELINE_OK) { + if (status == media::PIPELINE_OK) { GetClient()->timeChanged(); } } -void WebMediaPlayerImpl::OnPipelineError() { +void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) { DCHECK(MessageLoop::current() == main_loop_); - switch (pipeline_->GetError()) { + switch (error) { case media::PIPELINE_OK: + LOG(DFATAL) << "PIPELINE_OK isn't an error!"; + break; + case media::PIPELINE_ERROR_INITIALIZATION_FAILED: case media::PIPELINE_ERROR_REQUIRED_FILTER_MISSING: case media::PIPELINE_ERROR_COULD_NOT_RENDER: @@ -797,6 +839,7 @@ void WebMediaPlayerImpl::OnPipelineError() { case media::DEMUXER_ERROR_COULD_NOT_PARSE: case media::DEMUXER_ERROR_NO_SUPPORTED_STREAMS: case media::DEMUXER_ERROR_COULD_NOT_CREATE_THREAD: + case media::DATASOURCE_ERROR_URL_NOT_SUPPORTED: // Format error. SetNetworkState(WebMediaPlayer::FormatError); break; @@ -816,9 +859,9 @@ void WebMediaPlayerImpl::OnPipelineError() { Repaint(); } -void WebMediaPlayerImpl::OnNetworkEvent() { +void WebMediaPlayerImpl::OnNetworkEvent(PipelineStatus status) { DCHECK(MessageLoop::current() == main_loop_); - if (pipeline_->GetError() == media::PIPELINE_OK) { + if (status == media::PIPELINE_OK) { if (pipeline_->IsNetworkActive()) { SetNetworkState(WebKit::WebMediaPlayer::Loading); } else { @@ -863,9 +906,9 @@ void WebMediaPlayerImpl::Destroy() { // Make sure to kill the pipeline so there's no more media threads running. // Note: stopping the pipeline might block for a long time. if (pipeline_) { - pipeline_->Stop(NewCallback(this, - &WebMediaPlayerImpl::PipelineStoppedCallback)); - pipeline_stopped_.Wait(); + media::PipelineStatusNotification note; + pipeline_->Stop(note.Callback()); + note.Wait(); } message_loop_factory_.reset(); @@ -878,10 +921,6 @@ void WebMediaPlayerImpl::Destroy() { } } -void WebMediaPlayerImpl::PipelineStoppedCallback() { - pipeline_stopped_.Signal(); -} - WebKit::WebMediaPlayerClient* WebMediaPlayerImpl::GetClient() { DCHECK(MessageLoop::current() == main_loop_); DCHECK(client_); diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h index cadf4d7..0a492db 100644 --- a/webkit/glue/webmediaplayer_impl.h +++ b/webkit/glue/webmediaplayer_impl.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -53,9 +53,9 @@ #ifndef WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ #define WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" #include "base/message_loop.h" -#include "base/ref_counted.h" -#include "base/scoped_ptr.h" #include "base/threading/thread.h" #include "base/synchronization/lock.h" #include "base/synchronization/waitable_event.h" @@ -67,6 +67,7 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.h" #include "ui/gfx/rect.h" #include "ui/gfx/size.h" +#include "webkit/glue/media/web_data_source.h" class GURL; @@ -77,7 +78,6 @@ class WebFrame; namespace webkit_glue { class MediaResourceLoaderBridgeFactory; -class WebDataSource; class WebVideoRenderer; class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, @@ -99,10 +99,10 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, // Methods for Filter -> WebMediaPlayerImpl communication. void Repaint(); void SetVideoRenderer(scoped_refptr<WebVideoRenderer> video_renderer); - void AddDataSource(scoped_refptr<WebDataSource> data_source); + WebDataSourceBuildObserverHack* GetBuildObserver(); // Methods for WebMediaPlayerImpl -> Filter communication. - void Paint(skia::PlatformCanvas* canvas, const gfx::Rect& dest_rect); + void Paint(SkCanvas* canvas, const gfx::Rect& dest_rect); void SetSize(const gfx::Rect& rect); void Detach(); void GetCurrentFrame(scoped_refptr<media::VideoFrame>* frame_out); @@ -111,11 +111,11 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, void AbortDataSources(); // Methods for PipelineImpl -> WebMediaPlayerImpl communication. - void PipelineInitializationCallback(); - void PipelineSeekCallback(); - void PipelineEndedCallback(); - void PipelineErrorCallback(); - void NetworkEventCallback(); + void PipelineInitializationCallback(media::PipelineStatus status); + void PipelineSeekCallback(media::PipelineStatus status); + void PipelineEndedCallback(media::PipelineStatus status); + void PipelineErrorCallback(media::PipelineStatus error); + void NetworkEventCallback(media::PipelineStatus status); // Returns the message loop used by the proxy. MessageLoop* message_loop() { return render_loop_; } @@ -125,23 +125,27 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, virtual ~Proxy(); + // Adds a data source to data_sources_. + void AddDataSource(WebDataSource* data_source); + // Invoke |webmediaplayer_| to perform a repaint. void RepaintTask(); // Notify |webmediaplayer_| that initialization has finished. - void PipelineInitializationTask(); + void PipelineInitializationTask(media::PipelineStatus status); // Notify |webmediaplayer_| that a seek has finished. - void PipelineSeekTask(); + void PipelineSeekTask(media::PipelineStatus status); // Notify |webmediaplayer_| that the media has ended. - void PipelineEndedTask(); + void PipelineEndedTask(media::PipelineStatus status); - // Notify |webmediaplayer_| that a pipeline error has been set. - void PipelineErrorTask(); + // Notify |webmediaplayer_| that a pipeline error has occurred during + // playback. + void PipelineErrorTask(media::PipelineStatus error); // Notify |webmediaplayer_| that there's a network event. - void NetworkEventTask(); + void NetworkEventTask(media::PipelineStatus status); // The render message loop where WebKit lives. MessageLoop* render_loop_; @@ -150,6 +154,7 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, base::Lock data_sources_lock_; typedef std::list<scoped_refptr<WebDataSource> > DataSourceList; DataSourceList data_sources_; + scoped_ptr<WebDataSourceBuildObserverHack> build_observer_; scoped_refptr<WebVideoRenderer> video_renderer_; @@ -203,7 +208,7 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, virtual void setRate(float rate); virtual void setVolume(float volume); virtual void setVisible(bool visible); - virtual bool setAutoBuffer(bool autoBuffer); + virtual void setPreload(WebKit::WebMediaPlayer::Preload preload); virtual bool totalBytesKnown(); virtual const WebKit::WebTimeRanges& buffered(); virtual float maxTimeSeekable() const; @@ -257,15 +262,15 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, void Repaint(); - void OnPipelineInitialize(); + void OnPipelineInitialize(media::PipelineStatus status); - void OnPipelineSeek(); + void OnPipelineSeek(media::PipelineStatus status); - void OnPipelineEnded(); + void OnPipelineEnded(media::PipelineStatus status); - void OnPipelineError(); + void OnPipelineError(media::PipelineStatus error); - void OnNetworkEvent(); + void OnNetworkEvent(media::PipelineStatus status); private: // Helpers that set the network/ready state and notifies the client if @@ -276,10 +281,6 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, // Destroy resources held. void Destroy(); - // Callback executed after |pipeline_| stops which signals Destroy() - // to continue. - void PipelineStoppedCallback(); - // Getter method to |client_|. WebKit::WebMediaPlayerClient* GetClient(); @@ -323,9 +324,6 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, scoped_refptr<Proxy> proxy_; - // Used to block Destroy() until Pipeline::Stop() is completed. - base::WaitableEvent pipeline_stopped_; - #if WEBKIT_USING_CG scoped_ptr<skia::PlatformCanvas> skia_canvas_; #endif diff --git a/webkit/glue/webmenurunner_mac.h b/webkit/glue/webmenurunner_mac.h index eccb1ef..e122526 100644 --- a/webkit/glue/webmenurunner_mac.h +++ b/webkit/glue/webmenurunner_mac.h @@ -9,7 +9,7 @@ #include <vector> -#include "base/scoped_nsobject.h" +#include "base/memory/scoped_nsobject.h" #include "webkit/glue/webmenuitem.h" diff --git a/webkit/glue/webpasswordautocompletelistener_impl.cc b/webkit/glue/webpasswordautocompletelistener_impl.cc deleted file mode 100644 index 20ecf60..0000000 --- a/webkit/glue/webpasswordautocompletelistener_impl.cc +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// This file provides the implementaiton of the password manager's autocomplete -// component. - -#include "webkit/glue/webpasswordautocompletelistener_impl.h" - -#include <vector> - -#include "base/string_util.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" - -using WebKit::WebFrame; -using WebKit::WebView; - -namespace webkit_glue { - -WebInputElementDelegate::WebInputElementDelegate() { -} - -WebInputElementDelegate::WebInputElementDelegate(const WebInputElement& element) - : element_(element) { -} - -WebInputElementDelegate::~WebInputElementDelegate() { -} - -bool WebInputElementDelegate::IsEditable() const { - return element_.isEnabledFormControl() && !element_.hasAttribute("readonly"); -} - -bool WebInputElementDelegate::IsValidValue(const string16& value) { - return element_.isValidValue(value); -} - -void WebInputElementDelegate::SetValue(const string16& value) { - element_.setValue(value); -} - -bool WebInputElementDelegate::IsAutofilled() const { - return element_.isAutofilled(); -} - -void WebInputElementDelegate::SetAutofilled(bool autofilled) { - if (element_.isAutofilled() == autofilled) - return; - element_.setAutofilled(autofilled); - // Notify any changeEvent listeners. - element_.dispatchFormControlChangeEvent(); -} - -void WebInputElementDelegate::SetSelectionRange(size_t start, size_t end) { - element_.setSelectionRange(start, end); -} - -void WebInputElementDelegate::RefreshAutoFillPopup( - const std::vector<string16>& suggestions) { - WebView* webview = element_.document().frame()->view(); - if (webview) { - std::vector<string16> names; - std::vector<string16> labels; - std::vector<string16> icons; - std::vector<int> unique_ids; - - for (size_t i = 0; i < suggestions.size(); ++i) { - names.push_back(suggestions[i]); - labels.push_back(string16()); - icons.push_back(string16()); - unique_ids.push_back(0); - } - - webview->applyAutoFillSuggestions( - element_, names, labels, icons, unique_ids, -1); - } -} - -void WebInputElementDelegate::HideAutoFillPopup() { - WebView* webview = element_.document().frame()->view(); - if (webview) { - webview->hidePopups(); - } -} - -WebPasswordAutocompleteListenerImpl::WebPasswordAutocompleteListenerImpl( - WebInputElementDelegate* username_delegate, - WebInputElementDelegate* password_delegate, - const PasswordFormFillData& data) - : password_delegate_(password_delegate), - username_delegate_(username_delegate), - data_(data) { -} - -WebPasswordAutocompleteListenerImpl::~WebPasswordAutocompleteListenerImpl() { -} - -void WebPasswordAutocompleteListenerImpl::didBlurInputElement( - const WebString& user_input) { - // If this listener exists, its because the password manager had more than - // one match for the password form, which implies it had at least one - // [preferred] username/password pair. -// DCHECK(data_.basic_data.values.size() == 2); - - if (!password_delegate_->IsEditable()) - return; - - string16 user_input16 = user_input; - - // If enabled, set the password field to match the current username. - if (data_.basic_data.fields[0].value() == user_input16) { - if (password_delegate_->IsValidValue(data_.basic_data.fields[1].value())) { - // Preferred username/login is selected. - password_delegate_->SetValue(data_.basic_data.fields[1].value()); - password_delegate_->SetAutofilled(true); - } - } else if (data_.additional_logins.find(user_input16) != - data_.additional_logins.end()) { - if (password_delegate_->IsValidValue( - data_.additional_logins[user_input16])) { - // One of the extra username/logins is selected. - password_delegate_->SetValue(data_.additional_logins[user_input16]); - password_delegate_->SetAutofilled(true); - } - } -} - -void WebPasswordAutocompleteListenerImpl::performInlineAutocomplete( - const WebString& user_input, - bool backspace_or_delete_pressed, - bool show_suggestions) { - // If wait_for_username is true, we only autofill the password when the - // username field is blurred (i.e not inline) with a matching username string - // entered. - if (data_.wait_for_username) - return; - - string16 user_input16 = user_input; - - // The input text is being changed, so any autofilled password is now - // outdated. - username_delegate_->SetAutofilled(false); - if (password_delegate_->IsAutofilled()) { - password_delegate_->SetValue(string16()); - password_delegate_->SetAutofilled(false); - } - - if (show_suggestions && !showSuggestionPopup(user_input16)) - username_delegate_->HideAutoFillPopup(); - - if (backspace_or_delete_pressed) - return; // Don't inline autocomplete when the user deleted something. - - // Look for any suitable matches to current field text. - // TODO(timsteele): The preferred login (in basic_data.values) and additional - // logins could be bundled into the same data structure (possibly even as - // WebCore strings) upon construction of the PasswordAutocompleteListenerImpl - // to simplify lookup and save string conversions (see SetValue) on each - // successful call to OnInlineAutocompleteNeeded. - if (TryToMatch(user_input16, - data_.basic_data.fields[0].value(), - data_.basic_data.fields[1].value())) { - return; - } - - // Scan additional logins for a match. - for (PasswordFormFillData::LoginCollection::iterator it = - data_.additional_logins.begin(); - it != data_.additional_logins.end(); - ++it) { - if (TryToMatch(user_input16, it->first, it->second)) - return; - } -} - -bool WebPasswordAutocompleteListenerImpl::showSuggestionPopup( - const WebString& value) { - std::vector<string16> suggestions; - GetSuggestions(value, &suggestions); - if (suggestions.empty()) - return false; - - username_delegate_->RefreshAutoFillPopup(suggestions); - return true; -} - -bool WebPasswordAutocompleteListenerImpl::TryToMatch(const string16& input, - const string16& username, - const string16& password) { - if (!StartsWith(username, input, false)) - return false; - - if (!username_delegate_->IsValidValue(username)) - return false; - - // Input matches the username, fill in required values. - username_delegate_->SetValue(username); - username_delegate_->SetSelectionRange(input.length(), username.length()); - username_delegate_->SetAutofilled(true); - if (password_delegate_->IsEditable() && - password_delegate_->IsValidValue(password)) { - password_delegate_->SetValue(password); - password_delegate_->SetAutofilled(true); - } - return true; -} - -void WebPasswordAutocompleteListenerImpl::GetSuggestions( - const string16& input, std::vector<string16>* suggestions) { - if (StartsWith(data_.basic_data.fields[0].value(), input, false)) - suggestions->push_back(data_.basic_data.fields[0].value()); - - for (PasswordFormFillData::LoginCollection::iterator it = - data_.additional_logins.begin(); - it != data_.additional_logins.end(); - ++it) { - if (StartsWith(it->first, input, false)) - suggestions->push_back(it->first); - } -} - -} // namespace webkit_glue diff --git a/webkit/glue/webpasswordautocompletelistener_impl.h b/webkit/glue/webpasswordautocompletelistener_impl.h deleted file mode 100644 index 067c6c2..0000000 --- a/webkit/glue/webpasswordautocompletelistener_impl.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// A concrete definition of the DOM autocomplete framework defined by -// autocomplete_input_listener.h, for the password manager. - -#ifndef WEBKIT_GLUE_PASSWORDAUTOCOMPLETELISTENER_IMPL_H_ -#define WEBKIT_GLUE_PASSWORDAUTOCOMPLETELISTENER_IMPL_H_ - -#include "base/basictypes.h" -#include "base/scoped_ptr.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebPasswordAutocompleteListener.h" -#include "webkit/glue/password_form_dom_manager.h" - -using WebKit::WebInputElement; -using WebKit::WebString; - -namespace webkit_glue { - -// A proxy interface to a WebInputElement for inline autocomplete. The proxy -// is overridden by webpasswordautocompletelistener_unittest. -class WebInputElementDelegate { - public: - WebInputElementDelegate(); - WebInputElementDelegate(const WebInputElement& element); - virtual ~WebInputElementDelegate(); - - // These are virtual to support unit testing. - virtual bool IsEditable() const; - virtual bool IsValidValue(const string16& value); - virtual void SetValue(const string16& value); - virtual bool IsAutofilled() const; - virtual void SetAutofilled(bool autofilled); - virtual void SetSelectionRange(size_t start, size_t end); - virtual void RefreshAutoFillPopup(const std::vector<string16>& suggestions); - virtual void HideAutoFillPopup(); - - private: - // The underlying DOM element we're wrapping. - WebInputElement element_; - - DISALLOW_COPY_AND_ASSIGN(WebInputElementDelegate); -}; - -class WebPasswordAutocompleteListenerImpl : - public WebKit::WebPasswordAutocompleteListener { - public: - WebPasswordAutocompleteListenerImpl( - WebInputElementDelegate* username_element, - WebInputElementDelegate* password_element, - const PasswordFormFillData& data); - virtual ~WebPasswordAutocompleteListenerImpl(); - - // WebKit::PasswordAutocompleteListener methods: - virtual void didBlurInputElement(const WebString& user_input); - virtual void performInlineAutocomplete(const WebString& user_input, - bool backspace_or_delete_pressed, - bool show_suggestions); - virtual bool showSuggestionPopup(const WebString& value); - - private: - // Check if the input string resembles a potential matching login - // (username/password) and if so, match them up by autocompleting the edit - // delegates. - bool TryToMatch(const string16& input, - const string16& username, - const string16& password); - - // Scan |data_| for prefix matches of |input| and add each to |suggestions|. - void GetSuggestions(const string16& input, - std::vector<string16>* suggestions); - - // Access to password field to autocomplete on blur/username updates. - scoped_ptr<WebInputElementDelegate> password_delegate_; - scoped_ptr<WebInputElementDelegate> username_delegate_; - - // Contains the extra logins for matching on delta/blur. - PasswordFormFillData data_; - - DISALLOW_COPY_AND_ASSIGN(WebPasswordAutocompleteListenerImpl); -}; - -} // webkit_glue - -#endif // WEBKIT_GLUE_PASSWORD_AUTOCOMPLETE_LISTENER_H_ diff --git a/webkit/glue/webpasswordautocompletelistener_unittest.cc b/webkit/glue/webpasswordautocompletelistener_unittest.cc deleted file mode 100644 index 2eeb890..0000000 --- a/webkit/glue/webpasswordautocompletelistener_unittest.cc +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// The PasswordManagerAutocompleteTests in this file test only the -// PasswordAutocompleteListener class implementation (and not any of the -// higher level dom autocomplete framework). - -#include <string> - -#include "base/string_util.h" -#include "base/utf_string_conversions.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "webkit/glue/form_field.h" -#include "webkit/glue/webpasswordautocompletelistener_impl.h" - -using WebKit::WebString; -using webkit_glue::FormField; -using webkit_glue::PasswordFormDomManager; -using webkit_glue::PasswordFormFillData; -using webkit_glue::WebInputElementDelegate; -using webkit_glue::WebPasswordAutocompleteListenerImpl; - -class TestWebInputElementDelegate : public WebInputElementDelegate { - public: - TestWebInputElementDelegate() - : WebInputElementDelegate(), - selection_start_(0), - selection_end_(0), - is_editable_(true), - is_valid_(true), - is_autofilled_(false) { - } - - // Override those methods we implicitly invoke in the tests. - virtual bool IsEditable() const { - return is_editable_; - } - - virtual bool IsValidValue(const string16& value) { - return is_valid_; - } - - virtual void SetValue(const string16& value) { - value_ = value; - } - - virtual bool IsAutofilled() const { return is_autofilled_; } - - virtual void SetAutofilled(bool autofilled) { - is_autofilled_ = autofilled; - } - - virtual void SetSelectionRange(size_t start, size_t end) { - selection_start_ = start; - selection_end_ = end; - } - - // Testing-only methods. - void set_is_editable(bool editable) { - is_editable_ = editable; - } - - void set_is_valid(bool valid) { - is_valid_ = valid; - } - - string16 value() const { - return value_; - } - - size_t selection_start() const { - return selection_start_; - } - - size_t selection_end() const { - return selection_end_; - } - - private: - string16 value_; - size_t selection_start_; - size_t selection_end_; - bool is_editable_; - bool is_valid_; - bool is_autofilled_; -}; - -namespace { -class PasswordManagerAutocompleteTests : public testing::Test { - public: - PasswordManagerAutocompleteTests() - : username_delegate_(NULL), - password_delegate_(NULL) { - } - - virtual void SetUp() { - // Add a preferred login and an additional login to the FillData. - username1_ = ASCIIToUTF16("alice"); - password1_ = ASCIIToUTF16("password"); - username2_ = ASCIIToUTF16("bob"); - password2_ = ASCIIToUTF16("bobsyouruncle"); - data_.basic_data.fields.push_back(FormField(string16(), - string16(), - username1_, - string16(), - 0, - false)); - data_.basic_data.fields.push_back(FormField(string16(), - string16(), - password1_, - string16(), - 0, - false)); - data_.additional_logins[username2_] = password2_; - - username_delegate_ = new TestWebInputElementDelegate(); - password_delegate_ = new TestWebInputElementDelegate(); - - testing::Test::SetUp(); - } - - protected: - // Create the WebPasswordAutocompleteListener associated with - // username_delegate_ and password_delegate_, should be called only once at - // the begining of the test. - WebKit::WebPasswordAutocompleteListener* CreateListener( - bool wait_for_username) { - DCHECK(!listener_.get()); - data_.wait_for_username = wait_for_username; - listener_.reset(new WebPasswordAutocompleteListenerImpl(username_delegate_, - password_delegate_, - data_)); - return listener_.get(); - } - - string16 username1_; - string16 password1_; - string16 username2_; - string16 password2_; - PasswordFormFillData data_; - TestWebInputElementDelegate* username_delegate_; - TestWebInputElementDelegate* password_delegate_; - - private: - scoped_ptr<WebPasswordAutocompleteListenerImpl> listener_; -}; - -TEST_F(PasswordManagerAutocompleteTests, OnBlur) { - WebKit::WebPasswordAutocompleteListener* listener = CreateListener(false); - - // Make the password field read-only. - password_delegate_->set_is_editable(false); - // Simulate a blur event on the username field, but r/o password won't fill. - listener->didBlurInputElement(username1_); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - password_delegate_->set_is_editable(true); - - // Simulate a blur event on the username field and expect a password autofill. - listener->didBlurInputElement(username1_); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - - // Now the user goes back and changes the username to something we don't - // have saved. The password should remain unchanged. - listener->didBlurInputElement(ASCIIToUTF16("blahblahblah")); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - - // Now they type in the additional login username. - listener->didBlurInputElement(username2_); - EXPECT_EQ(password2_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); -} - -TEST_F(PasswordManagerAutocompleteTests, OnInlineAutocompleteNeeded) { - WebKit::WebPasswordAutocompleteListener* listener = CreateListener(false); - - // Simulate the user typing in the first letter of 'alice', a stored username. - listener->performInlineAutocomplete(ASCIIToUTF16("a"), false, false); - // Both the username and password delegates should reflect selection - // of the stored login. - EXPECT_EQ(username1_, username_delegate_->value()); - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - // And the selection should have been set to 'lice', the last 4 letters. - EXPECT_EQ(1U, username_delegate_->selection_start()); - EXPECT_EQ(username1_.length(), username_delegate_->selection_end()); - // And both fields should have the autofill style. - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - - // Now the user types the next letter of the same username, 'l'. - listener->performInlineAutocomplete(ASCIIToUTF16("al"), false, false); - // Now the fields should have the same value, but the selection should have a - // different start value. - EXPECT_EQ(username1_, username_delegate_->value()); - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - EXPECT_EQ(2U, username_delegate_->selection_start()); - EXPECT_EQ(username1_.length(), username_delegate_->selection_end()); - - // Now lets say the user goes astray from the stored username and types - // the letter 'f', spelling 'alf'. We don't know alf (that's just sad), - // so in practice the username should no longer be 'alice' and the selected - // range should be empty. In our case, when the autocomplete code doesn't - // know the text, it won't set the value or the selection and hence our - // delegate methods won't get called. The WebCore::HTMLInputElement's value - // and selection would be set directly by WebCore in practice. - - // Reset the delegate's test state so we can determine what, if anything, - // was set during performInlineAutocomplete. - username_delegate_->SetValue(string16()); - username_delegate_->SetSelectionRange(0, 0); - listener->performInlineAutocomplete(ASCIIToUTF16("alf"), false, false); - EXPECT_EQ(0U, username_delegate_->selection_start()); - EXPECT_EQ(0U, username_delegate_->selection_end()); - // Username should not have been filled by us. - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - - // Ok, so now the user removes all the text and enters the letter 'b'. - listener->performInlineAutocomplete(ASCIIToUTF16("b"), false, false); - // The username and password fields should match the 'bob' entry. - EXPECT_EQ(username2_, username_delegate_->value()); - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password2_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - EXPECT_EQ(1U, username_delegate_->selection_start()); - EXPECT_EQ(username2_.length(), username_delegate_->selection_end()); -} - -TEST_F(PasswordManagerAutocompleteTests, TestWaitUsername) { - // If we had an action authority mismatch (for example), we don't want to - // automatically autofill anything without some user interaction first. - // We require an explicit blur on the username field, and that a valid - // matching username is in the field, before we autofill passwords. - WebKit::WebPasswordAutocompleteListener* listener = CreateListener(true); - - // In all cases, username_delegate should remain empty because we should - // never modify it when wait_for_username is true; only the user can by - // typing into (in real life) the HTMLInputElement. - password_delegate_->SetValue(string16()); - listener->performInlineAutocomplete(ASCIIToUTF16("a"), false, false); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - listener->performInlineAutocomplete(ASCIIToUTF16("al"), false, false); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - listener->performInlineAutocomplete(ASCIIToUTF16("alice"), false, false); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - - listener->didBlurInputElement(ASCIIToUTF16("a")); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - listener->didBlurInputElement(ASCIIToUTF16("ali")); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - - // Blur with 'alice' should allow password autofill. - listener->didBlurInputElement(ASCIIToUTF16("alice")); - EXPECT_TRUE(username_delegate_->value().empty()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); -} - -// Tests that editing the password clears the autofilled password field. -TEST_F(PasswordManagerAutocompleteTests, TestPasswordClearOnEdit) { - WebKit::WebPasswordAutocompleteListener* listener = CreateListener(false); - - // User enters a known login. - listener->performInlineAutocomplete(ASCIIToUTF16("alice"), false, false); - // We are autofilled. - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - - // User modifies the login name to an unknown one. - listener->performInlineAutocomplete(ASCIIToUTF16("alicia"), false, false); - // We should not be autofilled anymore and the password should have been - // cleared. - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - EXPECT_TRUE(password_delegate_->value().empty()); -} - -// Tests that filling with invalid value for input element does not fill. -TEST_F(PasswordManagerAutocompleteTests, TestValidValueConditions) { - WebKit::WebPasswordAutocompleteListener* listener = CreateListener(false); - - // User enters a known login that validates ok. - username_delegate_->set_is_valid(true); - password_delegate_->set_is_valid(true); - username_delegate_->SetValue(string16()); - password_delegate_->SetValue(string16()); - listener->performInlineAutocomplete(ASCIIToUTF16("alice"), false, false); - // We are autofilled. - EXPECT_EQ(username1_, username_delegate_->value()); - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(password1_, password_delegate_->value()); - EXPECT_TRUE(password_delegate_->IsAutofilled()); - - // User enters a known login that does not validate. - username_delegate_->set_is_valid(false); - password_delegate_->set_is_valid(true); - username_delegate_->SetValue(string16()); - password_delegate_->SetValue(string16()); - listener->performInlineAutocomplete(ASCIIToUTF16("alice"), false, false); - // We are not autofilled. - EXPECT_EQ(string16(), username_delegate_->value()); - EXPECT_FALSE(username_delegate_->IsAutofilled()); - EXPECT_EQ(string16(), password_delegate_->value()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); - - // User enters a known login that validates ok, but password does not. - username_delegate_->set_is_valid(true); - password_delegate_->set_is_valid(false); - username_delegate_->SetValue(string16()); - password_delegate_->SetValue(string16()); - listener->performInlineAutocomplete(ASCIIToUTF16("alice"), false, false); - // We are autofilled. - EXPECT_EQ(username1_, username_delegate_->value()); - EXPECT_TRUE(username_delegate_->IsAutofilled()); - EXPECT_EQ(string16(), password_delegate_->value()); - EXPECT_FALSE(password_delegate_->IsAutofilled()); -} - -} // namespace diff --git a/webkit/glue/webpreferences.cc b/webkit/glue/webpreferences.cc index ab359a2..a7817a1 100644 --- a/webkit/glue/webpreferences.cc +++ b/webkit/glue/webpreferences.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -68,10 +68,12 @@ WebPreferences::WebPreferences() show_fps_counter(false), asynchronous_spell_checking_enabled(true), accelerated_compositing_enabled(false), + force_compositing_mode(false), composite_to_texture_enabled(false), accelerated_layers_enabled(false), accelerated_video_enabled(false), accelerated_2d_canvas_enabled(false), + accelerated_drawing_enabled(false), accelerated_plugins_enabled(false), memory_info_enabled(false), interactive_form_validation_enabled(true), @@ -154,9 +156,7 @@ void WebPreferences::Apply(WebView* web_view) const { // Enable experimental WebGL support if requested on command line // and support is compiled in. - bool enable_webgl = - WebRuntimeFeatures::isWebGLEnabled() && experimental_webgl_enabled; - settings->setExperimentalWebGLEnabled(enable_webgl); + settings->setExperimentalWebGLEnabled(experimental_webgl_enabled); // Disable GL multisampling if requested on command line. settings->setOpenGLMultisamplingEnabled(gl_multisampling_enabled); @@ -175,12 +175,18 @@ void WebPreferences::Apply(WebView* web_view) const { // Enable gpu-accelerated compositing if requested on the command line. settings->setAcceleratedCompositingEnabled(accelerated_compositing_enabled); + // Always enter compositing if requested on the command line. + settings->setForceCompositingMode(force_compositing_mode); + // Enable composite to offscreen texture if requested on the command line. settings->setCompositeToTextureEnabled(composite_to_texture_enabled); // Enable gpu-accelerated 2d canvas if requested on the command line. settings->setAccelerated2dCanvasEnabled(accelerated_2d_canvas_enabled); + // Enable gpu-accelerated drawing if requested on the command line. + settings->setAcceleratedDrawingEnabled(accelerated_drawing_enabled); + // Enabling accelerated layers from the command line enabled accelerated // 3D CSS, Video, and Animations. settings->setAcceleratedCompositingFor3DTransformsEnabled( @@ -196,7 +202,7 @@ void WebPreferences::Apply(WebView* web_view) const { // WebGL and accelerated 2D canvas are always gpu composited. settings->setAcceleratedCompositingForCanvasEnabled( - enable_webgl || accelerated_2d_canvas_enabled); + experimental_webgl_enabled || accelerated_2d_canvas_enabled); // Enable memory info reporting to page if requested on the command line. settings->setMemoryInfoEnabled(memory_info_enabled); diff --git a/webkit/glue/webpreferences.h b/webkit/glue/webpreferences.h index 0d37d39..f2ab807 100644 --- a/webkit/glue/webpreferences.h +++ b/webkit/glue/webpreferences.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -74,10 +74,12 @@ struct WebPreferences { bool show_fps_counter; bool asynchronous_spell_checking_enabled; bool accelerated_compositing_enabled; + bool force_compositing_mode; bool composite_to_texture_enabled; bool accelerated_layers_enabled; bool accelerated_video_enabled; bool accelerated_2d_canvas_enabled; + bool accelerated_drawing_enabled; bool accelerated_plugins_enabled; bool memory_info_enabled; bool interactive_form_validation_enabled; diff --git a/webkit/glue/websocketstreamhandle_bridge.h b/webkit/glue/websocketstreamhandle_bridge.h index ee897fd..d051712 100644 --- a/webkit/glue/websocketstreamhandle_bridge.h +++ b/webkit/glue/websocketstreamhandle_bridge.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,7 +8,7 @@ #include <vector> #include "base/basictypes.h" -#include "base/ref_counted.h" +#include "base/memory/ref_counted.h" class GURL; diff --git a/webkit/glue/websocketstreamhandle_impl.cc b/webkit/glue/websocketstreamhandle_impl.cc index d1c7ba0..9e26896 100644 --- a/webkit/glue/websocketstreamhandle_impl.cc +++ b/webkit/glue/websocketstreamhandle_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -10,8 +10,8 @@ #include "base/compiler_specific.h" #include "base/logging.h" -#include "base/ref_counted.h" -#include "base/scoped_ptr.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebData.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSocketStreamHandleClient.h" diff --git a/webkit/glue/websocketstreamhandle_impl.h b/webkit/glue/websocketstreamhandle_impl.h index 81ae68c..e018388 100644 --- a/webkit/glue/websocketstreamhandle_impl.h +++ b/webkit/glue/websocketstreamhandle_impl.h @@ -1,11 +1,11 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBKIT_GLUE_WEBSOCKETSTREAMHANDLE_IMPL_H_ #define WEBKIT_GLUE_WEBSOCKETSTREAMHANDLE_IMPL_H_ -#include "base/ref_counted.h" +#include "base/memory/ref_counted.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSocketStreamHandle.h" namespace webkit_glue { diff --git a/webkit/glue/webthemeengine_impl_linux.cc b/webkit/glue/webthemeengine_impl_linux.cc index 6cdda79..dde3f50 100644 --- a/webkit/glue/webthemeengine_impl_linux.cc +++ b/webkit/glue/webthemeengine_impl_linux.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,7 +7,7 @@ #include "skia/ext/platform_canvas.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" -#include "ui/gfx/native_theme_linux.h" +#include "ui/gfx/native_theme.h" using WebKit::WebCanvas; using WebKit::WebColor; @@ -19,61 +19,61 @@ static gfx::Rect WebRectToRect(const WebRect& rect) { return gfx::Rect(rect.x, rect.y, rect.width, rect.height); } -static gfx::NativeThemeLinux::Part NativeThemePart( +static gfx::NativeTheme::Part NativeThemePart( WebKit::WebThemeEngine::Part part) { switch (part) { case WebKit::WebThemeEngine::PartScrollbarDownArrow: - return gfx::NativeThemeLinux::kScrollbarDownArrow; + return gfx::NativeTheme::kScrollbarDownArrow; case WebKit::WebThemeEngine::PartScrollbarLeftArrow: - return gfx::NativeThemeLinux::kScrollbarLeftArrow; + return gfx::NativeTheme::kScrollbarLeftArrow; case WebKit::WebThemeEngine::PartScrollbarRightArrow: - return gfx::NativeThemeLinux::kScrollbarRightArrow; + return gfx::NativeTheme::kScrollbarRightArrow; case WebKit::WebThemeEngine::PartScrollbarUpArrow: - return gfx::NativeThemeLinux::kScrollbarUpArrow; + return gfx::NativeTheme::kScrollbarUpArrow; case WebKit::WebThemeEngine::PartScrollbarHorizontalThumb: - return gfx::NativeThemeLinux::kScrollbarHorizontalThumb; + return gfx::NativeTheme::kScrollbarHorizontalThumb; case WebKit::WebThemeEngine::PartScrollbarVerticalThumb: - return gfx::NativeThemeLinux::kScrollbarVerticalThumb; + return gfx::NativeTheme::kScrollbarVerticalThumb; case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: - return gfx::NativeThemeLinux::kScrollbarHorizontalTrack; + return gfx::NativeTheme::kScrollbarHorizontalTrack; case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: - return gfx::NativeThemeLinux::kScrollbarVerticalTrack; + return gfx::NativeTheme::kScrollbarVerticalTrack; case WebKit::WebThemeEngine::PartCheckbox: - return gfx::NativeThemeLinux::kCheckbox; + return gfx::NativeTheme::kCheckbox; case WebKit::WebThemeEngine::PartRadio: - return gfx::NativeThemeLinux::kRadio; + return gfx::NativeTheme::kRadio; case WebKit::WebThemeEngine::PartButton: - return gfx::NativeThemeLinux::kPushButton; + return gfx::NativeTheme::kPushButton; case WebKit::WebThemeEngine::PartTextField: - return gfx::NativeThemeLinux::kTextField; + return gfx::NativeTheme::kTextField; case WebKit::WebThemeEngine::PartMenuList: - return gfx::NativeThemeLinux::kMenuList; + return gfx::NativeTheme::kMenuList; case WebKit::WebThemeEngine::PartSliderTrack: - return gfx::NativeThemeLinux::kSliderTrack; + return gfx::NativeTheme::kSliderTrack; case WebKit::WebThemeEngine::PartSliderThumb: - return gfx::NativeThemeLinux::kSliderThumb; + return gfx::NativeTheme::kSliderThumb; case WebKit::WebThemeEngine::PartInnerSpinButton: - return gfx::NativeThemeLinux::kInnerSpinButton; + return gfx::NativeTheme::kInnerSpinButton; case WebKit::WebThemeEngine::PartProgressBar: - return gfx::NativeThemeLinux::kProgressBar; + return gfx::NativeTheme::kProgressBar; default: - return gfx::NativeThemeLinux::kScrollbarDownArrow; + return gfx::NativeTheme::kScrollbarDownArrow; } } -static gfx::NativeThemeLinux::State NativeThemeState( +static gfx::NativeTheme::State NativeThemeState( WebKit::WebThemeEngine::State state) { switch (state) { case WebKit::WebThemeEngine::StateDisabled: - return gfx::NativeThemeLinux::kDisabled; + return gfx::NativeTheme::kDisabled; case WebKit::WebThemeEngine::StateHover: - return gfx::NativeThemeLinux::kHovered; + return gfx::NativeTheme::kHovered; case WebKit::WebThemeEngine::StateNormal: - return gfx::NativeThemeLinux::kNormal; + return gfx::NativeTheme::kNormal; case WebKit::WebThemeEngine::StatePressed: - return gfx::NativeThemeLinux::kPressed; + return gfx::NativeTheme::kPressed; default: - return gfx::NativeThemeLinux::kDisabled; + return gfx::NativeTheme::kDisabled; } } @@ -81,7 +81,7 @@ static void GetNativeThemeExtraParams( WebKit::WebThemeEngine::Part part, WebKit::WebThemeEngine::State state, const WebKit::WebThemeEngine::ExtraParams* extra_params, - gfx::NativeThemeLinux::ExtraParams* native_theme_extra_params) { + gfx::NativeTheme::ExtraParams* native_theme_extra_params) { switch (part) { case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: @@ -160,7 +160,7 @@ static void GetNativeThemeExtraParams( } WebKit::WebSize WebThemeEngineImpl::getSize(WebKit::WebThemeEngine::Part part) { - return gfx::NativeThemeLinux::instance()->GetPartSize(NativeThemePart(part)); + return gfx::NativeTheme::instance()->GetPartSize(NativeThemePart(part)); } void WebThemeEngineImpl::paint( @@ -169,10 +169,10 @@ void WebThemeEngineImpl::paint( WebKit::WebThemeEngine::State state, const WebKit::WebRect& rect, const WebKit::WebThemeEngine::ExtraParams* extra_params) { - gfx::NativeThemeLinux::ExtraParams native_theme_extra_params; + gfx::NativeTheme::ExtraParams native_theme_extra_params; GetNativeThemeExtraParams( part, state, extra_params, &native_theme_extra_params); - gfx::NativeThemeLinux::instance()->Paint( + gfx::NativeTheme::instance()->Paint( canvas, NativeThemePart(part), NativeThemeState(state), diff --git a/webkit/glue/webthemeengine_impl_win.cc b/webkit/glue/webthemeengine_impl_win.cc index a6344b6..5f5d089 100644 --- a/webkit/glue/webthemeengine_impl_win.cc +++ b/webkit/glue/webthemeengine_impl_win.cc @@ -1,9 +1,12 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "webkit/glue/webthemeengine_impl_win.h" +#include <vsstyle.h> // To convert to gfx::NativeTheme::State + +#include "base/logging.h" #include "skia/ext/platform_canvas.h" #include "skia/ext/skia_utils_win.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" @@ -24,119 +27,462 @@ static RECT WebRectToRECT(const WebRect& rect) { return result; } +static gfx::NativeTheme::State WebButtonStateToGfx( + int part, + int state, + gfx::NativeTheme::ButtonExtraParams* extra) { + gfx::NativeTheme::State gfx_state = gfx::NativeTheme::kNormal; + + if (part == BP_PUSHBUTTON) { + switch(state) { + case PBS_NORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case PBS_HOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case PBS_PRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case PBS_DISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case PBS_DEFAULTED: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = true; + break; + case PBS_DEFAULTED_ANIMATING: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = true; + break; + default: + NOTREACHED() << "Invalid state: " << state; + } + } else if (part == BP_RADIOBUTTON) { + switch(state) { + case RBS_UNCHECKEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_UNCHECKEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_UNCHECKEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_UNCHECKEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_CHECKEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_CHECKEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_CHECKEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case RBS_CHECKEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + default: + NOTREACHED() << "Invalid state: " << state; + break; + } + } else if (part == BP_CHECKBOX) { + switch(state) { + case CBS_UNCHECKEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_UNCHECKEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_UNCHECKEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_UNCHECKEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_CHECKEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_CHECKEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_CHECKEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_CHECKEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = true; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_MIXEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = true; + extra->is_default = false; + break; + case CBS_MIXEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = true; + extra->is_default = false; + break; + case CBS_MIXEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = true; + extra->is_default = false; + break; + case CBS_MIXEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = true; + extra->is_default = false; + break; + case CBS_IMPLICITNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_IMPLICITHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_IMPLICITPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_IMPLICITDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_EXCLUDEDNORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_EXCLUDEDHOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_EXCLUDEDPRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CBS_EXCLUDEDDISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + default: + NOTREACHED() << "Invalid state: " << state; + break; + } + } else if (part == BP_GROUPBOX) { + switch(state) { + case GBS_NORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case GBS_DISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + default: + NOTREACHED() << "Invalid state: " << state; + break; + } + } else if (part == BP_COMMANDLINK) { + switch(state) { + case CMDLS_NORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLS_HOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLS_PRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLS_DISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLS_DEFAULTED: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = true; + break; + case CMDLS_DEFAULTED_ANIMATING: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = true; + break; + default: + NOTREACHED() << "Invalid state: " << state; + break; + } + } else if (part == BP_COMMANDLINKGLYPH) { + switch(state) { + case CMDLGS_NORMAL: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLGS_HOT: + gfx_state = gfx::NativeTheme::kHovered; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLGS_PRESSED: + gfx_state = gfx::NativeTheme::kPressed; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLGS_DISABLED: + gfx_state = gfx::NativeTheme::kDisabled; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = false; + break; + case CMDLGS_DEFAULTED: + gfx_state = gfx::NativeTheme::kNormal; + extra->checked = false; + extra->indeterminate = false; + extra->is_default = true; + break; + default: + NOTREACHED() << "Invalid state: " << state; + break; + } + } + return gfx_state; +} + void WebThemeEngineImpl::paintButton( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); - - RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintButton( - hdc, part, state, classic_state, &native_rect); - - canvas->endPlatformPaint(); + gfx::NativeTheme::Part native_part = gfx::NativeTheme::kPushButton; + switch(part) { + case BP_PUSHBUTTON: + native_part = gfx::NativeTheme::kPushButton; + break; + case BP_CHECKBOX: + native_part = gfx::NativeTheme::kCheckbox; + break; + case BP_RADIOBUTTON: + native_part = gfx::NativeTheme::kRadio; + break; + default: + break; + } + gfx::NativeTheme::ExtraParams extra; + gfx::NativeTheme::State native_state = WebButtonStateToGfx(part, state, + &extra.button); + extra.button.classic_state = classic_state; + gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); + gfx::NativeTheme::instance()->Paint(canvas, native_part, + native_state, gfx_rect, extra); } void WebThemeEngineImpl::paintMenuList( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintMenuList( + gfx::NativeThemeWin::instance()->PaintMenuList( hdc, part, state, classic_state, &native_rect); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintScrollbarArrow( WebCanvas* canvas, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintScrollbarArrow( + gfx::NativeThemeWin::instance()->PaintScrollbarArrow( hdc, state, classic_state, &native_rect); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintScrollbarThumb( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintScrollbarThumb( + gfx::NativeThemeWin::instance()->PaintScrollbarThumb( hdc, part, state, classic_state, &native_rect); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintScrollbarTrack( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect, const WebRect& align_rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); RECT native_align_rect = WebRectToRECT(align_rect); - gfx::NativeTheme::instance()->PaintScrollbarTrack( + gfx::NativeThemeWin::instance()->PaintScrollbarTrack( hdc, part, state, classic_state, &native_rect, &native_align_rect, canvas); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintSpinButton( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintSpinButton( + gfx::NativeThemeWin::instance()->PaintSpinButton( hdc, part, state, classic_state, &native_rect); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintTextField( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect, WebColor color, bool fill_content_area, bool draw_edges) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); COLORREF c = skia::SkColorToCOLORREF(color); - gfx::NativeTheme::instance()->PaintTextField( + gfx::NativeThemeWin::instance()->PaintTextField( hdc, part, state, classic_state, &native_rect, c, fill_content_area, draw_edges); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintTrackbar( WebCanvas* canvas, int part, int state, int classic_state, const WebRect& rect) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); RECT native_rect = WebRectToRECT(rect); - gfx::NativeTheme::instance()->PaintTrackbar( + gfx::NativeThemeWin::instance()->PaintTrackbar( hdc, part, state, classic_state, &native_rect, canvas); - canvas->endPlatformPaint(); + skia::EndPlatformPaint(canvas); } void WebThemeEngineImpl::paintProgressBar( WebCanvas* canvas, const WebRect& barRect, const WebRect& valueRect, bool determinate, double animatedSeconds) { - HDC hdc = canvas->beginPlatformPaint(); + HDC hdc = skia::BeginPlatformPaint(canvas); + RECT native_bar_rect = WebRectToRECT(barRect); RECT native_value_rect = WebRectToRECT(valueRect); - gfx::NativeTheme::instance()->PaintProgressBar( + gfx::NativeThemeWin::instance()->PaintProgressBar( hdc, &native_bar_rect, &native_value_rect, determinate, animatedSeconds, canvas); - canvas->endPlatformPaint(); + + skia::EndPlatformPaint(canvas); } } // namespace webkit_glue diff --git a/webkit/glue/weburlloader_impl.cc b/webkit/glue/weburlloader_impl.cc index b86e232..c9df4a8 100644 --- a/webkit/glue/weburlloader_impl.cc +++ b/webkit/glue/weburlloader_impl.cc @@ -7,9 +7,9 @@ #include "webkit/glue/weburlloader_impl.h" #include "base/file_path.h" +#include "base/memory/scoped_ptr.h" #include "base/message_loop.h" #include "base/process_util.h" -#include "base/scoped_ptr.h" #include "base/string_util.h" #include "base/time.h" #include "net/base/data_url.h" @@ -135,6 +135,8 @@ ResourceType::Type FromTargetType(WebURLRequest::TargetType type) { return ResourceType::SHARED_WORKER; case WebURLRequest::TargetIsPrefetch: return ResourceType::PREFETCH; + case WebURLRequest::TargetIsFavicon: + return ResourceType::FAVICON; default: NOTREACHED(); return ResourceType::SUB_RESOURCE; @@ -157,6 +159,8 @@ bool GetInfoFromDataURL(const GURL& url, info->charset.swap(charset); info->security_info.clear(); info->content_length = -1; + info->encoded_data_length = 0; + info->load_timing.base_time = Time::Now(); return true; } @@ -194,22 +198,24 @@ void PopulateURLResponse( response->setConnectionReused(info.connection_reused); response->setDownloadFilePath(FilePathToWebString(info.download_file_path)); - WebURLLoadTiming timing; - timing.initialize(); const ResourceLoadTimingInfo& timing_info = info.load_timing; - timing.setRequestTime(timing_info.base_time.ToDoubleT()); - timing.setProxyStart(timing_info.proxy_start); - timing.setProxyEnd(timing_info.proxy_end); - timing.setDNSStart(timing_info.dns_start); - timing.setDNSEnd(timing_info.dns_end); - timing.setConnectStart(timing_info.connect_start); - timing.setConnectEnd(timing_info.connect_end); - timing.setSSLStart(timing_info.ssl_start); - timing.setSSLEnd(timing_info.ssl_end); - timing.setSendStart(timing_info.send_start); - timing.setSendEnd(timing_info.send_end); - timing.setReceiveHeadersEnd(timing_info.receive_headers_end); - response->setLoadTiming(timing); + if (!timing_info.base_time.is_null()) { + WebURLLoadTiming timing; + timing.initialize(); + timing.setRequestTime(timing_info.base_time.ToDoubleT()); + timing.setProxyStart(timing_info.proxy_start); + timing.setProxyEnd(timing_info.proxy_end); + timing.setDNSStart(timing_info.dns_start); + timing.setDNSEnd(timing_info.dns_end); + timing.setConnectStart(timing_info.connect_start); + timing.setConnectEnd(timing_info.connect_end); + timing.setSSLStart(timing_info.ssl_start); + timing.setSSLEnd(timing_info.ssl_end); + timing.setSendStart(timing_info.send_start); + timing.setSendEnd(timing_info.send_end); + timing.setReceiveHeadersEnd(timing_info.receive_headers_end); + response->setLoadTiming(timing); + } if (info.devtools_info.get()) { WebHTTPLoadInfo load_info; @@ -217,6 +223,7 @@ void PopulateURLResponse( load_info.setHTTPStatusCode(info.devtools_info->http_status_code); load_info.setHTTPStatusText(WebString::fromUTF8( info.devtools_info->http_status_text)); + load_info.setEncodedDataLength(info.encoded_data_length); const HeadersVector& request_headers = info.devtools_info->request_headers; for (HeadersVector::const_iterator it = request_headers.begin(); @@ -294,7 +301,9 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context>, GURL* new_first_party_for_cookies); virtual void OnReceivedResponse(const ResourceResponseInfo& info); virtual void OnDownloadedData(int len); - virtual void OnReceivedData(const char* data, int len); + virtual void OnReceivedData(const char* data, + int data_length, + int encoded_data_length); virtual void OnReceivedCachedMetadata(const char* data, int len); virtual void OnCompletedRequest(const net::URLRequestStatus& status, const std::string& security_info, @@ -590,23 +599,25 @@ void WebURLLoaderImpl::Context::OnDownloadedData(int len) { client_->didDownloadData(loader_, len); } -void WebURLLoaderImpl::Context::OnReceivedData(const char* data, int len) { +void WebURLLoaderImpl::Context::OnReceivedData(const char* data, + int data_length, + int encoded_data_length) { if (!client_) return; // Temporary logging, see site_isolation_metrics.h/cc. - SiteIsolationMetrics::SniffCrossOriginHTML(response_url_, data, len); + SiteIsolationMetrics::SniffCrossOriginHTML(response_url_, data, data_length); if (ftp_listing_delegate_.get()) { // The FTP listing delegate will make the appropriate calls to // client_->didReceiveData and client_->didReceiveResponse. - ftp_listing_delegate_->OnReceivedData(data, len); + ftp_listing_delegate_->OnReceivedData(data, data_length); } else if (multipart_delegate_.get()) { // The multipart delegate will make the appropriate calls to // client_->didReceiveData and client_->didReceiveResponse. - multipart_delegate_->OnReceivedData(data, len); + multipart_delegate_->OnReceivedData(data, data_length, encoded_data_length); } else { - client_->didReceiveData(loader_, data, len); + client_->didReceiveData(loader_, data, data_length, encoded_data_length); } } @@ -693,7 +704,7 @@ void WebURLLoaderImpl::Context::HandleDataURL() { if (GetInfoFromDataURL(request_.url(), &info, &data, &status)) { OnReceivedResponse(info); if (!data.empty()) - OnReceivedData(data.data(), data.size()); + OnReceivedData(data.data(), data.size(), 0); } OnCompletedRequest(status, info.security_info, base::Time::Now()); diff --git a/webkit/glue/weburlloader_impl.h b/webkit/glue/weburlloader_impl.h index 9a39911..44e4e1e 100644 --- a/webkit/glue/weburlloader_impl.h +++ b/webkit/glue/weburlloader_impl.h @@ -1,11 +1,11 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this +// Copyright (c) 2011 The Chromium Authors. All rights reserved. Use of this // source code is governed by a BSD-style license that can be found in the // LICENSE file. #ifndef WEBKIT_GLUE_WEBURLLOADER_IMPL_H_ #define WEBKIT_GLUE_WEBURLLOADER_IMPL_H_ -#include "base/ref_counted.h" +#include "base/memory/ref_counted.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" namespace webkit_glue { diff --git a/webkit/glue/webvideoframe_impl.h b/webkit/glue/webvideoframe_impl.h index 0aca052..52f7f1f 100644 --- a/webkit/glue/webvideoframe_impl.h +++ b/webkit/glue/webvideoframe_impl.h @@ -8,14 +8,13 @@ #include "media/base/video_frame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h" -using namespace WebKit; - namespace webkit_glue { -class WebVideoFrameImpl : public WebVideoFrame { +class WebVideoFrameImpl : public WebKit::WebVideoFrame { public: // This converts a WebKit::WebVideoFrame to a media::VideoFrame. - static media::VideoFrame* toVideoFrame(WebVideoFrame* web_video_frame); + static media::VideoFrame* toVideoFrame( + WebKit::WebVideoFrame* web_video_frame); WebVideoFrameImpl(scoped_refptr<media::VideoFrame> video_frame); virtual ~WebVideoFrameImpl(); |