WebKit Bugzilla
Attachment 361889 Details for
Bug 194487
: Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194487-20190212191615.patch (text/plain), 41.51 KB, created by
Darin Adler
on 2019-02-12 19:16:16 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Darin Adler
Created:
2019-02-12 19:16:16 PST
Size:
41.51 KB
patch
obsolete
>Subversion Revision: 241336 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 965769254d9f1c01161efc426bc0c593e49a257b..fac1ac4e8825e730003c0c269065b9ff9896e6c9 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,51 @@ >+2019-02-10 Darin Adler <darin@apple.com> >+ >+ Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases) >+ https://bugs.webkit.org/show_bug.cgi?id=194487 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * accessibility/win/AccessibilityObjectWrapperWin.cpp: >+ (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue): Use makeString >+ instead of String::format. >+ >+ * page/linux/ResourceUsageOverlayLinux.cpp: >+ (WebCore::formatByteNumber): Use String::number instead of String::format. >+ >+ * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp: >+ (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer): >+ Use makeString instead of String::format. >+ * platform/glib/UserAgentGLib.cpp: >+ (WebCore::platformVersionForUAString): Ditto. >+ * platform/graphics/gstreamer/GStreamerCommon.cpp: >+ (WebCore::simpleBusMessageCallback): Ditto. >+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: >+ (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Ditto. >+ * platform/graphics/gstreamer/mse/AppendPipeline.cpp: >+ (WebCore::AppendPipeline::AppendPipeline): Ditto. >+ (WebCore::AppendPipeline::handleStateChangeMessage): Ditto. >+ (WebCore::AppendPipeline::resetParserState): Ditto. >+ * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp: >+ (WebCore::MediaPlayerPrivateGStreamerMSE::load): Ditto. >+ (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek): Ditto. >+ >+ * platform/graphics/gtk/ImageBufferGtk.cpp: >+ (WebCore::encodeImage): Use String::number instead of String::format. >+ >+ * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp: >+ (WebCore::GStreamerAudioCaptureSource::create): Use makeString instead of >+ String::format. >+ * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp: >+ (WebCore::GStreamerCaptureDeviceManager::addDevice): Ditto. >+ * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: >+ (WebCore::webkitMediaStreamSrcAddPad): Ditto. >+ * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp: >+ (WebCore::GStreamerVideoCaptureSource::create): Ditto. >+ * platform/network/curl/CookieJarDB.cpp: >+ (WebCore::CookieJarDB::verifySchemaVersion): Ditto. >+ * platform/win/SearchPopupMenuDB.cpp: >+ (WebCore::SearchPopupMenuDB::verifySchemaVersion): Ditto. >+ > 2019-02-12 Rob Buis <rbuis@igalia.com> > > Align with Fetch on data: URLs >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 62cc7243cba3206422cb13a7a23f4ff5c983f0b5..435792f45a412e2a1e4363e8a5738dd2df6f52a9 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,20 @@ >+2019-02-10 Darin Adler <darin@apple.com> >+ >+ Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases) >+ https://bugs.webkit.org/show_bug.cgi?id=194487 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::switchToNewTestingSession): Use makeString instead of String::format. >+ * NetworkProcess/soup/NetworkProcessSoup.cpp: >+ (WebKit::buildAcceptLanguages): Ditto. >+ * UIProcess/API/glib/IconDatabase.cpp: >+ (WebKit::IconDatabase::performURLImport): Ditto. >+ * UIProcess/gtk/InputMethodFilter.cpp: >+ (WebKit::InputMethodFilter::logConfirmCompositionForTesting): Ditto. >+ (WebKit::InputMethodFilter::logSetPreeditForTesting): Ditto. >+ > 2019-02-12 Chris Dumez <cdumez@apple.com> > > Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared() >diff --git a/Source/WebKitLegacy/win/ChangeLog b/Source/WebKitLegacy/win/ChangeLog >index cc72d9b3e40e43add4f12d9e590a38408c623b56..ac6bcab205c14097ca1fef41641dec692df7ddf8 100644 >--- a/Source/WebKitLegacy/win/ChangeLog >+++ b/Source/WebKitLegacy/win/ChangeLog >@@ -1,3 +1,13 @@ >+2019-02-10 Darin Adler <darin@apple.com> >+ >+ Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases) >+ https://bugs.webkit.org/show_bug.cgi?id=194487 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebView.cpp: >+ (webKitVersionString): Use makeString instead of String::format. >+ > 2019-02-12 Wenson Hsieh <wenson_hsieh@apple.com> > > Allow pages to trigger programmatic paste from script on iOS >diff --git a/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp b/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp >index 9d5175cefef5b58bbd3bfe7f408099bf0d6d0f52..a8e72f9981673046a1a659a0f99109a8853e88c5 100644 >--- a/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp >+++ b/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp >@@ -33,6 +33,7 @@ > #include "BString.h" > #include "HTMLNames.h" > #include "QualifiedName.h" >+#include <wtf/text/StringConcatenateNumbers.h> > > namespace WebCore { > >@@ -72,7 +73,7 @@ void AccessibilityObjectWrapper::accessibilityAttributeValue(const AtomicString& > ASSERT(V_VT(result) == VT_EMPTY); > V_VT(result) = VT_BSTR; > PlainTextRange textRange = m_object->selectedTextRange(); >- String range = String::format("{%u, %u}", textRange.start, textRange.length); >+ String range = makeString('{', textRange.start, ", ", textRange.length, '}'); > V_BSTR(result) = WebCore::BString(range).release(); > return; > } >diff --git a/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp b/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp >index e8a4bc070c08e9574653e2936bd99e5c7a217890..e6ac8cbe3a82f83e6c486c5cbbcaa6fda16b52ad 100644 >--- a/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp >+++ b/Source/WebCore/page/linux/ResourceUsageOverlayLinux.cpp >@@ -56,7 +56,7 @@ static String formatByteNumber(size_t number) > return String::format("%.2f MB", static_cast<double>(number) / 1048576); > if (number >= 1024) > return String::format("%.1f kB", static_cast<double>(number) / 1024); >- return String::format("%lu", number); >+ return String::number(number); > } > > static String gcTimerString(MonotonicTime timerFireDate, MonotonicTime now) >diff --git a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp >index e7111f3c023ae615f0195302979116c3577b649f..54b39f45a5ba700ee0e9baa16536d21884ed10f8 100644 >--- a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp >+++ b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp >@@ -109,7 +109,7 @@ AudioSourceProviderGStreamer::AudioSourceProviderGStreamer(MediaStreamTrackPriva > { > m_frontLeftAdapter = gst_adapter_new(); > m_frontRightAdapter = gst_adapter_new(); >- auto pipelineName = String::format("WebAudioProvider_MediaStreamTrack_%s", source.id().utf8().data()); >+ auto pipelineName = makeString("WebAudioProvider_MediaStreamTrack_", source.id()); > m_pipeline = adoptGRef(GST_ELEMENT(g_object_ref_sink(gst_element_factory_make("pipeline", pipelineName.utf8().data())))); > auto src = webkitMediaStreamSrcNew(); > webkitMediaStreamSrcAddTrack(WEBKIT_MEDIA_STREAM_SRC(src), &source, true); >diff --git a/Source/WebCore/platform/glib/UserAgentGLib.cpp b/Source/WebCore/platform/glib/UserAgentGLib.cpp >index a3ba4e46dc28395d852ce8fb68c70b5799e27724..37bed5f194f68fa11fa30957d154aee6d1686d16 100644 >--- a/Source/WebCore/platform/glib/UserAgentGLib.cpp >+++ b/Source/WebCore/platform/glib/UserAgentGLib.cpp >@@ -58,7 +58,7 @@ static const String platformVersionForUAString() > #if OS(UNIX) > struct utsname name; > uname(&name); >- static NeverDestroyed<const String> uaOSVersion(String::format("%s %s", name.sysname, name.machine)); >+ static NeverDestroyed<const String> uaOSVersion(makeString(name.sysname, ' ', name.machine)); > return uaOSVersion; > #else > // We will always claim to be Safari in Intel Mac OS X, since Safari without >diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp >index c32539b2df1f31a0dc9c8f4592db8f6a70a1eba5..8db7d4d1daf7d0188a69087ffbbb8f77d871c94b 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp >@@ -318,7 +318,7 @@ static void simpleBusMessageCallback(GstBus*, GstMessage* message, GstBin* pipel > case GST_MESSAGE_ERROR: > GST_ERROR_OBJECT(pipeline, "Got message: %" GST_PTR_FORMAT, message); > { >- WTF::String dotFileName = String::format("%s_error", GST_OBJECT_NAME(pipeline)); >+ WTF::String dotFileName = makeString(GST_OBJECT_NAME(pipeline), "_error"); > GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(pipeline, GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.utf8().data()); > } > break; >@@ -332,9 +332,9 @@ static void simpleBusMessageCallback(GstBus*, GstMessage* message, GstBin* pipel > gst_element_state_get_name(newState), > gst_element_state_get_name(pending)); > >- WTF::String dotFileName = String::format("%s_%s_%s", >- GST_OBJECT_NAME(pipeline), >- gst_element_state_get_name(oldState), >+ WTF::String dotFileName = makeString( >+ GST_OBJECT_NAME(pipeline), '_', >+ gst_element_state_get_name(oldState), '_', > gst_element_state_get_name(newState)); > > GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.utf8().data()); >diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >index 4140c11b0ea4798e660d649580fecaad3c26d4c7..167453d60ccd78cba88c75203f381402814291df 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >@@ -1249,8 +1249,8 @@ void MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message) > // Construct a filename for the graphviz dot file output. > GstState newState; > gst_message_parse_state_changed(message, ¤tState, &newState, nullptr); >- CString dotFileName = String::format("%s.%s_%s", GST_OBJECT_NAME(m_pipeline.get()), >- gst_element_state_get_name(currentState), gst_element_state_get_name(newState)).utf8(); >+ CString dotFileName = makeString(GST_OBJECT_NAME(m_pipeline.get()), '.', >+ gst_element_state_get_name(currentState), '_', gst_element_state_get_name(newState)).utf8(); > GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.data()); > > break; >diff --git a/Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp b/Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp >index 2d9323811ff3ee96c40befb8e87bab04e014a42b..d62f32f2d9c9fe7cc3ae299ba28853b4d9a63a5d 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp >@@ -41,6 +41,7 @@ > #include <wtf/Condition.h> > #include <wtf/glib/GLibUtilities.h> > #include <wtf/glib/RunLoopSourcePriority.h> >+#include <wtf/text/StringConcatenateNumbers.h> > > GST_DEBUG_CATEGORY_EXTERN(webkit_mse_debug); > #define GST_CAT_DEFAULT webkit_mse_debug >@@ -113,8 +114,8 @@ AppendPipeline::AppendPipeline(Ref<MediaSourceClientGStreamerMSE> mediaSourceCli > // FIXME: give a name to the pipeline, maybe related with the track it's managing. > // The track name is still unknown at this time, though. > static size_t appendPipelineCount = 0; >- String pipelineName = String::format("append-pipeline-%s-%zu", >- m_sourceBufferPrivate->type().containerType().replace("/", "-").utf8().data(), appendPipelineCount++); >+ String pipelineName = makeString("append-pipeline-", >+ m_sourceBufferPrivate->type().containerType().replace("/", "-"), '-', appendPipelineCount++); > m_pipeline = gst_pipeline_new(pipelineName.utf8().data()); > > m_bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(m_pipeline.get()))); >@@ -330,9 +331,9 @@ void AppendPipeline::handleStateChangeMessage(GstMessage* message) > CString sourceBufferType = String(m_sourceBufferPrivate->type().raw()) > .replace("/", "_").replace(" ", "_") > .replace("\"", "").replace("\'", "").utf8(); >- CString dotFileName = String::format("webkit-append-%s-%s_%s", >- sourceBufferType.data(), >- gst_element_state_get_name(currentState), >+ CString dotFileName = makeString("webkit-append-", >+ sourceBufferType.data(), '-', >+ gst_element_state_get_name(currentState), '_', > gst_element_state_get_name(newState)).utf8(); > GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.data()); > } >@@ -547,7 +548,7 @@ void AppendPipeline::resetParserState() > { > static unsigned i = 0; > // This is here for debugging purposes. It does not make sense to have it as class member. >- WTF::String dotFileName = String::format("reset-pipeline-%d", ++i); >+ WTF::String dotFileName = makeString("reset-pipeline-", ++i); > gst_debug_bin_to_dot_file(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.utf8().data()); > } > #endif >diff --git a/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp b/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp >index e5b443e6b2d72172f67127e16aab0c3f7e2cb840..27e68450cca39f03df24449f1f0e95adea9590f9 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp >@@ -127,7 +127,7 @@ void MediaPlayerPrivateGStreamerMSE::load(const String& urlString) > void MediaPlayerPrivateGStreamerMSE::load(const String& url, MediaSourcePrivateClient* mediaSource) > { > m_mediaSource = mediaSource; >- load(String::format("mediasource%s", url.utf8().data())); >+ load(makeString("mediasource", url)); > } > > void MediaPlayerPrivateGStreamerMSE::pause() >@@ -250,8 +250,8 @@ bool MediaPlayerPrivateGStreamerMSE::doSeek() > || !m_gstSeekCompleted) { > CString reason = "Unknown reason"; > if (getStateResult == GST_STATE_CHANGE_ASYNC) { >- reason = String::format("In async change %s --> %s", >- gst_element_state_get_name(state), >+ reason = makeString("In async change ", >+ gst_element_state_get_name(state), " --> ", > gst_element_state_get_name(newState)).utf8(); > } else if (state < GST_STATE_PAUSED) > reason = "State less than PAUSED"; >diff --git a/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp b/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp >index 9933cae6bf45ed27667df89531dcf3661f350bf8..ab5a0d50f8ce1aaf6535deec940b85dc5517e4b1 100644 >--- a/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp >+++ b/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp >@@ -67,7 +67,7 @@ static bool encodeImage(cairo_surface_t* surface, const String& mimeType, Option > > GUniqueOutPtr<GError> error; > if (type == "jpeg" && quality && *quality >= 0.0 && *quality <= 1.0) { >- String qualityString = String::format("%d", static_cast<int>(*quality * 100.0 + 0.5)); >+ String qualityString = String::number(static_cast<int>(*quality * 100.0 + 0.5)); > gdk_pixbuf_save_to_buffer(pixbuf.get(), &buffer.outPtr(), &bufferSize, type.utf8().data(), &error.outPtr(), "quality", qualityString.utf8().data(), NULL); > } else > gdk_pixbuf_save_to_buffer(pixbuf.get(), &buffer.outPtr(), &bufferSize, type.utf8().data(), &error.outPtr(), NULL); >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >index 627b007711c0822b156af426adf437a022961630..db94fdaf83a8abd67afcfd6ea369faa89c46c3e2 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >@@ -71,7 +71,7 @@ CaptureSourceOrError GStreamerAudioCaptureSource::create(String&& deviceID, Stri > { > auto device = GStreamerAudioCaptureDeviceManager::singleton().gstreamerDeviceWithUID(deviceID); > if (!device) { >- auto errorMessage = String::format("GStreamerAudioCaptureSource::create(): GStreamer did not find the device: %s.", deviceID.utf8().data()); >+ auto errorMessage = makeString("GStreamerAudioCaptureSource::create(): GStreamer did not find the device: ", deviceID, '.'); > return CaptureSourceOrError(WTFMove(errorMessage)); > } > >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp >index e08df296ebc7d3a79a418b6df68181b2e6a45022..bd7f36e1c08f291ea72dca47f468389363a8d189 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp >@@ -108,7 +108,7 @@ void GStreamerCaptureDeviceManager::addDevice(GRefPtr<GstDevice>&& device) > gboolean isDefault = FALSE; > gst_structure_get_boolean(properties.get(), "is-default", &isDefault); > >- String identifier = String::format("%s%s", isDefault ? "default: " : "", deviceName.get()); >+ String identifier = makeString(isDefault ? "default: " : "", deviceName.get()); > > auto gstCaptureDevice = GStreamerCaptureDevice(WTFMove(device), identifier, type, identifier); > gstCaptureDevice.setEnabled(true); >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp >index c391c4cd9dfaa33fe2b3367b5c89a38b07c30b75..a87d26d25dcb21ddc0848e6d5a59453c06693482 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp >@@ -382,7 +382,7 @@ static GstFlowReturn webkitMediaStreamSrcChain(GstPad* pad, GstObject* parent, G > > static void webkitMediaStreamSrcAddPad(WebKitMediaStreamSrc* self, GstPad* target, GstStaticPadTemplate* pad_template) > { >- auto padname = String::format("src_%u", g_atomic_int_add(&(self->npads), 1)); >+ auto padname = makeString("src_", g_atomic_int_add(&(self->npads), 1)); > auto ghostpad = gst_ghost_pad_new_from_template(padname.utf8().data(), target, > gst_static_pad_template_get(pad_template)); > >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >index fbaf52aad40746c7b071ba6cf86185b5382ecc78..d7ca8d94bf16ec068c93b3f70fde81ffe7ea7c15 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >@@ -102,7 +102,7 @@ CaptureSourceOrError GStreamerVideoCaptureSource::create(String&& deviceID, Stri > { > auto device = GStreamerVideoCaptureDeviceManager::singleton().gstreamerDeviceWithUID(deviceID); > if (!device) { >- auto errorMessage = String::format("GStreamerVideoCaptureSource::create(): GStreamer did not find the device: %s.", deviceID.utf8().data()); >+ auto errorMessage = makeString("GStreamerVideoCaptureSource::create(): GStreamer did not find the device: ", deviceID, '.'); > return CaptureSourceOrError(WTFMove(errorMessage)); > } > >diff --git a/Source/WebCore/platform/network/curl/CookieJarDB.cpp b/Source/WebCore/platform/network/curl/CookieJarDB.cpp >index 26362288b869d8c7bb3417f76f40b63cc57f7a79..eec951ef69c8f72a9591e074eab83528de4c6d00 100644 >--- a/Source/WebCore/platform/network/curl/CookieJarDB.cpp >+++ b/Source/WebCore/platform/network/curl/CookieJarDB.cpp >@@ -31,6 +31,7 @@ > #include <wtf/FileSystem.h> > #include <wtf/MonotonicTime.h> > #include <wtf/URL.h> >+#include <wtf/text/StringConcatenateNumbers.h> > > #if ENABLE(PUBLIC_SUFFIX_LIST) > #include "PublicSuffix.h" >@@ -202,7 +203,7 @@ void CookieJarDB::verifySchemaVersion() > } > > // Update version >- executeSql(String::format("PRAGMA user_version=%d", schemaVersion)); >+ executeSql(makeString("PRAGMA user_version=", schemaVersion)); > } > > void CookieJarDB::deleteAllTables() >diff --git a/Source/WebCore/platform/win/SearchPopupMenuDB.cpp b/Source/WebCore/platform/win/SearchPopupMenuDB.cpp >index e5730b30ccf3f03eefdff9a331c08ed0e22e58bf..be913d2ffbd352d0174d5077ba6450eeb0f228f8 100644 >--- a/Source/WebCore/platform/win/SearchPopupMenuDB.cpp >+++ b/Source/WebCore/platform/win/SearchPopupMenuDB.cpp >@@ -28,6 +28,7 @@ > #include "SQLiteFileSystem.h" > #include "SQLiteTransaction.h" > #include <wtf/FileSystem.h> >+#include <wtf/text/StringConcatenateNumbers.h> > > namespace WebCore { > >@@ -250,7 +251,7 @@ void SearchPopupMenuDB::verifySchemaVersion() > } > > // Update version >- executeSimpleSql(String::format("PRAGMA user_version=%d", schemaVersion)); >+ executeSimpleSql(makeString("PRAGMA user_version=", schemaVersion)); > } > > void SearchPopupMenuDB::checkSQLiteReturnCode(int actual) >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >index f166fd9e8b5ece14228fab2f073bca2ea930d2f3..dfdbbf50b979f88762c32167ac8b0a82ee3f6e84 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >@@ -463,7 +463,7 @@ void NetworkProcess::switchToNewTestingSession() > { > #if PLATFORM(COCOA) > // Session name should be short enough for shared memory region name to be under the limit, otherwise sandbox rules won't work (see <rdar://problem/13642852>). >- String sessionName = String::format("WebKit Test-%u", static_cast<uint32_t>(getCurrentProcessID())); >+ String sessionName = makeString("WebKit Test-", getCurrentProcessID()); > > auto session = adoptCF(WebCore::createPrivateStorageSession(sessionName.createCFString().get())); > >diff --git a/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp b/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >index a0d2af641043ca01eac54538fae40fa30c64efd6..ebabfb072b49dd5b84de5ebddfbe273e40c121a4 100644 >--- a/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >+++ b/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp >@@ -82,9 +82,10 @@ static CString buildAcceptLanguages(const Vector<String>& languages) > > int quality = 100 - i * delta; > if (quality > 0 && quality < 100) { >+ builder.appendLiteral(";q="); > char buffer[8]; > g_ascii_formatd(buffer, 8, "%.2f", quality / 100.0); >- builder.append(String::format(";q=%s", buffer)); >+ builder.append(buffer); > } > } > >diff --git a/Source/WebKit/UIProcess/API/glib/IconDatabase.cpp b/Source/WebKit/UIProcess/API/glib/IconDatabase.cpp >index b0466e914090bc055966e6b9df319ea304db2356..8d2f88ae0032a0d9345e6800a97858b428a4d6d9 100644 >--- a/Source/WebKit/UIProcess/API/glib/IconDatabase.cpp >+++ b/Source/WebKit/UIProcess/API/glib/IconDatabase.cpp >@@ -38,6 +38,7 @@ > #include <wtf/NeverDestroyed.h> > #include <wtf/StdLibExtras.h> > #include <wtf/URL.h> >+#include <wtf/text/StringConcatenateNumbers.h> > > // For methods that are meant to support API from the main thread - should not be called internally > #define ASSERT_NOT_SYNC_THREAD() ASSERT(!m_syncThreadRunning || !IS_ICON_SYNC_THREAD()) >@@ -1083,7 +1084,7 @@ void IconDatabase::performURLImport() > // Note that IconInfo.stamp is only set when the icon data is retrieved from the server (and thus is not updated whether > // we use it or not). This code works anyway because the IconDatabase downloads icons again if they are older than 4 days, > // so if the timestamp goes back in time more than those 30 days we can be sure that the icon was not used at all. >- String importQuery = String::format("SELECT PageURL.url, IconInfo.url, IconInfo.stamp FROM PageURL INNER JOIN IconInfo ON PageURL.iconID=IconInfo.iconID WHERE IconInfo.stamp > %.0f;", floor((WallTime::now() - notUsedIconExpirationTime).secondsSinceEpoch().seconds())); >+ String importQuery = makeString("SELECT PageURL.url, IconInfo.url, IconInfo.stamp FROM PageURL INNER JOIN IconInfo ON PageURL.iconID=IconInfo.iconID WHERE IconInfo.stamp > ", floor((WallTime::now() - notUsedIconExpirationTime).secondsSinceEpoch().seconds()), ';'); > > SQLiteStatement query(m_syncDB, importQuery); > >diff --git a/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp b/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp >index 2ef5d9ef9b2e491c30d240126d51995b262e73cf..6a43f178b6adef7c9331e56ed4bb2c4d7c939598 100644 >--- a/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp >+++ b/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp >@@ -467,13 +467,14 @@ void InputMethodFilter::logConfirmCompositionForTesting() > if (m_confirmedComposition.isEmpty()) > m_events.append(String("confirmCurrentcomposition")); > else >- m_events.append(String::format("confirmComposition '%s'", m_confirmedComposition.utf8().data())); >+ m_events.append(makeString("confirmComposition '", m_confirmedComposition, '\'')); > } > > void InputMethodFilter::logSetPreeditForTesting() > { >- m_events.append(String::format("setPreedit text='%s' cursorOffset=%i", m_preedit.utf8().data(), m_cursorOffset)); >+ m_events.append(makeString("setPreedit text='", m_preedit, "' cursorOffset=", m_cursorOffset)); > } >+ > #endif // ENABLE(API_TESTS) > > } // namespace WebKit >diff --git a/Source/WebKitLegacy/win/WebView.cpp b/Source/WebKitLegacy/win/WebView.cpp >index de39139a1fdf0adf4029466957ee1c6f5198c74a..3ff81cf2089de6680eca3856f573c22951748f0a 100644 >--- a/Source/WebKitLegacy/win/WebView.cpp >+++ b/Source/WebKitLegacy/win/WebView.cpp >@@ -2874,7 +2874,7 @@ static String webKitVersionString() > if (::LoadStringW(gInstance, BUILD_NUMBER, reinterpret_cast<LPWSTR>(&buildNumberStringPtr), 0) && buildNumberStringPtr) > return buildNumberStringPtr; > #endif >- return String::format("%d.%d", WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION); >+ return makeString(WEBKIT_MAJOR_VERSION, '.', WEBKIT_MINOR_VERSION); > } > > const String& WebView::userAgentForKURL(const URL&) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index fe1a0d775a6fec70e5f559005d0917b35e006c36..e059c01a4c3e67db835ff0fde53347ad1b0e6e5f 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,28 @@ >+2019-02-10 Darin Adler <darin@apple.com> >+ >+ Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases) >+ https://bugs.webkit.org/show_bug.cgi?id=194487 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * DumpRenderTree/win/DumpRenderTree.cpp: >+ (applicationId): Use makeString instead of String::format. >+ (main): Ditto. >+ * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: >+ (TestWebKitAPI::Util::createURLForResource): Ditto. >+ * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp: >+ (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Ditto. >+ >+ * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp: >+ (WTR::attributeSetToString): Use StringBuilder functions directly instead of g_strconcat. >+ (WTR::attributesOfElement): Use StringBuilder functions directly instead of String::format. >+ (WTR::createStringWithAttributes): Use appendLiteral. >+ (WTR::AccessibilityUIElement::helpText const): Ditto. >+ (WTR::AccessibilityUIElement::attributedStringForRange): Use StringBuilder functions >+ directly instead of using String::format. >+ (WTR::AccessibilityUIElement::url): Use makeString instead of String::format. >+ (WTR::stringAtOffset): Use StringBuilder::appendNumber instead of String::format. >+ > 2019-02-12 Chris Dumez <cdumez@apple.com> > > Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared() >diff --git a/Tools/DumpRenderTree/win/DumpRenderTree.cpp b/Tools/DumpRenderTree/win/DumpRenderTree.cpp >index a0b685c75f9daf0feb7eaae1bb32a2e952d226f4..3764fcdd0c50c31648485c99b0d43384ab6620df 100644 >--- a/Tools/DumpRenderTree/win/DumpRenderTree.cpp >+++ b/Tools/DumpRenderTree/win/DumpRenderTree.cpp >@@ -65,6 +65,7 @@ > #include <wtf/RetainPtr.h> > #include <wtf/Vector.h> > #include <wtf/text/CString.h> >+#include <wtf/text/StringConcatenateNumbers.h> > #include <wtf/text/StringHash.h> > > #if USE(CFURLCONNECTION) >@@ -904,8 +905,7 @@ static void setWebPreferencesForTestOptions(IWebPreferences* preferences, const > > static String applicationId() > { >- DWORD processId = ::GetCurrentProcessId(); >- return String::format("com.apple.DumpRenderTree.%d", processId); >+ return makeString("com.apple.DumpRenderTree.", ::GetCurrentProcessId()); > } > > static void setApplicationId() >@@ -1537,8 +1537,8 @@ int main(int argc, const char* argv[]) > // Tests involving the clipboard are flaky when running with multiple DRTs, since the clipboard is global. > // We can fix this by assigning each DRT a separate window station (each window station has its own clipboard). > DWORD processId = ::GetCurrentProcessId(); >- String windowStationName = String::format("windowStation%d", processId); >- String desktopName = String::format("desktop%d", processId); >+ String windowStationName = makeString("windowStation", processId); >+ String desktopName = makeString("desktop", processId); > HDESK desktop = nullptr; > > auto windowsStation = ::CreateWindowStation(windowStationName.charactersWithNullTermination().data(), CWF_CREATE_ONLY, WINSTA_ALL_ACCESS, nullptr); >diff --git a/Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp b/Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp >index 35f22e2a8b1bfe50a47059091834723679a3d7fd..2e543088111d31a597edf1b3012a9246e8ef01cc 100644 >--- a/Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp >+++ b/Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp >@@ -51,7 +51,7 @@ WKStringRef createInjectedBundlePath() > > WKURLRef createURLForResource(const char* resource, const char* extension) > { >- String filename = String::format("..\\..\\..\\Tools\\TestWebKitAPI\\Tests\\WebKit\\%s.%s", resource, extension); >+ String filename = makeString("..\\..\\..\\Tools\\TestWebKitAPI\\Tests\\WebKit\\", resource, '.', extension); > auto url = URL::fileURLWithFileSystemPath(FileSystem::pathByAppendingComponent(moduleDirectory(), filename)); > return WKURLCreateWithUTF8CString(url.string().utf8().data()); > } >diff --git a/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp b/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp >index bb3ba6ad8d5faacdc111d6528a31731a7d74eb35..3cd0bdda27bc4b9e4003e83ea868880e30fc1754 100644 >--- a/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp >+++ b/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp >@@ -267,7 +267,7 @@ void AccessibilityNotificationHandler::connectAccessibilityCallbacks() > for (const char** signalName = signalNames; *signalName; signalName++) { > unsigned id = atk_add_global_event_listener(axObjectEventListener, *signalName); > if (!id) { >- String message = String::format("atk_add_global_event_listener failed for signal %s\n", *signalName); >+ String message = makeString("atk_add_global_event_listener failed for signal ", *signalName, '\n'); > InjectedBundle::singleton().outputText(message); > continue; > } >diff --git a/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp b/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp >index 8efba4eaf52382fd448b80dc33ea48e5f0c1dc90..f4d603883608c2e67813ed5ae1ec4b6cd775039b 100644 >--- a/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp >+++ b/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp >@@ -44,7 +44,6 @@ > #include <wtf/glib/GUniquePtr.h> > #include <wtf/text/CString.h> > #include <wtf/text/StringBuilder.h> >-#include <wtf/text/WTFString.h> > #include <wtf/unicode/CharacterNames.h> > > namespace WTR { >@@ -226,8 +225,9 @@ String attributeSetToString(AtkAttributeSet* attributeSet, String separator=", " > StringBuilder builder; > for (AtkAttributeSet* attributes = attributeSet; attributes; attributes = attributes->next) { > AtkAttribute* attribute = static_cast<AtkAttribute*>(attributes->data); >- GUniquePtr<gchar> attributeData(g_strconcat(attribute->name, ":", attribute->value, NULL)); >- builder.append(attributeData.get()); >+ builder.append(attribute->name); >+ builder.append(':'); >+ builder.append(attribute->value); > if (attributes->next) > builder.append(separator); > } >@@ -605,53 +605,102 @@ String attributesOfElement(AccessibilityUIElement* element) > { > StringBuilder builder; > >- builder.append(String::format("%s\n", element->role()->string().utf8().data())); >+ builder.append(element->role()->string()); >+ builder.append('\n'); > > // For the parent we print its role and its name, if available. >- builder.append("AXParent: "); >+ builder.appendLiteral("AXParent: "); > RefPtr<AccessibilityUIElement> parent = element->parentElement(); > AtkObject* atkParent = parent ? parent->platformUIElement().get() : nullptr; > if (atkParent) { > builder.append(roleToString(atkParent)); > const char* parentName = atk_object_get_name(atkParent); >- if (parentName && g_utf8_strlen(parentName, -1)) >- builder.append(String::format(": %s", parentName)); >+ if (parentName && parentName[0]) { >+ builder.appendLiteral(": "); >+ builder.append(parentName); >+ } > } else >- builder.append("(null)"); >- builder.append("\n"); >+ builder.appendLiteral("(null)"); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXChildren: "); >+ builder.appendNumber(element->childrenCount()); >+ builder.append('\n'); > >- builder.append(String::format("AXChildren: %d\n", element->childrenCount())); >- builder.append(String::format("AXPosition: { %f, %f }\n", element->x(), element->y())); >- builder.append(String::format("AXSize: { %f, %f }\n", element->width(), element->height())); >+ builder.appendLiteral("AXPosition: { "); >+ builder.appendNumber(element->x(), 6, KeepTrailingZeros); >+ builder.appendLiteral(", "); >+ builder.appendNumber(element->y(), 6, KeepTrailingZeros); >+ builder.appendLiteral(" }\n"); >+ >+ builder.appendLiteral("AXSize: { "); >+ builder.appendNumber(element->width(), 6, KeepTrailingZeros); >+ builder.appendLiteral(", "); >+ builder.appendNumber(element->height(), 6, KeepTrailingZeros); >+ builder.appendLiteral(" }\n"); > > String title = element->title()->string(); >- if (!title.isEmpty()) >- builder.append(String::format("%s\n", title.utf8().data())); >+ if (!title.isEmpty()) { >+ builder.append(title); >+ builder.append('\n'); >+ } > > String description = element->description()->string(); >- if (!description.isEmpty()) >- builder.append(String::format("%s\n", description.utf8().data())); >+ if (!description.isEmpty()) { >+ builder.append(description.utf8().data()); >+ builder.append('\n'); >+ } > > String value = element->stringValue()->string(); >- if (!value.isEmpty()) >- builder.append(String::format("%s\n", value.utf8().data())); >- >- builder.append(String::format("AXFocusable: %d\n", element->isFocusable())); >- builder.append(String::format("AXFocused: %d\n", element->isFocused())); >- builder.append(String::format("AXSelectable: %d\n", element->isSelectable())); >- builder.append(String::format("AXSelected: %d\n", element->isSelected())); >- builder.append(String::format("AXMultiSelectable: %d\n", element->isMultiSelectable())); >- builder.append(String::format("AXEnabled: %d\n", element->isEnabled())); >- builder.append(String::format("AXExpanded: %d\n", element->isExpanded())); >- builder.append(String::format("AXRequired: %d\n", element->isRequired())); >- builder.append(String::format("AXChecked: %d\n", element->isChecked())); >+ if (!value.isEmpty()) { >+ builder.append(value); >+ builder.append('\n'); >+ } >+ >+ builder.appendLiteral("AXFocusable: "); >+ builder.appendNumber(element->isFocusable()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXFocused: "); >+ builder.appendNumber(element->isFocused()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXSelectable: "); >+ builder.appendNumber(element->isSelectable()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXSelected: "); >+ builder.appendNumber(element->isSelected()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXMultiSelectable: "); >+ builder.appendNumber(element->isMultiSelectable()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXEnabled: "); >+ builder.appendNumber(element->isEnabled()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXExpanded: "); >+ builder.appendNumber(element->isExpanded()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXRequired: "); >+ builder.appendNumber(element->isRequired()); >+ builder.append('\n'); >+ >+ builder.appendLiteral("AXChecked: "); >+ builder.appendNumber(element->isChecked()); >+ builder.append('\n'); > > String url = element->url()->string(); >- if (!url.isEmpty()) >- builder.append(String::format("%s\n", url.utf8().data())); >+ if (!url.isEmpty()) { >+ builder.append(url); >+ builder.append('\n'); >+ } > > // We append the ATK specific attributes as a single line at the end. >- builder.append("AXPlatformAttributes: "); >+ builder.appendLiteral("AXPlatformAttributes: "); > builder.append(getAtkAttributeSetAsString(element->platformUIElement().get(), ObjectAttributeType)); > > return builder.toString(); >@@ -663,7 +712,7 @@ static JSRetainPtr<JSStringRef> createStringWithAttributes(const Vector<RefPtr<A > > for (Vector<RefPtr<AccessibilityUIElement> >::const_iterator it = elements.begin(); it != elements.end(); ++it) { > builder.append(attributesOfElement(const_cast<AccessibilityUIElement*>(it->get()))); >- builder.append("\n------------\n"); >+ builder.appendLiteral("\n------------\n"); > } > > return JSStringCreateWithUTF8CString(builder.toString().utf8().data()); >@@ -1445,13 +1494,13 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::helpText() const > return JSStringCreateWithCharacters(0, 0); > > StringBuilder builder; >- builder.append("AXHelp: "); >+ builder.appendLiteral("AXHelp: "); > > for (guint targetCount = 0; targetCount < targetList->len; targetCount++) { > if (AtkObject* target = static_cast<AtkObject*>(g_ptr_array_index(targetList, targetCount))) { > GUniquePtr<gchar> text(atk_text_get_text(ATK_TEXT(target), 0, -1)); > if (targetCount) >- builder.append(" "); >+ builder.append(' '); > builder.append(text.get()); > } > } >@@ -1783,7 +1832,7 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForRange(unsign > StringBuilder builder; > > // The default text attributes apply to the entire element. >- builder.append("\n\tDefault text attributes:\n\t\t"); >+ builder.appendLiteral("\n\tDefault text attributes:\n\t\t"); > builder.append(attributeSetToString(getAttributeSet(m_element.get(), TextAttributeType), "\n\t\t")); > > // The attribute run provides attributes specific to the range of text at the specified offset. >@@ -1792,7 +1841,9 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForRange(unsign > for (unsigned i = location; i < location + length; i = end) { > AtkAttributeSet* attributeSet = atk_text_get_run_attributes(text, i, &start, &end); > GUniquePtr<gchar> substring(replaceCharactersForResults(atk_text_get_text(text, start, end))); >- builder.append(String::format("\n\tRange attributes for '%s':\n\t\t", substring.get())); >+ builder.appendLiteral("\n\tRange attributes for '"); >+ builder.append(substring.get()); >+ builder.appendLiteral("':\n\t\t"); > builder.append(attributeSetToString(attributeSet, "\n\t\t")); > } > >@@ -2044,7 +2095,7 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::url() > > // Build the result string, stripping the absolute URL paths if present. > char* localURI = g_strstr_len(hyperlinkURI.get(), -1, "LayoutTests"); >- String axURL = String::format("AXURL: %s", localURI ? localURI : hyperlinkURI.get()); >+ String axURL = makeString("AXURL: ", localURI ? localURI : hyperlinkURI.get()); > return JSStringCreateWithUTF8CString(axURL.utf8().data()); > } > >@@ -2352,7 +2403,10 @@ JSRetainPtr<JSStringRef> stringAtOffset(PlatformUIElement element, AtkTextBounda > #else > builder.append(atk_text_get_text_at_offset(ATK_TEXT(element.get()), offset, boundary, &startOffset, &endOffset)); > #endif >- builder.append(String::format(", %i, %i", startOffset, endOffset)); >+ builder.appendLiteral(", "); >+ builder.appendNumber(startOffset); >+ builder.appendLiteral(", "); >+ builder.appendNumber(endOffset); > return JSStringCreateWithUTF8CString(builder.toString().utf8().data()); > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
dbates
:
review+
ews-watchlist
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194487
:
361652
|
361654
|
361658
| 361889 |
361902