diff --git a/DEPS b/DEPS index 434a7de..4779d67 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'bbab477b49e2aed0f257206ce457814c953d574b', + 'skia_revision': 'c30833327f0dda75a8fbe061f3f1966d1f6621a3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '35e713ce9a5629d09b38019e0e5725bf43d018dd', + 'v8_revision': '7f7160ede1c23a39fb6717ae62cab9ae2137fba5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '6814f49aa83916aea14bea2a1e78dac455436713', + 'pdfium_revision': '9468639bc3c4620ba438e6715929019ca6930197', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other.
diff --git a/android_webview/java/src/org/chromium/android_webview/AwAutofillClient.java b/android_webview/java/src/org/chromium/android_webview/AwAutofillClient.java index 65781e4..7bf412e 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwAutofillClient.java +++ b/android_webview/java/src/org/chromium/android_webview/AwAutofillClient.java
@@ -4,6 +4,7 @@ package org.chromium.android_webview; +import android.graphics.Color; import android.view.View; import android.view.ViewGroup; @@ -64,7 +65,8 @@ public void deleteSuggestion(int listIndex) { } }); } - mAutofillPopup.filterAndShow(suggestions, isRtl); + mAutofillPopup.filterAndShow(suggestions, isRtl, Color.TRANSPARENT /* backgroundColor */, + Color.TRANSPARENT /* dividerColor */, 0 /* dropdownItemHeight */); } @CalledByNative @@ -89,8 +91,9 @@ @CalledByNative private static void addToAutofillSuggestionArray(AutofillSuggestion[] array, int index, String name, String label, int uniqueId) { - array[index] = - new AutofillSuggestion(name, label, DropdownItem.NO_ICON, uniqueId, false, false); + array[index] = new AutofillSuggestion(name, label, DropdownItem.NO_ICON, + false /* isIconAtLeft */, uniqueId, false /* isDeletable */, + false /* isMultilineLabel */, false /* isBoldLabel */); } private native void nativeDismissed(long nativeAwAutofillClient);
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc index 6b1b0bf..4828450 100644 --- a/base/metrics/statistics_recorder.cc +++ b/base/metrics/statistics_recorder.cc
@@ -16,7 +16,6 @@ #include "base/metrics/persistent_histogram_allocator.h" #include "base/stl_util.h" #include "base/strings/stringprintf.h" -#include "base/synchronization/lock.h" #include "base/values.h" namespace { @@ -59,10 +58,10 @@ StatisticsRecorder::HistogramIterator& StatisticsRecorder::HistogramIterator::operator++() { const HistogramMap::iterator histograms_end = histograms_->end(); - if (iter_ == histograms_end || lock_ == NULL) + if (iter_ == histograms_end) return *this; - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); for (;;) { ++iter_; @@ -79,13 +78,12 @@ } StatisticsRecorder::~StatisticsRecorder() { - DCHECK(lock_); DCHECK(histograms_); DCHECK(ranges_); // Clean out what this object created and then restore what existed before. Reset(); - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); histograms_ = existing_histograms_.release(); callbacks_ = existing_callbacks_.release(); ranges_ = existing_ranges_.release(); @@ -110,31 +108,26 @@ // static bool StatisticsRecorder::IsActive() { - if (lock_ == NULL) - return false; - base::AutoLock auto_lock(*lock_); - return NULL != histograms_; + base::AutoLock auto_lock(lock_.Get()); + return histograms_ != nullptr; } // static HistogramBase* StatisticsRecorder::RegisterOrDeleteDuplicate( HistogramBase* histogram) { - // As per crbug.com/79322 the histograms are intentionally leaked, so we need - // to annotate them. Because ANNOTATE_LEAKING_OBJECT_PTR may be used only once - // for an object, the duplicates should not be annotated. - // Callers are responsible for not calling RegisterOrDeleteDuplicate(ptr) - // twice if (lock_ == NULL) || (!histograms_). - if (lock_ == NULL) { - ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 - return histogram; - } - - HistogramBase* histogram_to_delete = NULL; - HistogramBase* histogram_to_return = NULL; + HistogramBase* histogram_to_delete = nullptr; + HistogramBase* histogram_to_return = nullptr; { - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) { + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) { histogram_to_return = histogram; + + // As per crbug.com/79322 the histograms are intentionally leaked, so we + // need to annotate them. Because ANNOTATE_LEAKING_OBJECT_PTR may be used + // only once for an object, the duplicates should not be annotated. + // Callers are responsible for not calling RegisterOrDeleteDuplicate(ptr) + // twice |if (!histograms_)|. + ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 } else { const std::string& name = histogram->histogram_name(); HistogramMap::iterator it = histograms_->find(name); @@ -175,13 +168,8 @@ DCHECK(ranges->HasValidChecksum()); std::unique_ptr<const BucketRanges> ranges_deleter; - if (lock_ == NULL) { - ANNOTATE_LEAKING_OBJECT_PTR(ranges); - return ranges; - } - - base::AutoLock auto_lock(*lock_); - if (ranges_ == NULL) { + base::AutoLock auto_lock(lock_.Get()); + if (!ranges_) { ANNOTATE_LEAKING_OBJECT_PTR(ranges); return ranges; } @@ -278,10 +266,8 @@ // static void StatisticsRecorder::GetHistograms(Histograms* output) { - if (lock_ == NULL) - return; - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) return; for (const auto& entry : *histograms_) { @@ -292,10 +278,8 @@ // static void StatisticsRecorder::GetBucketRanges( std::vector<const BucketRanges*>* output) { - if (lock_ == NULL) - return; - base::AutoLock auto_lock(*lock_); - if (ranges_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!ranges_) return; for (const auto& entry : *ranges_) { @@ -312,15 +296,13 @@ // will acquire the lock at that time. ImportGlobalPersistentHistograms(); - if (lock_ == NULL) - return NULL; - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) - return NULL; + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) + return nullptr; HistogramMap::iterator it = histograms_->find(name); if (histograms_->end() == it) - return NULL; + return nullptr; return it->second; } @@ -332,7 +314,7 @@ HistogramMap::iterator iter_begin; { - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); iter_begin = histograms_->begin(); } return HistogramIterator(iter_begin, include_persistent); @@ -342,7 +324,7 @@ StatisticsRecorder::HistogramIterator StatisticsRecorder::end() { HistogramMap::iterator iter_end; { - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); iter_end = histograms_->end(); } return HistogramIterator(iter_end, true); @@ -350,19 +332,18 @@ // static void StatisticsRecorder::InitLogOnShutdown() { - if (lock_ == nullptr) + if (!histograms_) return; - base::AutoLock auto_lock(*lock_); + + base::AutoLock auto_lock(lock_.Get()); g_statistics_recorder_.Get().InitLogOnShutdownWithoutLock(); } // static void StatisticsRecorder::GetSnapshot(const std::string& query, Histograms* snapshot) { - if (lock_ == NULL) - return; - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) return; for (const auto& entry : *histograms_) { @@ -376,10 +357,8 @@ const std::string& name, const StatisticsRecorder::OnSampleCallback& cb) { DCHECK(!cb.is_null()); - if (lock_ == NULL) - return false; - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) return false; if (ContainsKey(*callbacks_, name)) @@ -395,10 +374,8 @@ // static void StatisticsRecorder::ClearCallback(const std::string& name) { - if (lock_ == NULL) - return; - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) return; callbacks_->erase(name); @@ -412,10 +389,8 @@ // static StatisticsRecorder::OnSampleCallback StatisticsRecorder::FindCallback( const std::string& name) { - if (lock_ == NULL) - return OnSampleCallback(); - base::AutoLock auto_lock(*lock_); - if (histograms_ == NULL) + base::AutoLock auto_lock(lock_.Get()); + if (!histograms_) return OnSampleCallback(); auto callback_iterator = callbacks_->find(name); @@ -425,10 +400,7 @@ // static size_t StatisticsRecorder::GetHistogramCount() { - if (!lock_) - return 0; - - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); if (!histograms_) return 0; return histograms_->size(); @@ -449,7 +421,7 @@ // static void StatisticsRecorder::UninitializeForTesting() { // Stop now if it's never been initialized. - if (lock_ == NULL || histograms_ == NULL) + if (!histograms_) return; // Get the global instance and destruct it. It's held in static memory so @@ -465,7 +437,7 @@ // static void StatisticsRecorder::ImportGlobalPersistentHistograms() { - if (lock_ == NULL) + if (!histograms_) return; // Import histograms from known persistent storage. Histograms could have @@ -481,17 +453,7 @@ // of main(), and hence it is not thread safe. It initializes globals to // provide support for all future calls. StatisticsRecorder::StatisticsRecorder() { - if (lock_ == NULL) { - // This will leak on purpose. It's the only way to make sure we won't race - // against the static uninitialization of the module while one of our - // static methods relying on the lock get called at an inappropriate time - // during the termination phase. Since it's a static data member, we will - // leak one per process, which would be similar to the instance allocated - // during static initialization and released only on process termination. - lock_ = new base::Lock; - } - - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); existing_histograms_.reset(histograms_); existing_callbacks_.reset(callbacks_); @@ -513,23 +475,18 @@ // static void StatisticsRecorder::Reset() { - // If there's no lock then there is nothing to reset. - if (!lock_) - return; std::unique_ptr<HistogramMap> histograms_deleter; std::unique_ptr<CallbackMap> callbacks_deleter; std::unique_ptr<RangesMap> ranges_deleter; - // We don't delete lock_ on purpose to avoid having to properly protect - // against it going away after we checked for NULL in the static methods. { - base::AutoLock auto_lock(*lock_); + base::AutoLock auto_lock(lock_.Get()); histograms_deleter.reset(histograms_); callbacks_deleter.reset(callbacks_); ranges_deleter.reset(ranges_); - histograms_ = NULL; - callbacks_ = NULL; - ranges_ = NULL; + histograms_ = nullptr; + callbacks_ = nullptr; + ranges_ = nullptr; } // We are going to leak the histograms and the ranges. } @@ -543,12 +500,13 @@ // static -StatisticsRecorder::HistogramMap* StatisticsRecorder::histograms_ = NULL; +StatisticsRecorder::HistogramMap* StatisticsRecorder::histograms_ = nullptr; // static -StatisticsRecorder::CallbackMap* StatisticsRecorder::callbacks_ = NULL; +StatisticsRecorder::CallbackMap* StatisticsRecorder::callbacks_ = nullptr; // static -StatisticsRecorder::RangesMap* StatisticsRecorder::ranges_ = NULL; +StatisticsRecorder::RangesMap* StatisticsRecorder::ranges_ = nullptr; // static -base::Lock* StatisticsRecorder::lock_ = NULL; +base::LazyInstance<base::Lock>::Leaky StatisticsRecorder::lock_ = + LAZY_INSTANCE_INITIALIZER; } // namespace base
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h index b4dae87..6deddae 100644 --- a/base/metrics/statistics_recorder.h +++ b/base/metrics/statistics_recorder.h
@@ -25,11 +25,11 @@ #include "base/macros.h" #include "base/metrics/histogram_base.h" #include "base/strings/string_piece.h" +#include "base/synchronization/lock.h" namespace base { class BucketRanges; -class Lock; class BASE_EXPORT StatisticsRecorder { public: @@ -230,8 +230,11 @@ static CallbackMap* callbacks_; static RangesMap* ranges_; - // Lock protects access to above maps. - static base::Lock* lock_; + // Lock protects access to above maps. This is a LazyInstance to avoid races + // when the above methods are used before Initialize(). Previously each method + // would do |if (!lock_) return;| which would race with + // |lock_ = new Lock;| in StatisticsRecorder(). http://crbug.com/672852. + static base::LazyInstance<base::Lock>::Leaky lock_; DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder); };
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py index 56e5a496..6df35fd 100755 --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py
@@ -184,7 +184,8 @@ return len(self._zip_infos) def FindByPattern(self, pattern): - return next(i for i in self._zip_infos if re.match(pattern, i.filename)) + return next((i for i in self._zip_infos if re.match(pattern, i.filename)), + None) def FindLargest(self): return max(self._zip_infos, key=lambda i: i.file_size) @@ -366,6 +367,9 @@ print 'Total uncompressed size: %s' % _FormatBytes(total_file_size) print + if not paks: + return + # Output the table of details about all pak files. print '%25s%11s%21s%21s' % ( 'FILENAME', 'RESOURCES', 'COMPRESSED SIZE', 'UNCOMPRESSED SIZE')
diff --git a/cc/output/overlay_candidate.cc b/cc/output/overlay_candidate.cc index b528488..64ee2a5 100644 --- a/cc/output/overlay_candidate.cc +++ b/cc/output/overlay_candidate.cc
@@ -335,4 +335,9 @@ OverlayCandidateList& OverlayCandidateList::operator=( OverlayCandidateList&& other) = default; +void OverlayCandidateList::AddPromotionHint(const OverlayCandidate& candidate) { + promotion_hint_info_map_[candidate.resource_id] = + candidate.display_rect.origin(); +} + } // namespace cc
diff --git a/cc/output/overlay_candidate.h b/cc/output/overlay_candidate.h index 68d62e3..e35299ded 100644 --- a/cc/output/overlay_candidate.h +++ b/cc/output/overlay_candidate.h
@@ -5,6 +5,7 @@ #ifndef CC_OUTPUT_OVERLAY_CANDIDATE_H_ #define CC_OUTPUT_OVERLAY_CANDIDATE_H_ +#include <map> #include <vector> #include "cc/base/cc_export.h" @@ -114,9 +115,15 @@ OverlayCandidateList& operator=(const OverlayCandidateList&); OverlayCandidateList& operator=(OverlayCandidateList&&); + // [id] == origin of candidate's |display_rect| for all promotable resources. + using PromotionHintInfoMap = std::map<ResourceId, gfx::PointF>; + // For android, this provides a set of resources that could be promoted to // overlay, if one backs them with a SurfaceView. - ResourceIdSet promotable_resource_hints_; + PromotionHintInfoMap promotion_hint_info_map_; + + // Helper to insert |candidate| into |promotion_hint_info_|. + void AddPromotionHint(const OverlayCandidate& candidate); }; } // namespace cc
diff --git a/cc/output/overlay_processor.cc b/cc/output/overlay_processor.cc index 472b0c2..88523d6 100644 --- a/cc/output/overlay_processor.cc +++ b/cc/output/overlay_processor.cc
@@ -24,7 +24,7 @@ : resource_provider_(resource_provider), candidates_(candidates) {} ~SendPromotionHintsBeforeReturning() { resource_provider_->SendPromotionHints( - candidates_->promotable_resource_hints_); + candidates_->promotion_hint_info_map_); } private:
diff --git a/cc/output/overlay_strategy_underlay.cc b/cc/output/overlay_strategy_underlay.cc index e509189..e08c40d 100644 --- a/cc/output/overlay_strategy_underlay.cc +++ b/cc/output/overlay_strategy_underlay.cc
@@ -52,14 +52,14 @@ // we can only promote a single quad. Otherwise, somebody might try to // back one of the promotable quads with a SurfaceView, and either it or // |candidate| would have to fall back to a texture. - candidate_list->promotable_resource_hints_.clear(); - candidate_list->promotable_resource_hints_.insert(candidate.resource_id); + candidate_list->promotion_hint_info_map_.clear(); + candidate_list->AddPromotionHint(candidate); return true; } else { // If |candidate| should get a promotion hint, then rememeber that now. - candidate_list->promotable_resource_hints_.insert( - new_candidate_list.promotable_resource_hints_.begin(), - new_candidate_list.promotable_resource_hints_.end()); + candidate_list->promotion_hint_info_map_.insert( + new_candidate_list.promotion_hint_info_map_.begin(), + new_candidate_list.promotion_hint_info_map_.end()); } }
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index b5ee7a99..6547109 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -1677,18 +1677,30 @@ #if defined(OS_ANDROID) void ResourceProvider::SendPromotionHints( - const ResourceIdSet& promotable_hints) { + const OverlayCandidateList::PromotionHintInfoMap& promotion_hints) { + GLES2Interface* gl = ContextGL(); + if (!gl) + return; + for (const auto& id : wants_promotion_hints_set_) { + const ResourceMap::iterator it = resources_.find(id); + if (it == resources_.end()) + continue; + + if (it->second.marked_for_deletion) + continue; + const Resource* resource = LockForRead(id); DCHECK(resource->wants_promotion_hint); // Insist that this is backed by a GPU texture. if (IsGpuResourceType(resource->type)) { DCHECK(resource->gl_id); - // TODO(liberato): Here we would either construct a set to send all at - // once, or send the promotion hint individually to resource->gl_id, based - // on whether promtable_hints.count(it->first) > 0 . - // crbug.com/671357 + auto iter = promotion_hints.find(id); + bool promotable = iter != promotion_hints.end(); + gl->OverlayPromotionHintCHROMIUM(resource->gl_id, promotable, + promotable ? iter->second.x() : 0, + promotable ? iter->second.y() : 0); } UnlockForRead(id); }
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 5d7ae6f..a9834ca 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h
@@ -208,10 +208,11 @@ #if defined(OS_ANDROID) // Send an overlay promotion hint to all resources that requested it via - // |want_promotion_hint|. |promotable_hints| contains all the resources that - // should be told that they're promotable. Others will be told that they're - // not promotable right now. - void SendPromotionHints(const ResourceIdSet& promotable_hints); + // |wants_promotion_hints_set_|. |promotable_hints| contains all the + // resources that should be told that they're promotable. Others will be told + // that they're not promotable right now. + void SendPromotionHints( + const OverlayCandidateList::PromotionHintInfoMap& promotion_hints); #endif // The following lock classes are part of the ResourceProvider API and are
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc index 08796a3..5a9d737 100644 --- a/cc/tiles/tile_manager.cc +++ b/cc/tiles/tile_manager.cc
@@ -1071,7 +1071,10 @@ // have to iterate the queue to check whether the required tiles are ready to // draw. for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { - if (!raster_priority_queue->Top().tile()->draw_info().IsReadyToDraw()) + const auto& prioritized_tile = raster_priority_queue->Top(); + // TODO(vmpstr): Check to debug crbug.com/622080. Remove when fixed. + CHECK_EQ(prioritized_tile.priority().priority_bin, TilePriority::NOW); + if (!prioritized_tile.tile()->draw_info().IsReadyToDraw()) return false; }
diff --git a/chrome/android/java/res/layout/history_header.xml b/chrome/android/java/res/layout/history_header.xml new file mode 100644 index 0000000..3b9e28b --- /dev/null +++ b/chrome/android/java/res/layout/history_header.xml
@@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2016 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. --> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + + <TextView + android:id="@+id/signed_in_not_synced" + style="@style/PrivacyDisclaimerText" /> + + <TextView + android:id="@+id/signed_in_synced" + style="@style/PrivacyDisclaimerText" /> + + <TextView + android:id="@+id/other_forms_of_browsing_history" + style="@style/PrivacyDisclaimerText" /> + + <Button + android:id="@+id/clear_browsing_data_button" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + style="@style/ButtonCompatBorderless" + android:paddingTop="16dp" + android:paddingBottom="16dp" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:gravity="center_vertical|start" + android:text="@string/open_clear_browsing_data_dialog_button" + android:textAllCaps="true" + android:textColor="@color/light_active_color" + android:textSize="16sp" /> +</LinearLayout> \ No newline at end of file
diff --git a/chrome/android/java/res/values-v17/styles.xml b/chrome/android/java/res/values-v17/styles.xml index a7605df..4c19ba9 100644 --- a/chrome/android/java/res/values-v17/styles.xml +++ b/chrome/android/java/res/values-v17/styles.xml
@@ -582,6 +582,15 @@ <item name="android:textColor">@android:color/white</item> <item name="android:textSize">20sp</item> </style> + <style name="PrivacyDisclaimerText"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_marginTop">16dp</item> + <item name="android:paddingStart">16dp</item> + <item name="android:paddingEnd">16dp</item> + <item name="android:textSize">16sp</item> + <item name="android:visibility">gone</item> + </style> <!-- New tab page RecyclerView overscroll color --> <style name="NewTabPageRecyclerView">
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 853aabd..2a09616 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -369,7 +369,7 @@ ChromePreferenceManager preferenceManager = ChromePreferenceManager.getInstance(this); // Promos can only be shown when we start with ACTION_MAIN intent and // after FRE is complete. - if (!mIntentWithEffect && FirstRunStatus.getFirstRunFlowComplete(this)) { + if (!mIntentWithEffect && FirstRunStatus.getFirstRunFlowComplete()) { // Only show promos on the second oppurtunity. This is because we show FRE on the // first oppurtunity, and we don't want to show such content back to back. if (preferenceManager.getPromosSkippedOnFirstStart()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/EmbedContentViewActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/EmbedContentViewActivity.java index b6f5918..73601036 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/EmbedContentViewActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/EmbedContentViewActivity.java
@@ -86,7 +86,7 @@ @Override public boolean onCreateOptionsMenu(Menu menu) { boolean retVal = super.onCreateOptionsMenu(menu); - if (!FirstRunStatus.getFirstRunFlowComplete(this)) return retVal; + if (!FirstRunStatus.getFirstRunFlowComplete()) return retVal; return true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillKeyboardAccessoryBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillKeyboardAccessoryBridge.java index a01f2f7..a2109ba 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillKeyboardAccessoryBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillKeyboardAccessoryBridge.java
@@ -144,13 +144,15 @@ * empty too. * @param iconId The resource ID for the icon associated with the suggestion, or 0 for no icon. * @param suggestionId Identifier for the suggestion type. + * @param isDeletable Whether the item can be deleted by the user. */ @CalledByNative private static void addToAutofillSuggestionArray(AutofillSuggestion[] array, int index, - String label, String sublabel, int iconId, int suggestionId, boolean deletable) { + String label, String sublabel, int iconId, int suggestionId, boolean isDeletable) { int drawableId = iconId == 0 ? DropdownItem.NO_ICON : ResourceId.mapToDrawableId(iconId); - array[index] = - new AutofillSuggestion(label, sublabel, drawableId, suggestionId, deletable, false); + array[index] = new AutofillSuggestion(label, sublabel, drawableId, + false /* isIconAtStart */, suggestionId, isDeletable, false /* isMultilineLabel */, + false /* isBoldLabel */); } private native void nativeViewDismissed(long nativeAutofillKeyboardAccessoryView);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java index 8266579..b5adb643 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java
@@ -92,10 +92,19 @@ /** * Shows an Autofill popup with specified suggestions. * @param suggestions Autofill suggestions to be displayed. + * @param isRtl @code true if right-to-left text. + * @param backgroundColor popup background color, or {@code Color.TRANSPARENT} if not specified + * in experiment. + * @param dividerColor color for divider between popup items, or {@code Color.TRANSPARENT} if + * not specified in experiment. + * @param dropdownItemHeight height of each dropdown item in dimension independent pixel units, + * 0 if not specified in experiment. */ @CalledByNative - private void show(AutofillSuggestion[] suggestions, boolean isRtl) { - if (mAutofillPopup != null) mAutofillPopup.filterAndShow(suggestions, isRtl); + private void show(AutofillSuggestion[] suggestions, boolean isRtl, int backgroundColor, + int dividerColor, int dropdownItemHeight) { + if (mAutofillPopup != null) mAutofillPopup.filterAndShow(suggestions, isRtl, + backgroundColor, dividerColor, dropdownItemHeight); } @CalledByNative @@ -122,17 +131,20 @@ * @param label First line of the suggestion. * @param sublabel Second line of the suggestion. * @param iconId The resource ID for the icon associated with the suggestion, or 0 for no icon. + * @param isIconAtStart {@code true} if {@param iconId} is displayed before {@param label}. * @param suggestionId Identifier for the suggestion type. - * @param deletable Whether this item is deletable. + * @param isDeletable Whether the item can be deleted by the user. * @param isLabelMultiline Whether the label should be should over multiple lines. + * @param isLabelBold true if {@param label} should be displayed in {@code Typeface.BOLD}, + * false if {@param label} should be displayed in {@code Typeface.NORMAL}. */ @CalledByNative private static void addToAutofillSuggestionArray(AutofillSuggestion[] array, int index, - String label, String sublabel, int iconId, int suggestionId, boolean deletable, - boolean isLabelMultiline) { + String label, String sublabel, int iconId, boolean isIconAtStart, + int suggestionId, boolean isDeletable, boolean isLabelMultiline, boolean isLabelBold) { int drawableId = iconId == 0 ? DropdownItem.NO_ICON : ResourceId.mapToDrawableId(iconId); - array[index] = new AutofillSuggestion( - label, sublabel, drawableId, suggestionId, deletable, isLabelMultiline); + array[index] = new AutofillSuggestion(label, sublabel, drawableId, isIconAtStart, + suggestionId, isDeletable, isLabelMultiline, isLabelBold); } private native void nativeSuggestionSelected(long nativeAutofillPopupViewAndroid,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java index 43f99ff..3dbf079 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapter.java
@@ -340,6 +340,7 @@ mRegularDownloadItems.filter(mFilter, mFilteredItems); mIncognitoDownloadItems.filter(mFilter, mFilteredItems); mOfflinePageItems.filter(mFilter, mFilteredItems); + clear(false); loadItems(mFilteredItems); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java index 0f669c0..9b4b03b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
@@ -260,7 +260,7 @@ UmaUtils.recordForegroundStartTime(); stopProgressionIfNotAcceptedTermsOfService(); if (!mFreProperties.getBoolean(EXTRA_USE_FRE_FLOW_SEQUENCER)) { - if (FirstRunStatus.getFirstRunFlowComplete(this)) { + if (FirstRunStatus.getFirstRunFlowComplete()) { // This is a parallel flow that needs to be refreshed/re-fired. // Signal the FRE flow completion and re-launch the original intent. completeFirstRunExperience(); @@ -403,7 +403,7 @@ // If default is true then it corresponds to opt-out and false corresponds to opt-in. UmaUtils.recordMetricsReportingDefaultOptIn(!DEFAULT_METRICS_AND_CRASH_REPORTING); sGlue.acceptTermsOfService(allowCrashUpload); - FirstRunStatus.setSkipWelcomePage(FirstRunActivity.this, true); + FirstRunStatus.setSkipWelcomePage(true); flushPersistentData(); stopProgressionIfNotAcceptedTermsOfService(); jumpToPage(mPager.getCurrentItem() + 1);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java index 452f352b..84a67b82 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
@@ -86,7 +86,7 @@ @VisibleForTesting protected boolean isFirstRunFlowComplete() { - return FirstRunStatus.getFirstRunFlowComplete(mActivity); + return FirstRunStatus.getFirstRunFlowComplete(); } @VisibleForTesting @@ -263,13 +263,13 @@ fromIntent != null && TextUtils.equals(fromIntent.getAction(), Intent.ACTION_MAIN); if (!fromChromeIcon && ToSAckedReceiver.checkAnyUserHasSeenToS(context)) return null; - final boolean baseFreComplete = FirstRunStatus.getFirstRunFlowComplete(context); + final boolean baseFreComplete = FirstRunStatus.getFirstRunFlowComplete(); if (!baseFreComplete) { if (forLightweightFre && CommandLine.getInstance().hasSwitch( ChromeSwitches.ENABLE_LIGHTWEIGHT_FIRST_RUN_EXPERIENCE)) { - if (!FirstRunStatus.shouldSkipWelcomePage(context) - && !FirstRunStatus.getLightweightFirstRunFlowComplete(context)) { + if (!FirstRunStatus.shouldSkipWelcomePage() + && !FirstRunStatus.getLightweightFirstRunFlowComplete()) { return createLightweightFirstRunIntent(context, fromChromeIcon); } } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java index 47d230ac..b5237c5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java
@@ -58,7 +58,7 @@ SigninManager signinManager = SigninManager.get(activity.getApplicationContext()); signinManager.onFirstRunCheckDone(); - boolean firstRunFlowComplete = FirstRunStatus.getFirstRunFlowComplete(activity); + boolean firstRunFlowComplete = FirstRunStatus.getFirstRunFlowComplete(); // We skip signin and the FRE if // - FRE is disabled, or // - FRE hasn't been completed, but the user has already seen the ToS in the Setup Wizard. @@ -129,7 +129,7 @@ Log.e(TAG, "Attempt to pass-through without completed FRE"); // Things went wrong -- we want the user to go through the full FRE. - FirstRunStatus.setFirstRunFlowComplete(activity, false); + FirstRunStatus.setFirstRunFlowComplete(false); setFirstRunFlowSignInComplete(activity, false); setFirstRunFlowSignInAccountName(activity, null); setFirstRunFlowSignInSetup(activity, false); @@ -207,7 +207,7 @@ * @param data Resulting FRE properties bundle */ public static void finalizeFirstRunFlowState(Context context, Bundle data) { - FirstRunStatus.setFirstRunFlowComplete(context, true); + FirstRunStatus.setFirstRunFlowComplete(true); setFirstRunFlowSignInAccountName(context, data.getString(FirstRunActivity.RESULT_SIGNIN_ACCOUNT_NAME)); setFirstRunFlowSignInSetup( @@ -221,7 +221,7 @@ public static void updateSigninManagerFirstRunCheckDone(Context context) { SigninManager manager = SigninManager.get(context); if (manager.isSignInAllowed()) return; - if (!FirstRunStatus.getFirstRunFlowComplete(context)) return; + if (!FirstRunStatus.getFirstRunFlowComplete()) return; if (!getFirstRunFlowSignInComplete(context)) return; manager.onFirstRunCheckDone(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java index e62fdea0..7558603 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunStatus.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser.firstrun; -import android.content.Context; - import org.chromium.base.ContextUtils; /** @@ -21,10 +19,9 @@ /** * Sets the "main First Run Experience flow complete" preference. - * @param context Any context * @param isComplete Whether the main First Run Experience flow is complete */ - public static void setFirstRunFlowComplete(Context context, boolean isComplete) { + public static void setFirstRunFlowComplete(boolean isComplete) { ContextUtils.getAppSharedPreferences() .edit() .putBoolean(FIRST_RUN_FLOW_COMPLETE, isComplete) @@ -35,35 +32,38 @@ * Returns whether the main First Run Experience flow is complete. * Note: that might NOT include "intro"/"what's new" pages, but it always * includes ToS and Sign In pages if necessary. - * @param context Any context */ - public static boolean getFirstRunFlowComplete(Context context) { + public static boolean getFirstRunFlowComplete() { return ContextUtils.getAppSharedPreferences() .getBoolean(FIRST_RUN_FLOW_COMPLETE, false); } + // TODO(tedchoc): Remove once downstream callers migrate to non-param version. + public static boolean getFirstRunFlowComplete( + @SuppressWarnings("unused") android.content.Context context) { + return getFirstRunFlowComplete(); + } + /** * Sets the preference to skip the welcome page from the main First Run Experience. - * @param context Any context - * @param isSkip Whether the welcome page should be skpped + * @param isSkip Whether the welcome page should be skpped */ - public static void setSkipWelcomePage(Context context, boolean isSkip) { + public static void setSkipWelcomePage(boolean isSkip) { ContextUtils.getAppSharedPreferences().edit().putBoolean(SKIP_WELCOME_PAGE, isSkip).apply(); } /** * Checks whether the welcome page should be skipped from the main First Run Experience. */ - public static boolean shouldSkipWelcomePage(Context context) { + public static boolean shouldSkipWelcomePage() { return ContextUtils.getAppSharedPreferences().getBoolean(SKIP_WELCOME_PAGE, false); } /** * Sets the "lightweight First Run Experience flow complete" preference. - * @param context Any context * @param isComplete Whether the lightweight First Run Experience flow is complete */ - public static void setLightweightFirstRunFlowComplete(Context context, boolean isComplete) { + public static void setLightweightFirstRunFlowComplete(boolean isComplete) { ContextUtils.getAppSharedPreferences() .edit() .putBoolean(LIGHTWEIGHT_FIRST_RUN_FLOW_COMPLETE, isComplete) @@ -72,9 +72,8 @@ /** * Returns whether the "lightweight First Run Experience flow" is complete. - * @param context Any context */ - public static boolean getLightweightFirstRunFlowComplete(Context context) { + public static boolean getLightweightFirstRunFlowComplete() { return ContextUtils.getAppSharedPreferences().getBoolean( LIGHTWEIGHT_FIRST_RUN_FLOW_COMPLETE, false); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java index a0cba00a..9e03c148 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java
@@ -78,7 +78,7 @@ @Override public void completeFirstRunExperience() { - FirstRunStatus.setLightweightFirstRunFlowComplete(LightweightFirstRunActivity.this, true); + FirstRunStatus.setLightweightFirstRunFlowComplete(true); Intent intent = new Intent(); intent.putExtras(mFreProperties); finishAllTheActivities(getLocalClassName(), Activity.RESULT_OK, intent);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java index 870b82b9..b44518a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java
@@ -104,6 +104,6 @@ @Override public boolean shouldSkipPageOnCreate(Context appContext) { - return FirstRunStatus.shouldSkipWelcomePage(appContext); + return FirstRunStatus.shouldSkipWelcomePage(); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java index 3bf3d55b..f044d02 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java
@@ -30,6 +30,14 @@ * via this method. */ public void onHistoryDeleted(); + + /** + * Called after querying history to indicate whether other forms of browsing history were + * found. + * @param hasOtherForms Whether other forms of browsing history were found. + * @param hasSyncedResults Whether synced results were found. + */ + public void hasOtherFormsOfBrowsingData(boolean hasOtherForms, boolean hasSyncedResults); } private final BrowsingHistoryObserver mObserver; @@ -114,6 +122,11 @@ mObserver.onHistoryDeleted(); } + @CalledByNative + public void hasOtherFormsOfBrowsingData(boolean hasOtherForms, boolean hasSyncedResults) { + mObserver.hasOtherFormsOfBrowsingData(hasOtherForms, hasSyncedResults); + } + private native long nativeInit(Profile profile); private native void nativeDestroy(long nativeBrowsingHistoryBridge); private native void nativeQueryHistory(long nativeBrowsingHistoryBridge,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java index 5ad87ce..6d53e979 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
@@ -5,28 +5,48 @@ package org.chromium.chrome.browser.history; import android.support.v7.widget.RecyclerView.ViewHolder; +import android.text.SpannableString; +import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.TextView; +import org.chromium.base.ContextUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.history.BrowsingHistoryBridge.BrowsingHistoryObserver; import org.chromium.chrome.browser.widget.DateDividedAdapter; import org.chromium.chrome.browser.widget.selection.SelectableItemViewHolder; import org.chromium.chrome.browser.widget.selection.SelectionDelegate; +import org.chromium.components.signin.ChromeSigninController; +import org.chromium.ui.text.NoUnderlineClickableSpan; +import org.chromium.ui.text.SpanApplier; import java.util.List; +import java.util.Locale; /** * Bridges the user's browsing history and the UI used to display it. */ public class HistoryAdapter extends DateDividedAdapter implements BrowsingHistoryObserver { private static final String EMPTY_QUERY = ""; + private static final String LEARN_MORE_LINK = + "https://support.google.com/chrome/?p=sync_history&hl=" + + Locale.getDefault().toString(); + private static final String GOOGLE_HISTORY_LINK = "history.google.com"; private final SelectionDelegate<HistoryItem> mSelectionDelegate; private final BrowsingHistoryBridge mBridge; private final HistoryManager mManager; + private TextView mSignedInNotSyncedTextView; + private TextView mSignedInSyncedTextView; + private TextView mOtherFormsOfBrowsingHistoryTextView; + + private boolean mHasOtherFormsOfBrowsingData; + private boolean mHasSyncedData; + private boolean mHeaderInflated; private boolean mDestroyed; public HistoryAdapter(SelectionDelegate<HistoryItem> delegate, HistoryManager manager) { @@ -101,7 +121,11 @@ // destroyed to avoid unnecessary work. if (mDestroyed) return; - loadItems(items); + clear(true); + if (items.size() > 0) { + addHeader(); + loadItems(items); + } } @Override @@ -111,4 +135,69 @@ // This currently removes all items and re-issues a query. initialize(); } + + @Override + public void hasOtherFormsOfBrowsingData(boolean hasOtherForms, boolean hasSyncedResults) { + mHasOtherFormsOfBrowsingData = hasOtherForms; + mHasSyncedData = hasSyncedResults; + setPrivacyDisclaimerVisibility(); + } + + @Override + protected HeaderViewHolder createHeader(ViewGroup parent) { + ViewGroup v = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate( + R.layout.history_header, parent, false); + mHeaderInflated = true; + + View cbdButton = v.findViewById(R.id.clear_browsing_data_button); + cbdButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mManager.openClearBrowsingDataPreference(); + } + }); + + mSignedInNotSyncedTextView = (TextView) v.findViewById(R.id.signed_in_not_synced); + setPrivacyDisclaimerText(mSignedInNotSyncedTextView, + R.string.android_history_no_synced_results, LEARN_MORE_LINK); + + mSignedInSyncedTextView = (TextView) v.findViewById(R.id.signed_in_synced); + setPrivacyDisclaimerText(mSignedInSyncedTextView, + R.string.android_history_has_synced_results, LEARN_MORE_LINK); + + mOtherFormsOfBrowsingHistoryTextView = (TextView) v.findViewById( + R.id.other_forms_of_browsing_history); + setPrivacyDisclaimerText(mOtherFormsOfBrowsingHistoryTextView, + R.string.android_history_other_forms_of_history, GOOGLE_HISTORY_LINK); + + setPrivacyDisclaimerVisibility(); + + return new HeaderViewHolder(v); + } + + private void setPrivacyDisclaimerText(TextView view, int stringId, final String url) { + NoUnderlineClickableSpan link = new NoUnderlineClickableSpan() { + @Override + public void onClick(View view) { + mManager.openUrl(url, null, true); + } + }; + SpannableString spannable = SpanApplier.applySpans( + view.getResources().getString(stringId), + new SpanApplier.SpanInfo("<link>", "</link>", link)); + view.setText(spannable); + view.setMovementMethod(LinkMovementMethod.getInstance()); + } + + private void setPrivacyDisclaimerVisibility() { + if (!mHeaderInflated) return; + + boolean isSignedIn = + ChromeSigninController.get(ContextUtils.getApplicationContext()).isSignedIn(); + mSignedInNotSyncedTextView.setVisibility( + !mHasSyncedData && isSignedIn ? View.VISIBLE : View.GONE); + mSignedInSyncedTextView.setVisibility(mHasSyncedData ? View.VISIBLE : View.GONE); + mOtherFormsOfBrowsingHistoryTextView.setVisibility( + mHasOtherFormsOfBrowsingData ? View.VISIBLE : View.GONE); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItem.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItem.java index 8649a27..55263e1e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItem.java
@@ -85,7 +85,7 @@ * Navigates a tab to this item's URL. */ public void open() { - if (mManager != null) mManager.openItem(mUrl, null, false); + if (mManager != null) mManager.openUrl(mUrl, null, false); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java index f2738ad..8a662f0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
@@ -17,6 +17,8 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.document.ChromeLauncherActivity; +import org.chromium.chrome.browser.preferences.PreferencesLauncher; +import org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataPreferences; import org.chromium.chrome.browser.util.IntentUtils; import org.chromium.chrome.browser.widget.TintedDrawable; import org.chromium.chrome.browser.widget.selection.SelectableListLayout; @@ -114,14 +116,14 @@ } /** - * Open the history item. - * @param url The URL of the history item. - * @param isIncognito Whether to open the history item in an incognito tab. If null, the tab + * Open the provided url. + * @param url The url to open. + * @param isIncognito Whether to open the url in an incognito tab. If null, the tab * will open in the current tab model. * @param createNewTab Whether a new tab should be created. If false, the item will clobber the * the current tab. */ - public void openItem(String url, Boolean isIncognito, boolean createNewTab) { + public void openUrl(String url, Boolean isIncognito, boolean createNewTab) { // Construct basic intent. Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); viewIntent.putExtra(Browser.EXTRA_APPLICATION_ID, @@ -151,9 +153,18 @@ IntentHandler.startActivityForTrustedIntent(viewIntent, mActivity); } + /** + * Opens the clear browsing data preference. + */ + public void openClearBrowsingDataPreference() { + Intent intent = PreferencesLauncher.createIntentForSettingsPage(mActivity, + ClearBrowsingDataPreferences.class.getName()); + IntentUtils.safeStartActivity(mActivity, intent); + } + private void openItemsInNewTabs(List<HistoryItem> items, boolean isIncognito) { for (HistoryItem item : items) { - openItem(item.getUrl(), isIncognito, true); + openUrl(item.getUrl(), isIncognito, true); } } } \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java index 450ca24..461fd50 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
@@ -68,7 +68,7 @@ private final Intent mEnterVRIntent; private boolean mVrAvailable; - private boolean mDaydreamReadyDevice; + private boolean mCardboardSupportOnly; private Boolean mVrShellEnabled; private VrClassesBuilder mVrClassesBuilder; @@ -90,30 +90,42 @@ public VrShellDelegate(ChromeTabbedActivity activity) { mActivity = activity; - mVrAvailable = createVrClassesBuilder() && isVrCoreCompatible() && createVrDaydreamApi() - && mVrDaydreamApi.isDaydreamReadyDevice(); - if (mVrAvailable) { - mEnterVRIntent = mVrDaydreamApi.createVrIntent( - new ComponentName(mActivity, VR_ACTIVITY_ALIAS)); + // TODO(bshe): refactor code so that mCardboardSupportOnly does not depend on mVrAvailable + // and mVrAvailable does not depend on createVrDaydreamApi. + mVrAvailable = createVrClassesBuilder() && isVrCoreCompatible() && createVrDaydreamApi(); + // Make sure mVrDaydreamApi is created as createVrDaydreamApi might not get called above. + if (mVrDaydreamApi == null) createVrDaydreamApi(); + // Only Cardboard mode is supported on non-daydream devices. + mCardboardSupportOnly = !mVrDaydreamApi.isDaydreamReadyDevice(); + + if (mVrAvailable && !mCardboardSupportOnly) { + mEnterVRIntent = + mVrDaydreamApi.createVrIntent(new ComponentName(mActivity, VR_ACTIVITY_ALIAS)); } else { mEnterVRIntent = null; } - mTabObserver = new EmptyTabObserver() { - @Override - public void onContentChanged(Tab tab) { - if (tab.getNativePage() != null || tab.isShowingSadTab()) { - // For now we don't handle native pages. crbug.com/661609 - shutdownVR(false, true); + if (mVrAvailable) { + mTabObserver = new EmptyTabObserver() { + @Override + public void onContentChanged(Tab tab) { + if (tab.getNativePage() != null || tab.isShowingSadTab()) { + // For now we don't handle native pages. crbug.com/661609. + shutdownVR(false, !mCardboardSupportOnly /* showTransition */); + } } - } - @Override - public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) { - // TODO(mthiesse): Update the native WebContents pointer and compositor. This - // doesn't seem to get triggered in VR Shell currently, but that's likely to change - // when we have omnibar navigation. - } - }; + @Override + public void onWebContentsSwapped( + Tab tab, boolean didStartLoad, boolean didFinishLoad) { + // TODO(mthiesse): Update the native WebContents pointer and compositor. This + // doesn't seem to get triggered in VR Shell currently, but that's likely to + // change + // when we have omnibar navigation. + } + }; + } else { + mTabObserver = null; + } } /** @@ -149,7 +161,8 @@ * Handle a VR intent, entering VR in the process unless we're unable to. */ public void enterVRFromIntent(Intent intent) { - if (!mVrAvailable) return; + // Vr Intent is only used on Daydream devices. + if (!mVrAvailable || mCardboardSupportOnly) return; assert isVrIntent(intent); if (mListeningForWebVrActivateBeforePause && !mRequestedWebVR) { nativeDisplayActivate(mNativeVrShellDelegate); @@ -269,7 +282,7 @@ if (mInVr) return ENTER_VR_NOT_NECESSARY; if (!canEnterVR(mActivity.getActivityTab())) return ENTER_VR_CANCELLED; - if (!mVrDaydreamApi.isDaydreamCurrentViewer()) { + if (mCardboardSupportOnly || !mVrDaydreamApi.isDaydreamCurrentViewer()) { // Avoid using launchInVr which would trigger DON flow regardless current viewer type // due to the lack of support for unexported activities. return enterVR() ? ENTER_VR_SUCCEEDED : ENTER_VR_CANCELLED; @@ -283,10 +296,16 @@ private boolean exitWebVR() { if (!mInVr) return false; mVrShell.setWebVrModeEnabledOnUI(false); - // TODO(bajones): Once VR Shell can be invoked outside of WebVR this - // should no longer exit the shell outright. Need a way to determine - // how VrShell was created. - shutdownVR(false, !isVrShellEnabled()); + if (mCardboardSupportOnly) { + // Transition screen is not available for Cardboard only (non-Daydream) devices. + // TODO(bshe): Fix this once b/33490788 is fixed. + shutdownVR(false, false); + } else { + // TODO(bajones): Once VR Shell can be invoked outside of WebVR this + // should no longer exit the shell outright. Need a way to determine + // how VrShell was created. + shutdownVR(false, !isVrShellEnabled()); + } return true; } @@ -300,7 +319,8 @@ */ public void maybeResumeVR() { if (!mVrAvailable) return; - if (isVrShellEnabled() || mListeningForWebVrActivateBeforePause) { + if ((isVrShellEnabled() || mListeningForWebVrActivateBeforePause) + && !mCardboardSupportOnly) { registerDaydreamIntent(); } // If this is still set, it means the user backed out of the DON flow, and we won't be @@ -334,7 +354,7 @@ } finally { StrictMode.setThreadPolicy(oldPolicy); } - } else if (mVrDaydreamApi.isDaydreamCurrentViewer() + } else if (!mCardboardSupportOnly && mVrDaydreamApi.isDaydreamCurrentViewer() && mLastVRExit + REENTER_VR_TIMEOUT_MS > SystemClock.uptimeMillis()) { enterVRIfNecessary(); } @@ -345,16 +365,19 @@ */ public void maybePauseVR() { if (!mVrAvailable) return; - unregisterDaydreamIntent(); - // When the active web page has a vrdisplayactivate event handler, - // mListeningForWebVrActivate should be set to true, which means a vrdisplayactive event - // should be fired once DON flow finished. However, DON flow will pause our activity, which - // makes the active page becomes invisible. And the event fires before the active page - // becomes visible again after DON finished. So here we remember the value of - // mListeningForWebVrActivity before pause and use this value to decide if vrdisplayactivate - // event should be dispatched in enterVRFromIntent. - mListeningForWebVrActivateBeforePause = mListeningForWebVrActivate; + if (!mCardboardSupportOnly) { + unregisterDaydreamIntent(); + + // When the active web page has a vrdisplayactivate event handler, + // mListeningForWebVrActivate should be set to true, which means a vrdisplayactive event + // should be fired once DON flow finished. However, DON flow will pause our activity, + // which makes the active page becomes invisible. And the event fires before the active + // page becomes visible again after DON finished. So here we remember the value of + // mListeningForWebVrActivity before pause and use this value to decide if + // vrdisplayactivate event should be dispatched in enterVRFromIntent. + mListeningForWebVrActivateBeforePause = mListeningForWebVrActivate; + } if (mNonPresentingGvrContext != null) { mNonPresentingGvrContext.pause(); } @@ -422,7 +445,9 @@ @CalledByNative private void setListeningForWebVrActivate(boolean listening) { - if (!mVrAvailable) return; + // Non-Daydream devices may not have the concept of display activate. So disable + // mListeningForWebVrActivate for them. + if (!mVrAvailable || mCardboardSupportOnly) return; mListeningForWebVrActivate = listening; if (listening) { registerDaydreamIntent(); @@ -548,10 +573,13 @@ * @return Whether or not VR Shell is currently enabled. */ public boolean isVrShellEnabled() { + // Disable VR Shell for Cardboard only (non-Daydream) devices. + // TODO(amp|bshe): Investigate if removing LibraryLoader.isInitialized from the check is + // possible. + if (!mVrAvailable || mCardboardSupportOnly || !LibraryLoader.isInitialized()) { + return false; + } if (mVrShellEnabled == null) { - if (!LibraryLoader.isInitialized()) { - return false; - } mVrShellEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.VR_SHELL); } return mVrShellEnabled;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java index 003498df..82b34141 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java
@@ -105,6 +105,12 @@ } } + protected static class HeaderViewHolder extends RecyclerView.ViewHolder { + public HeaderViewHolder(View itemView) { + super(itemView); + } + } + /** * A bucket of items with the same date. */ @@ -116,16 +122,16 @@ private int mIndex; private boolean mIsSorted; + private boolean mIsListHeader; - public ItemGroup(TimedItem item) { - mDate = new Date(item.getTimestamp()); - mItems.add(item); + public ItemGroup(long timestamp) { + mDate = new Date(timestamp); mIsSorted = true; } public void addItem(TimedItem item) { mItems.add(item); - mIsSorted = false; + mIsSorted = mItems.size() == 1; } public void removeItem(TimedItem item) { @@ -161,13 +167,15 @@ * @return The size of this group. */ public int size() { + if (mIsListHeader) return 1; + // Plus 1 to account for the date header. return mItems.size() + 1; } public TimedItem getItemAt(int index) { - // 0 is allocated to the date header. - if (index == 0) return null; + // 0 is allocated to the date header. The list header has no items. + if (index == 0 || mIsListHeader) return null; sortIfNeeded(); return mItems.get(index - 1); @@ -203,10 +211,12 @@ private static final AsyncTask<Void, Void, Calendar> sCal1 = createCalendar(); private static final AsyncTask<Void, Void, Calendar> sCal2 = createCalendar(); + public static final int TYPE_HEADER = -1; public static final int TYPE_DATE = 0; public static final int TYPE_NORMAL = 1; private int mSize; + private boolean mHasListHeader; private SortedSet<ItemGroup> mGroups = new TreeSet<>(new Comparator<ItemGroup>() { @Override public int compare(ItemGroup lhs, ItemGroup rhs) { @@ -221,6 +231,14 @@ protected abstract ViewHolder createViewHolder(ViewGroup parent); /** + * Creates a {@link HeaderViewHolder} in the given parent. + * @see #onCreateViewHolder(ViewGroup, int) + */ + protected HeaderViewHolder createHeader(ViewGroup parent) { + return null; + } + + /** * Binds the {@link ViewHolder} with the given {@link TimedItem}. * @see #onBindViewHolder(ViewHolder, int) */ @@ -233,15 +251,10 @@ protected abstract int getTimedItemViewResId(); /** - * Loads a list of {@link TimedItem}s to this adapter. Any previous data will be removed. + * Loads a list of {@link TimedItem}s to this adapter. Previous data will not be removed. Call + * {@link #clear(boolean)} to remove previous items. */ public void loadItems(List<? extends TimedItem> timedItems) { - mSize = 0; - - // Unset the positions of all items in the list. - for (ItemGroup group : mGroups) group.resetPosition(); - mGroups.clear(); - for (TimedItem timedItem : timedItems) { Date date = new Date(timedItem.getTimestamp()); boolean found = false; @@ -256,7 +269,9 @@ if (!found) { // Create a new ItemGroup with the date for the new item. This increases the // size by two because we add new views for the date and the item itself. - mGroups.add(new ItemGroup(timedItem)); + ItemGroup newGroup = new ItemGroup(timedItem.getTimestamp()); + newGroup.addItem(timedItem); + mGroups.add(newGroup); mSize += 2; } } @@ -272,12 +287,32 @@ } /** - * Removes all items from this adapter. + * Adds a header as the first group in this adapter. */ - public void clear() { + public void addHeader() { + assert mSize == 0; + + ItemGroup header = new ItemGroup(Long.MAX_VALUE); + header.mIsListHeader = true; + + mGroups.add(header); + mSize++; + mHasListHeader = true; + } + + /** + * Removes all items from this adapter. + * @param notifyDataSetChanged Whether to notify that the data set has been changed. + */ + public void clear(boolean notifyDataSetChanged) { mSize = 0; + mHasListHeader = false; + + // Unset the positions of all items in the list. + for (ItemGroup group : mGroups) group.resetPosition(); mGroups.clear(); - notifyDataSetChanged(); + + if (notifyDataSetChanged) notifyDataSetChanged(); } @Override @@ -289,8 +324,8 @@ } /** - * Gets the item at the given position. For date headers, {@link TimedItem} will be null; for - * normal items, {@link Date} will be null. + * Gets the item at the given position. For date headers and the list header, {@link TimedItem} + * will be null; for normal items, {@link Date} will be null. */ public Pair<Date, TimedItem> getItemAt(int position) { Pair<ItemGroup, Integer> pair = getGroupAt(position); @@ -301,7 +336,13 @@ @Override public final int getItemViewType(int position) { Pair<ItemGroup, Integer> pair = getGroupAt(position); - return pair.second == 0 ? TYPE_DATE : TYPE_NORMAL; + if (pair.second == TYPE_HEADER) { + return TYPE_HEADER; + } else if (pair.second == 0) { + return TYPE_DATE; + } else { + return TYPE_NORMAL; + } } @Override @@ -311,7 +352,10 @@ getTimedItemViewResId(), parent, false)); } else if (viewType == TYPE_NORMAL) { return createViewHolder(parent); + } else if (viewType == TYPE_HEADER) { + return createHeader(parent); } + assert false; return null; } @@ -320,7 +364,7 @@ Pair<Date, TimedItem> pair = getItemAt(position); if (holder instanceof DateViewHolder) { ((DateViewHolder) holder).setDate(pair.first); - } else { + } else if (!(holder instanceof HeaderViewHolder)) { bindViewHolderForTimedItem(holder, pair.second); } } @@ -335,6 +379,10 @@ */ protected Pair<ItemGroup, Integer> getGroupAt(int position) { // TODO(ianwen): Optimize the performance if the number of groups becomes too large. + if (mHasListHeader && position == 0) { + return new Pair<>(mGroups.first(), TYPE_HEADER); + } + int i = position; for (ItemGroup group : mGroups) { if (i >= group.size()) {
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 381b9a8..0a89154 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -537,6 +537,18 @@ <message name="IDS_CLEAR_BROWSING_DATA_IMPORTANT_DIALOG_BUTTON" desc="The text of the button to perform the clear action in the dialog presenting the user with 'important' sites that they can exclude from clearing."> Clear </message> + <message name="IDS_OPEN_CLEAR_BROWSING_DATA_DIALOG_BUTTON" desc="Title of the button that will open the clear browsing data dialog."> + Clear browsing data… + </message> + <message name="IDS_ANDROID_HISTORY_NO_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it does not include visits from other devices."> + Showing history from this device. <ph name="BEGIN_LINK"><link></ph>Learn more<ph name="END_LINK"></link></ph>. + </message> + <message name="IDS_ANDROID_HISTORY_HAS_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it is showing visits synced from other devices."> + Showing history from your signed-in devices. <ph name="BEGIN_LINK"><link></ph>Learn more<ph name="END_LINK"></link></ph>. + </message> + <message name="IDS_ANDROID_HISTORY_OTHER_FORMS_OF_HISTORY" desc="The notification at the top of the history page indicating that deleting Chrome browsing history will not delete other forms of history stored at Google My Activity."> + Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK"><link></ph>history.google.com<ph name="END_LINK"></link></ph>. + </message> <message name="IDS_USAGE_AND_CRASH_REPORTS_TITLE" desc="Title for 'Usage and crash reports' preference"> Usage and crash reports
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java index 3fa8f6b..3a73a3c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.autofill; +import android.graphics.Color; import android.test.suitebuilder.annotation.SmallTest; import android.view.View; @@ -67,7 +68,9 @@ mWindowAndroid = new ActivityWindowAndroid(activity); mAutofillPopup = new AutofillPopup(activity, anchorView, mMockAutofillCallback); - mAutofillPopup.filterAndShow(new AutofillSuggestion[0], false); + mAutofillPopup.filterAndShow(new AutofillSuggestion[0], false /* isRtl */, + Color.TRANSPARENT /* backgroundColor */, + Color.TRANSPARENT /* dividerColor */, 0 /* dropdownItemHeight */); } }); } @@ -107,21 +110,24 @@ private AutofillSuggestion[] createTwoAutofillSuggestionArray() { return new AutofillSuggestion[] { new AutofillSuggestion("Sherlock Holmes", "221B Baker Street", DropdownItem.NO_ICON, - 42, false, false), - new AutofillSuggestion( - "Arthur Dent", "West Country", DropdownItem.NO_ICON, 43, false, false), + false, 42, false, false, false), + new AutofillSuggestion("Arthur Dent", "West Country", DropdownItem.NO_ICON, + false, 43, false, false, false), }; } private AutofillSuggestion[] createFiveAutofillSuggestionArray() { return new AutofillSuggestion[] { new AutofillSuggestion("Sherlock Holmes", "221B Baker Street", DropdownItem.NO_ICON, - 42, false, false), - new AutofillSuggestion( - "Arthur Dent", "West Country", DropdownItem.NO_ICON, 43, false, false), - new AutofillSuggestion("Arthos", "France", DropdownItem.NO_ICON, 44, false, false), - new AutofillSuggestion("Porthos", "France", DropdownItem.NO_ICON, 45, false, false), - new AutofillSuggestion("Aramis", "France", DropdownItem.NO_ICON, 46, false, false), + false, 42, false, false, false), + new AutofillSuggestion("Arthur Dent", "West Country", DropdownItem.NO_ICON, + false, 43, false, false, false), + new AutofillSuggestion("Arthos", "France", DropdownItem.NO_ICON, + false, 44, false, false, false), + new AutofillSuggestion("Porthos", "France", DropdownItem.NO_ICON, + false, 45, false, false, false), + new AutofillSuggestion("Aramis", "France", DropdownItem.NO_ICON, + false, 46, false, false, false), }; } @@ -130,7 +136,9 @@ ThreadUtils.runOnUiThreadBlocking(new Runnable() { @Override public void run() { - mAutofillPopup.filterAndShow(suggestions, false); + mAutofillPopup.filterAndShow(suggestions, false /* isRtl */, + Color.TRANSPARENT /* backgroundColor */, + Color.TRANSPARENT /* dividerColor */, 0 /* dropdownItemHeight */); } }); CriteriaHelper.pollInstrumentationThread(new Criteria() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsTest.java index 850d402..5cc6612a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestIncompleteContactDetailsTest.java
@@ -8,6 +8,7 @@ import android.test.suitebuilder.annotation.MediumTest; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.FlakyTest; import org.chromium.chrome.R; import org.chromium.chrome.browser.autofill.AutofillTestHelper; import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; @@ -40,7 +41,11 @@ } /** Attempt to update the contact information with invalid data and cancel the transaction. */ - @MediumTest + /* + * @MediumTest + * Bug=crbug.com/673299 + */ + @FlakyTest @Feature({"Payments"}) public void testEditIncompleteContactAndCancel() throws InterruptedException, ExecutionException, TimeoutException {
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 7f16b62..d8f0e647 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -2164,6 +2164,9 @@ <message name="IDS_KIOSK_APPS_BUTTON" desc="Text shown on a button that brings up the kiosk apps menu on login screen"> Apps </message> + <message name="IDS_LOCK_SCREEN_TASK_MANAGER_NAME" desc="The name of the lock screen as it appears in the task manager. This will be prefixed with another string, such as 'Extension: ' (see IDS_TASK_MANAGER_EXTENSION_PREFIX)"> + Lock Screen + </message> <message name="IDS_LOGIN_USER_ADDING_BANNER" desc="Text shown on a banner in user adding screen."> Add an account to multiple sign-in. All signed-in accounts can be accessed without a password, so this feature should only be used with trusted accounts. </message>
diff --git a/chrome/app/mash/mash_runner.cc b/chrome/app/mash/mash_runner.cc index ddcb260..68f7dac 100644 --- a/chrome/app/mash/mash_runner.cc +++ b/chrome/app/mash/mash_runner.cc
@@ -5,6 +5,7 @@ #include "chrome/app/mash/mash_runner.h" #include "base/at_exit.h" +#include "base/base_paths.h" #include "base/bind.h" #include "base/command_line.h" #include "base/debug/debugger.h" @@ -13,6 +14,7 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/path_service.h" #include "base/process/launch.h" #include "base/run_loop.h" #include "base/task_scheduler/task_scheduler.h" @@ -94,8 +96,9 @@ base::CommandLine* command_line) override { if (target.name() == kChromeMashServiceName || target.name() == content::mojom::kBrowserServiceName) { - command_line->SetProgram( - base::CommandLine::ForCurrentProcess()->GetProgram()); + base::FilePath exe_path; + base::PathService::Get(base::FILE_EXE, &exe_path); + command_line->SetProgram(exe_path); } if (target.name() != content::mojom::kBrowserServiceName) { // If running anything other than the browser process, launch a mash
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc index 3002395..d847c10 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -136,10 +136,13 @@ // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; variations::AppendVariationHeaders( search_term_fetcher_->GetOriginalURL(), false, // Impossible to be incognito at this point. - false, &headers); + false, is_signed_in, &headers); search_term_fetcher_->SetExtraRequestHeaders(headers.ToString()); SetDiscourseContextAndAddToHeader(*context_);
diff --git a/chrome/browser/android/history/browsing_history_bridge.cc b/chrome/browser/android/history/browsing_history_bridge.cc index 9db2b17..220fe9f 100644 --- a/chrome/browser/android/history/browsing_history_bridge.cc +++ b/chrome/browser/android/history/browsing_history_bridge.cc
@@ -43,7 +43,11 @@ history::QueryOptions options; options.max_count = kMaxQueryCount; - options.end_time = base::Time::FromJavaTime(j_query_end_time); + if (j_query_end_time == 0) { + options.end_time = base::Time(); + } else { + options.end_time = base::Time::FromJavaTime(j_query_end_time); + } options.duplicate_policy = history::QueryOptions::REMOVE_DUPLICATES_PER_DAY; browsing_history_service_->QueryHistory( @@ -138,7 +142,9 @@ void BrowsingHistoryBridge::HasOtherFormsOfBrowsingHistory( bool has_other_forms, bool has_synced_results) { - // TODO(twellington): implement + JNIEnv* env = base::android::AttachCurrentThread(); + Java_BrowsingHistoryBridge_hasOtherFormsOfBrowsingData( + env, j_history_service_obj_.obj(), has_other_forms, has_synced_results); } bool RegisterBrowsingHistoryBridge(JNIEnv* env) {
diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browser/android/metrics/uma_session_stats.cc index d2ce89b..c318ddb 100644 --- a/chrome/browser/android/metrics/uma_session_stats.cc +++ b/chrome/browser/android/metrics/uma_session_stats.cc
@@ -168,8 +168,11 @@ active_group.name = metrics::HashName(trial_name_utf8); for (int experiment_id : experiment_ids) { active_group.group = metrics::HashName(base::IntToString(experiment_id)); + // Since external experiments are not based on Chrome's low entropy source, + // they are only sent to Google web properties for signed in users to make + // sure that this couldn't be used to identify a user that's not signed in. variations::AssociateGoogleVariationIDForceHashes( - variations::GOOGLE_WEB_PROPERTIES, active_group, + variations::GOOGLE_WEB_PROPERTIES_SIGNED_IN, active_group, static_cast<variations::VariationID>(experiment_id)); group_name_hashes.push_back(active_group.group); }
diff --git a/chrome/browser/chrome_browser_main_extra_parts_exo.cc b/chrome/browser/chrome_browser_main_extra_parts_exo.cc index 01df0be..af9342b 100644 --- a/chrome/browser/chrome_browser_main_extra_parts_exo.cc +++ b/chrome/browser/chrome_browser_main_extra_parts_exo.cc
@@ -131,6 +131,7 @@ display_ = base::MakeUnique<exo::Display>(arc_notification_surface_manager_.get()); wayland_server_ = exo::wayland::Server::Create(display_.get()); + // Wayland server creation can fail if XDG_RUNTIME_DIR is not set correctly. if (wayland_server_) wayland_watcher_ = base::MakeUnique<WaylandWatcher>(wayland_server_.get()); }
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 85b53d1..e04aed9 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -877,14 +877,22 @@ "login/ui/models/user_board_model.cc", "login/ui/models/user_board_model.h", "login/ui/proxy_settings_dialog.cc", + "login/ui/shared_web_view.cc", + "login/ui/shared_web_view.h", + "login/ui/shared_web_view_factory.cc", + "login/ui/shared_web_view_factory.h", "login/ui/simple_web_view_dialog.cc", "login/ui/simple_web_view_dialog.h", "login/ui/user_adding_screen.cc", "login/ui/user_adding_screen.h", "login/ui/user_adding_screen_input_methods_controller.cc", "login/ui/user_adding_screen_input_methods_controller.h", + "login/ui/web_contents_forced_title.cc", + "login/ui/web_contents_forced_title.h", "login/ui/web_contents_set_background_color.cc", "login/ui/web_contents_set_background_color.h", + "login/ui/web_view_handle.cc", + "login/ui/web_view_handle.h", "login/ui/webui_login_display.cc", "login/ui/webui_login_display.h", "login/ui/webui_login_view.cc",
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc index f962b73..4a7aa6d 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -61,7 +61,8 @@ // WebUIScreenLocker implementation. WebUIScreenLocker::WebUIScreenLocker(ScreenLocker* screen_locker) - : screen_locker_(screen_locker), + : WebUILoginView(WebViewSettings()), + screen_locker_(screen_locker), network_state_helper_(new login::NetworkStateHelper), weak_factory_(this) { set_should_emit_login_prompt_visible(false); @@ -88,7 +89,7 @@ } // If LockScreen() was called, we need to clear the signin screen handler // delegate set in ShowSigninScreen so that it no longer points to us. - if (login_display_.get()) + if (login_display_.get() && GetOobeUI()) GetOobeUI()->ResetSigninScreenHandlerDelegate(); if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) { @@ -107,7 +108,7 @@ lock_window_->AddObserver(this); Init(); - content::WebContentsObserver::Observe(webui_login_->GetWebContents()); + content::WebContentsObserver::Observe(web_view()->GetWebContents()); lock_window_->SetContentsView(this); lock_window_->SetBounds(bounds); @@ -171,7 +172,7 @@ void WebUIScreenLocker::FocusUserPod() { if (!webui_ready_) return; - webui_login_->RequestFocus(); + web_view()->RequestFocus(); GetWebUI()->CallJavascriptFunctionUnsafe( "cr.ui.Oobe.forceLockedUserPodFocus"); }
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index 9ebe8f3..e5e2949 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -269,6 +269,13 @@ void UserSelectionScreen::SetHandler(LoginDisplayWebUIHandler* handler) { handler_ = handler; + + if (handler_) { + // Forcibly refresh all of the user images, as the |handler_| instance may + // have been reused. + for (user_manager::User* user : users_) + handler_->OnUserImageChanged(*user); + } } void UserSelectionScreen::SetView(UserBoardView* view) {
diff --git a/chrome/browser/chromeos/login/signin_screen_controller.h b/chrome/browser/chromeos/login/signin_screen_controller.h index 6b95adc..b60cb2f5 100644 --- a/chrome/browser/chromeos/login/signin_screen_controller.h +++ b/chrome/browser/chromeos/login/signin_screen_controller.h
@@ -23,6 +23,10 @@ // Class that manages control flow between wizard screens. Wizard controller // interacts with screen controllers to move the user between screens. +// +// This class is allocated when the signin or lock screen is actually visible to +// the user. It is a 'per-session' class; SignInScreenHandler, in comparsion, is +// tied to the WebContents lifetime and therefore may live beyond this class. class SignInScreenController : public user_manager::RemoveUserDelegate, public content::NotificationObserver { public:
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc index c8bb5f6..2b6122d 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -1141,7 +1141,7 @@ params.delegate = new LoginWidgetDelegate(login_window_); login_window_->Init(params); - login_view_ = new WebUILoginView(); + login_view_ = new WebUILoginView(WebUILoginView::WebViewSettings()); login_view_->Init(); if (login_view_->webui_visible()) OnLoginPromptVisible();
diff --git a/chrome/browser/chromeos/login/ui/shared_web_view.cc b/chrome/browser/chromeos/login/ui/shared_web_view.cc new file mode 100644 index 0000000..e2d14be4 --- /dev/null +++ b/chrome/browser/chromeos/login/ui/shared_web_view.cc
@@ -0,0 +1,81 @@ +// Copyright 2016 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 "chrome/browser/chromeos/login/ui/shared_web_view.h" + +#include "chrome/browser/chrome_notification_types.h" +#include "chrome/browser/chromeos/login/ui/web_view_handle.h" +#include "chrome/browser/profiles/profile.h" +#include "content/public/browser/notification_service.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host.h" +#include "content/public/browser/web_contents.h" +#include "ui/views/controls/webview/webview.h" + +namespace chromeos { + +SharedWebView::SharedWebView(Profile* profile) : profile_(profile) { + registrar_.Add(this, chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, + content::NotificationService::AllSources()); + memory_pressure_listener_ = base::MakeUnique<base::MemoryPressureListener>( + base::Bind(&SharedWebView::OnMemoryPressure, base::Unretained(this))); +} + +SharedWebView::~SharedWebView() {} + +void SharedWebView::Shutdown() { + web_view_handle_ = nullptr; +} + +bool SharedWebView::Get(const GURL& url, + scoped_refptr<WebViewHandle>* out_handle) { + // At the moment only one shared WebView instance is supported per profile. + DCHECK(web_view_url_.is_empty() || web_view_url_ == url); + web_view_url_ = url; + + // Ensure the WebView is not being reused simultaneously. + DCHECK(!web_view_handle_ || web_view_handle_->HasOneRef()); + + // Clear cached reference if it is no longer valid (ie, destroyed in task + // manager). + if (web_view_handle_ && + !web_view_handle_->web_view() + ->GetWebContents() + ->GetRenderViewHost() + ->GetWidget() + ->GetView()) { + web_view_handle_ = nullptr; + } + + // Create WebView if needed. + bool reused = true; + if (!web_view_handle_) { + web_view_handle_ = new WebViewHandle(profile_); + reused = false; + } + + *out_handle = web_view_handle_; + return reused; +} + +void SharedWebView::Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) { + DCHECK_EQ(chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, type); + web_view_handle_ = nullptr; +} + +void SharedWebView::OnMemoryPressure( + base::MemoryPressureListener::MemoryPressureLevel level) { + switch (level) { + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE: + break; + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL: + web_view_handle_ = nullptr; + break; + } +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/ui/shared_web_view.h b/chrome/browser/chromeos/login/ui/shared_web_view.h new file mode 100644 index 0000000..abe936f8 --- /dev/null +++ b/chrome/browser/chromeos/login/ui/shared_web_view.h
@@ -0,0 +1,70 @@ +// Copyright 2016 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 CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_H_ + +#include <memory> + +#include "base/macros.h" +#include "base/memory/memory_pressure_listener.h" +#include "base/memory/ref_counted.h" +#include "components/keyed_service/core/keyed_service.h" +#include "content/public/browser/notification_observer.h" +#include "content/public/browser/notification_registrar.h" +#include "url/gurl.h" + +class Profile; + +namespace chromeos { + +class WebViewHandle; + +// Stores and fetches a views::WebView instance that is ulimately owned by the +// signin profile. This allows for a WebView to be reused over time or +// preloaded. Use SharedWebViewFactory to get an instance of this class. +class SharedWebView : public KeyedService, + public content::NotificationObserver { + public: + explicit SharedWebView(Profile* profile); + ~SharedWebView() override; + void Shutdown() override; + + // Stores a webview instance inside of |out_handle|. |url| is the initial + // URL that the webview stores (note: this function does not perform the + // navigation). This returns true if the webview was reused, false if it + // was freshly created. + bool Get(const GURL& url, scoped_refptr<WebViewHandle>* out_handle); + + private: + // content::NotificationObserver: + void Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) override; + + // Called when there is a memory pressure event. + void OnMemoryPressure( + base::MemoryPressureListener::MemoryPressureLevel level); + + content::NotificationRegistrar registrar_; + + // Profile used for creating the views::WebView instance. + Profile* const profile_; + + // Cached URL that the |web_view_| instance should point to used for + // validation. + GURL web_view_url_; + + // Shared web-view instance. Callers may take a reference on the handle so it + // could outlive this class. + scoped_refptr<WebViewHandle> web_view_handle_; + + std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_; + + DISALLOW_COPY_AND_ASSIGN(SharedWebView); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_H_
diff --git a/chrome/browser/chromeos/login/ui/shared_web_view_factory.cc b/chrome/browser/chromeos/login/ui/shared_web_view_factory.cc new file mode 100644 index 0000000..a42a30b3f --- /dev/null +++ b/chrome/browser/chromeos/login/ui/shared_web_view_factory.cc
@@ -0,0 +1,48 @@ +// Copyright 2016 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 "chrome/browser/chromeos/login/ui/shared_web_view_factory.h" + +#include "chrome/browser/chromeos/login/ui/shared_web_view.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/profiles/incognito_helpers.h" +#include "chrome/browser/profiles/profile.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +namespace chromeos { + +// static +SharedWebView* SharedWebViewFactory::GetForProfile(Profile* profile) { + auto result = static_cast<SharedWebView*>( + GetInstance()->GetServiceForBrowserContext(profile, true)); + return result; +} + +// static +SharedWebViewFactory* SharedWebViewFactory::GetInstance() { + return base::Singleton<SharedWebViewFactory>::get(); +} + +SharedWebViewFactory::SharedWebViewFactory() + : BrowserContextKeyedServiceFactory( + "SharedWebViewFactory", + BrowserContextDependencyManager::GetInstance()) {} + +SharedWebViewFactory::~SharedWebViewFactory() {} + +content::BrowserContext* SharedWebViewFactory::GetBrowserContextToUse( + content::BrowserContext* context) const { + // Make sure that only the SigninProfile is using a shared webview. + if (Profile::FromBrowserContext(context) != ProfileHelper::GetSigninProfile()) + return nullptr; + + return context; +} + +KeyedService* SharedWebViewFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + return new SharedWebView(Profile::FromBrowserContext(context)); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/ui/shared_web_view_factory.h b/chrome/browser/chromeos/login/ui/shared_web_view_factory.h new file mode 100644 index 0000000..7386b5e --- /dev/null +++ b/chrome/browser/chromeos/login/ui/shared_web_view_factory.h
@@ -0,0 +1,42 @@ +// Copyright 2016 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 CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_FACTORY_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_FACTORY_H_ + +#include "base/macros.h" +#include "base/memory/singleton.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +class Profile; + +namespace chromeos { + +class SharedWebView; + +// Fetches a SharedWebView instance for the signin profile. +class SharedWebViewFactory : public BrowserContextKeyedServiceFactory { + public: + static SharedWebView* GetForProfile(Profile* profile); + + static SharedWebViewFactory* GetInstance(); + + private: + friend struct base::DefaultSingletonTraits<SharedWebViewFactory>; + + SharedWebViewFactory(); + ~SharedWebViewFactory() override; + + // BrowserContextKeyedServiceFactory: + content::BrowserContext* GetBrowserContextToUse( + content::BrowserContext* context) const override; + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* profile) const override; + + DISALLOW_COPY_AND_ASSIGN(SharedWebViewFactory); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UI_SHARED_WEB_VIEW_FACTORY_H_
diff --git a/chrome/browser/chromeos/login/ui/web_contents_forced_title.cc b/chrome/browser/chromeos/login/ui/web_contents_forced_title.cc new file mode 100644 index 0000000..51dbef2 --- /dev/null +++ b/chrome/browser/chromeos/login/ui/web_contents_forced_title.cc
@@ -0,0 +1,39 @@ +// Copyright 2016 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 "chrome/browser/chromeos/login/ui/web_contents_forced_title.h" + +#include "content/public/browser/navigation_entry.h" +#include "content/public/browser/web_contents.h" + +DEFINE_WEB_CONTENTS_USER_DATA_KEY(chromeos::WebContentsForcedTitle); + +namespace chromeos { + +// static +void WebContentsForcedTitle::CreateForWebContentsWithTitle( + content::WebContents* web_contents, + const base::string16& title) { + if (FromWebContents(web_contents)) + return; + + web_contents->UpdateTitleForEntry(nullptr, title); + web_contents->SetUserData(UserDataKey(), + new WebContentsForcedTitle(web_contents, title)); +} + +WebContentsForcedTitle::WebContentsForcedTitle( + content::WebContents* web_contents, + const base::string16& title) + : content::WebContentsObserver(web_contents), title_(title) {} + +WebContentsForcedTitle::~WebContentsForcedTitle() {} + +void WebContentsForcedTitle::TitleWasSet(content::NavigationEntry* entry, + bool explicit_set) { + if (!entry || entry->GetTitle() != title_) + web_contents()->UpdateTitleForEntry(entry, title_); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/ui/web_contents_forced_title.h b/chrome/browser/chromeos/login/ui/web_contents_forced_title.h new file mode 100644 index 0000000..b12ebd2 --- /dev/null +++ b/chrome/browser/chromeos/login/ui/web_contents_forced_title.h
@@ -0,0 +1,39 @@ +// Copyright 2016 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 CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_CONTENTS_FORCED_TITLE_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_CONTENTS_FORCED_TITLE_H_ + +#include "base/strings/string16.h" +#include "content/public/browser/web_contents_observer.h" +#include "content/public/browser/web_contents_user_data.h" + +namespace chromeos { + +// Ensures that the title of the WebContents instance this object is attached +// to is always set to the given title value. +class WebContentsForcedTitle + : public content::WebContentsObserver, + public content::WebContentsUserData<WebContentsForcedTitle> { + public: + static void CreateForWebContentsWithTitle(content::WebContents* web_contents, + const base::string16& title); + + ~WebContentsForcedTitle() override; + + private: + WebContentsForcedTitle(content::WebContents* web_contents, + const base::string16& title); + + // content::WebContentsObserver: + void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override; + + base::string16 title_; + + DISALLOW_COPY_AND_ASSIGN(WebContentsForcedTitle); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_CONTENTS_FORCED_TITLE_H_
diff --git a/chrome/browser/chromeos/login/ui/web_view_handle.cc b/chrome/browser/chromeos/login/ui/web_view_handle.cc new file mode 100644 index 0000000..45165abd --- /dev/null +++ b/chrome/browser/chromeos/login/ui/web_view_handle.cc
@@ -0,0 +1,19 @@ +// Copyright 2016 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 "chrome/browser/chromeos/login/ui/web_view_handle.h" + +#include "chrome/browser/profiles/profile.h" +#include "ui/views/controls/webview/webview.h" + +namespace chromeos { + +WebViewHandle::WebViewHandle(Profile* profile) + : web_view_(base::MakeUnique<views::WebView>(profile)) { + web_view_->set_owned_by_client(); +} + +WebViewHandle::~WebViewHandle() {} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/ui/web_view_handle.h b/chrome/browser/chromeos/login/ui/web_view_handle.h new file mode 100644 index 0000000..856abfc --- /dev/null +++ b/chrome/browser/chromeos/login/ui/web_view_handle.h
@@ -0,0 +1,41 @@ +// Copyright 2016 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 CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_VIEW_HANDLE_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_VIEW_HANDLE_H_ + +#include <memory> + +#include "base/macros.h" +#include "base/memory/ref_counted.h" + +class Profile; + +namespace views { +class WebView; +} + +namespace chromeos { + +// Owns a views::WebView instance. Any caller actively using the views::WebView +// instance should increase/decrease the refcount. +class WebViewHandle : public base::RefCounted<WebViewHandle> { + public: + explicit WebViewHandle(Profile* profile); + + // Returns an unowned pointer to the stored |web_view| instance. + views::WebView* web_view() { return web_view_.get(); } + + private: + friend class base::RefCounted<WebViewHandle>; + ~WebViewHandle(); + + std::unique_ptr<views::WebView> web_view_; + + DISALLOW_COPY_AND_ASSIGN(WebViewHandle); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEB_VIEW_HANDLE_H_
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc index a9d53c9..3cc07a5 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.cc +++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc
@@ -22,7 +22,11 @@ #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" #include "chrome/browser/chromeos/login/ui/proxy_settings_dialog.h" +#include "chrome/browser/chromeos/login/ui/shared_web_view.h" +#include "chrome/browser/chromeos/login/ui/shared_web_view_factory.h" +#include "chrome/browser/chromeos/login/ui/web_contents_forced_title.h" #include "chrome/browser/chromeos/login/ui/web_contents_set_background_color.h" +#include "chrome/browser/chromeos/login/ui/web_view_handle.h" #include "chrome/browser/chromeos/login/ui/webui_login_display.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/settings/cros_settings.h" @@ -176,7 +180,8 @@ // WebUILoginView public: ------------------------------------------------------ -WebUILoginView::WebUILoginView() { +WebUILoginView::WebUILoginView(const WebViewSettings& settings) + : settings_(settings) { registrar_.Add(this, chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, content::NotificationService::AllSources()); @@ -252,15 +257,28 @@ } else { NOTIMPLEMENTED(); } + + // If the WebView is going to be reused, make sure we call teardown. + if (!webui_login_->HasOneRef()) + GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.teardown"); + + // Clear any delegates we have set on the WebView. + WebContents* web_contents = web_view()->GetWebContents(); + WebContentsModalDialogManager::FromWebContents(web_contents) + ->SetDelegate(nullptr); + web_contents->SetDelegate(nullptr); } -void WebUILoginView::Init() { - Profile* signin_profile = ProfileHelper::GetSigninProfile(); - webui_login_ = new views::WebView(signin_profile); - webui_login_->set_allow_accelerators(true); - AddChildView(webui_login_); +// static +void WebUILoginView::InitializeWebView(views::WebView* web_view, + const base::string16& title) { + WebContents* web_contents = web_view->GetWebContents(); - WebContents* web_contents = webui_login_->GetWebContents(); + if (!title.empty()) + WebContentsForcedTitle::CreateForWebContentsWithTitle(web_contents, title); + + WebContentsSetBackgroundColor::CreateForWebContentsWithColor( + web_contents, SK_ColorTRANSPARENT); // Ensure that the login UI has a tab ID, which will allow the GAIA auth // extension's background script to tell it apart from a captive portal window @@ -274,16 +292,38 @@ // LoginHandlerViews uses a constrained window for the password manager view. WebContentsModalDialogManager::CreateForWebContents(web_contents); - WebContentsModalDialogManager::FromWebContents(web_contents)-> - SetDelegate(this); - web_contents->SetDelegate(this); extensions::SetViewType(web_contents, extensions::VIEW_TYPE_COMPONENT); extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( web_contents); content::RendererPreferences* prefs = web_contents->GetMutableRendererPrefs(); renderer_preferences_util::UpdateFromSystemSettings( - prefs, signin_profile, web_contents); + prefs, ProfileHelper::GetSigninProfile(), web_contents); +} + +void WebUILoginView::Init() { + Profile* signin_profile = ProfileHelper::GetSigninProfile(); + + if (!settings_.preloaded_url.is_empty()) { + SharedWebView* shared_web_view = + SharedWebViewFactory::GetForProfile(signin_profile); + is_reusing_webview_ = + shared_web_view->Get(settings_.preloaded_url, &webui_login_); + } else { + webui_login_ = new WebViewHandle(signin_profile); + is_reusing_webview_ = false; + } + + WebContents* web_contents = web_view()->GetWebContents(); + if (!is_reusing_webview_) + InitializeWebView(web_view(), settings_.web_view_title); + + web_view()->set_allow_accelerators(true); + AddChildView(web_view()); + + WebContentsModalDialogManager::FromWebContents(web_contents) + ->SetDelegate(this); + web_contents->SetDelegate(this); status_area_widget_host_ = new views::View; AddChildView(status_area_widget_host_); @@ -294,7 +334,7 @@ } void WebUILoginView::RequestFocus() { - webui_login_->RequestFocus(); + web_view()->RequestFocus(); } web_modal::WebContentsModalDialogHost* @@ -334,7 +374,7 @@ if (entry == accel_map_.end()) return false; - if (!webui_login_) + if (!web_view()) return true; content::WebUI* web_ui = GetWebUI(); @@ -351,12 +391,15 @@ return GetWidget()->GetNativeWindow(); } -void WebUILoginView::LoadURL(const GURL & url) { - webui_login_->LoadInitialURL(url); - webui_login_->RequestFocus(); +void WebUILoginView::LoadURL(const GURL& url) { + // If a preloaded_url is provided then |url| must match it. + DCHECK(settings_.preloaded_url.is_empty() || url == settings_.preloaded_url); - WebContentsSetBackgroundColor::CreateForWebContentsWithColor( - GetWebContents(), SK_ColorTRANSPARENT); + if (is_reusing_webview_ && !settings_.preloaded_url.is_empty()) + GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.reload"); + else + web_view()->LoadInitialURL(url); + web_view()->RequestFocus(); // There is no Shell instance while running in mash. if (chrome::IsRunningInMash()) @@ -373,14 +416,17 @@ } content::WebUI* WebUILoginView::GetWebUI() { - return webui_login_->web_contents()->GetWebUI(); + return web_view()->web_contents()->GetWebUI(); } content::WebContents* WebUILoginView::GetWebContents() { - return webui_login_->web_contents(); + return web_view()->web_contents(); } OobeUI* WebUILoginView::GetOobeUI() { + if (!GetWebUI()) + return nullptr; + return static_cast<OobeUI*>(GetWebUI()->GetController()); } @@ -442,8 +488,8 @@ // WebUILoginView protected: --------------------------------------------------- void WebUILoginView::Layout() { - DCHECK(webui_login_); - webui_login_->SetBoundsRect(bounds()); + DCHECK(web_view()); + web_view()->SetBoundsRect(bounds()); for (auto& observer : observer_list_) observer.OnPositionRequiresUpdate(); @@ -459,9 +505,9 @@ void WebUILoginView::AboutToRequestFocusFromTabTraversal(bool reverse) { // Return the focus to the web contents. - webui_login_->web_contents()->FocusThroughTabTraversal(reverse); + web_view()->web_contents()->FocusThroughTabTraversal(reverse); GetWidget()->Activate(); - webui_login_->web_contents()->Focus(); + web_view()->web_contents()->Focus(); } void WebUILoginView::Observe(int type, @@ -479,6 +525,10 @@ } } +views::WebView* WebUILoginView::web_view() { + return webui_login_->web_view(); +} + // WebUILoginView private: ----------------------------------------------------- bool WebUILoginView::HandleContextMenu(
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.h b/chrome/browser/chromeos/login/ui/webui_login_view.h index 5fbd2c7..c3f3bb2 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.h +++ b/chrome/browser/chromeos/login/ui/webui_login_view.h
@@ -9,6 +9,7 @@ #include <string> #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/observer_list.h" #include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h" #include "components/web_modal/web_contents_modal_dialog_host.h" @@ -18,8 +19,7 @@ #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" - -class GURL; +#include "url/gurl.h" namespace content { class WebUI; @@ -34,6 +34,7 @@ namespace chromeos { class OobeUI; +class WebViewHandle; // View used to render a WebUI supporting Widget. This widget is used for the // WebUI based start up and lock screens. It contains a WebView. @@ -43,10 +44,19 @@ public ChromeWebModalDialogManagerDelegate, public web_modal::WebContentsModalDialogHost { public: + struct WebViewSettings { + // URL of the WebView to preload and reuse across WebUILoginView instances. + GURL preloaded_url; + + // Title of the web contents. This will be shown in the task manager. If + // empty, the default webview title will be used. + base::string16 web_view_title; + }; + // Internal class name. static const char kViewClassName[]; - WebUILoginView(); + explicit WebUILoginView(const WebViewSettings& settings); ~WebUILoginView() override; // Initializes the webui login view. @@ -105,6 +115,9 @@ } protected: + static void InitializeWebView(views::WebView* web_view, + const base::string16& title); + // Overridden from views::View: void Layout() override; void OnLocaleChanged() override; @@ -116,8 +129,7 @@ const content::NotificationSource& source, const content::NotificationDetails& details) override; - // WebView for rendering a webpage as a webui login. - views::WebView* webui_login_ = nullptr; + views::WebView* web_view(); private: // Map type for the accelerator-to-identifier map. @@ -148,6 +160,15 @@ content::NotificationRegistrar registrar_; + // WebView configuration options. + const WebViewSettings settings_; + + // WebView for rendering a webpage as a webui login. + scoped_refptr<WebViewHandle> webui_login_; + + // True if the current webview instance (ie, GetWebUI()) has been reused. + bool is_reusing_webview_ = false; + // Converts keyboard events on the WebContents to accelerators. views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_;
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc index e5a36cc..a144df7c 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
@@ -485,8 +485,11 @@ net::HttpRequestHeaders headers; headers.CopyFrom(request->extra_request_headers()); bool is_off_the_record = io_data->IsOffTheRecord(); + bool is_signed_in = + !is_off_the_record && + !io_data->google_services_account_id()->GetValue().empty(); variations::AppendVariationHeaders( - request->url(), is_off_the_record, + request->url(), is_off_the_record, is_signed_in, !is_off_the_record && io_data->GetMetricsEnabledStateOnIOThread(), &headers); request->SetExtraRequestHeaders(headers);
diff --git a/chrome/browser/mac/exception_processor_unittest.mm b/chrome/browser/mac/exception_processor_unittest.mm index 74c1128..0e8460b 100644 --- a/chrome/browser/mac/exception_processor_unittest.mm +++ b/chrome/browser/mac/exception_processor_unittest.mm
@@ -95,7 +95,7 @@ CFRunLoopRef run_loop = CFRunLoopGetCurrent(); CFRunLoopPerformBlock(run_loop, kCFRunLoopCommonModes, ^{ - [NSException raise:@"ThrowExceptionInRunLoop" format:nil]; + [NSException raise:@"ThrowExceptionInRunLoop" format:@""]; }); CFRunLoopPerformBlock(run_loop, kCFRunLoopCommonModes, ^{ CFRunLoopStop(run_loop); @@ -129,7 +129,7 @@ CFRunLoopRef run_loop = CFRunLoopGetCurrent(); CFRunLoopPerformBlock(run_loop, kCFRunLoopCommonModes, ^{ @try { - [NSException raise:@"ObjcExceptionPreprocessCaught" format:nil]; + [NSException raise:@"ObjcExceptionPreprocessCaught" format:@""]; } @catch (id exception) { } });
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider.cc b/chrome/browser/ntp_snippets/download_suggestions_provider.cc index b1e5fac..86155a2e 100644 --- a/chrome/browser/ntp_snippets/download_suggestions_provider.cc +++ b/chrome/browser/ntp_snippets/download_suggestions_provider.cc
@@ -17,6 +17,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" +#include "base/values.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" #include "components/ntp_snippets/features.h" @@ -29,6 +30,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/image/image.h" +using base::ContainsValue; using content::DownloadItem; using content::DownloadManager; using ntp_snippets::Category; @@ -49,6 +51,9 @@ const char* kMaxSuggestionsCountParamName = "downloads_max_count"; +// Maximal number of dismissed asset download IDs stored at any time. +const int kMaxDismissedIdCount = 100; + bool CompareOfflinePagesMostRecentlyCreatedFirst(const OfflinePageItem& left, const OfflinePageItem& right) { return left.creation_time > right.creation_time; @@ -186,12 +191,8 @@ void DownloadSuggestionsProvider::DismissSuggestion( const ContentSuggestion::ID& suggestion_id) { DCHECK_EQ(provided_category_, suggestion_id.category()); - std::set<std::string> dismissed_ids = - ReadDismissedIDsFromPrefs(CorrespondsToOfflinePage(suggestion_id)); - dismissed_ids.insert(suggestion_id.id_within_category()); - StoreDismissedIDsToPrefs(CorrespondsToOfflinePage(suggestion_id), - dismissed_ids); + AddToDismissedStorageIfNeeded(suggestion_id); RemoveSuggestionFromCacheAndRetrieveMoreIfNeeded(suggestion_id); } @@ -262,7 +263,7 @@ void DownloadSuggestionsProvider::ClearDismissedSuggestionsForDebugging( Category category) { DCHECK_EQ(provided_category_, category); - StoreAssetDismissedIDsToPrefs(std::set<std::string>()); + StoreAssetDismissedIDsToPrefs(std::vector<std::string>()); StoreOfflinePageDismissedIDsToPrefs(std::set<std::string>()); AsynchronouslyFetchAllDownloadsAndSubmitSuggestions(); } @@ -274,6 +275,10 @@ registry->RegisterListPref(kDismissedOfflinePageDownloadSuggestions); } +int DownloadSuggestionsProvider::GetMaxDismissedCountForTesting() { + return kMaxDismissedIdCount; +} + //////////////////////////////////////////////////////////////////////////////// // Private methods @@ -281,10 +286,12 @@ GetPagesMatchingQueryCallbackForGetDismissedSuggestions( const ntp_snippets::DismissedSuggestionsCallback& callback, const std::vector<OfflinePageItem>& offline_pages) const { - std::set<std::string> dismissed_ids = ReadOfflinePageDismissedIDsFromPrefs(); + std::set<std::string> dismissed_offline_ids = + ReadOfflinePageDismissedIDsFromPrefs(); std::vector<ContentSuggestion> suggestions; for (const OfflinePageItem& item : offline_pages) { - if (dismissed_ids.count(GetOfflinePagePerCategoryID(item.offline_id))) { + if (dismissed_offline_ids.count( + GetOfflinePagePerCategoryID(item.offline_id))) { suggestions.push_back(ConvertOfflinePage(item)); } } @@ -293,10 +300,12 @@ std::vector<DownloadItem*> all_downloads; download_manager_->GetAllDownloads(&all_downloads); - dismissed_ids = ReadAssetDismissedIDsFromPrefs(); + std::vector<std::string> dismissed_asset_ids = + ReadAssetDismissedIDsFromPrefs(); for (const DownloadItem* item : all_downloads) { - if (dismissed_ids.count(GetAssetDownloadPerCategoryID(item->GetId()))) { + if (ContainsValue(dismissed_asset_ids, + GetAssetDownloadPerCategoryID(item->GetId()))) { suggestions.push_back(ConvertDownloadItem(*item)); } } @@ -369,7 +378,7 @@ } void DownloadSuggestionsProvider::OnDownloadUpdated(DownloadItem* item) { - if (base::ContainsValue(cached_asset_downloads_, item)) { + if (ContainsValue(cached_asset_downloads_, item)) { if (item->GetFileExternallyRemoved()) { InvalidateSuggestion(GetAssetDownloadPerCategoryID(item->GetId())); } else { @@ -450,25 +459,23 @@ std::vector<DownloadItem*> all_downloads; download_manager_->GetAllDownloads(&all_downloads); - std::set<std::string> old_dismissed_ids = ReadAssetDismissedIDsFromPrefs(); - std::set<std::string> retained_dismissed_ids; + std::vector<std::string> old_dismissed_ids = ReadAssetDismissedIDsFromPrefs(); cached_asset_downloads_.clear(); for (const DownloadItem* item : all_downloads) { std::string within_category_id = GetAssetDownloadPerCategoryID(item->GetId()); - if (!old_dismissed_ids.count(within_category_id)) { + if (!ContainsValue(old_dismissed_ids, within_category_id)) { if (IsDownloadCompleted(*item)) { cached_asset_downloads_.push_back(item); } - } else { - retained_dismissed_ids.insert(within_category_id); } } - if (old_dismissed_ids.size() != retained_dismissed_ids.size()) { - StoreAssetDismissedIDsToPrefs(retained_dismissed_ids); - } - + // We do not prune dismissed IDs, because it is not possible to ensure that + // the list of downloads is complete (i.e. DownloadManager has finished + // reading them). + // TODO(vitaliii): Prune dismissed IDs once the |OnLoaded| notification is + // provided. See crbug.com/672758. const int max_suggestions_count = GetMaxSuggestionsCount(); if (static_cast<int>(cached_asset_downloads_.size()) > max_suggestions_count) { @@ -566,12 +573,13 @@ return false; } - if (base::ContainsValue(cached_asset_downloads_, item)) { + if (ContainsValue(cached_asset_downloads_, item)) { return false; } - std::set<std::string> dismissed_ids = ReadAssetDismissedIDsFromPrefs(); - if (dismissed_ids.count(GetAssetDownloadPerCategoryID(item->GetId()))) { + std::vector<std::string> dismissed_ids = ReadAssetDismissedIDsFromPrefs(); + if (ContainsValue(dismissed_ids, + GetAssetDownloadPerCategoryID(item->GetId()))) { return false; } @@ -709,31 +717,38 @@ ContentSuggestion::ID suggestion_id(provided_category_, id_within_category); observer()->OnSuggestionInvalidated(this, suggestion_id); - std::set<std::string> dismissed_ids = - ReadDismissedIDsFromPrefs(CorrespondsToOfflinePage(suggestion_id)); - auto it = dismissed_ids.find(id_within_category); - if (it != dismissed_ids.end()) { - dismissed_ids.erase(it); - StoreDismissedIDsToPrefs(CorrespondsToOfflinePage(suggestion_id), - dismissed_ids); - } - + RemoveFromDismissedStorageIfNeeded(suggestion_id); RemoveSuggestionFromCacheAndRetrieveMoreIfNeeded(suggestion_id); } -std::set<std::string> +// TODO(vitaliii): Do not use std::vector, when we ensure that pruning happens +// at the right time (crbug.com/672758). +std::vector<std::string> DownloadSuggestionsProvider::ReadAssetDismissedIDsFromPrefs() const { - return ntp_snippets::prefs::ReadDismissedIDsFromPrefs( - *pref_service_, kDismissedAssetDownloadSuggestions); + std::vector<std::string> dismissed_ids; + const base::ListValue* list = + pref_service_->GetList(kDismissedAssetDownloadSuggestions); + for (const std::unique_ptr<base::Value>& value : *list) { + std::string dismissed_id; + bool success = value->GetAsString(&dismissed_id); + DCHECK(success) << "Failed to parse dismissed id from prefs param " + << kDismissedAssetDownloadSuggestions << " into string."; + dismissed_ids.push_back(dismissed_id); + } + return dismissed_ids; } void DownloadSuggestionsProvider::StoreAssetDismissedIDsToPrefs( - const std::set<std::string>& dismissed_ids) { + const std::vector<std::string>& dismissed_ids) { DCHECK(std::all_of( dismissed_ids.begin(), dismissed_ids.end(), [](const std::string& id) { return id[0] == kAssetDownloadsPrefix; })); - ntp_snippets::prefs::StoreDismissedIDsToPrefs( - pref_service_, kDismissedAssetDownloadSuggestions, dismissed_ids); + + base::ListValue list; + for (const std::string& dismissed_id : dismissed_ids) { + list.AppendString(dismissed_id); + } + pref_service_->Set(kDismissedAssetDownloadSuggestions, list); } std::set<std::string> @@ -752,22 +767,45 @@ pref_service_, kDismissedOfflinePageDownloadSuggestions, dismissed_ids); } -std::set<std::string> DownloadSuggestionsProvider::ReadDismissedIDsFromPrefs( - bool for_offline_page_downloads) const { - if (for_offline_page_downloads) { - return ReadOfflinePageDismissedIDsFromPrefs(); - } - return ReadAssetDismissedIDsFromPrefs(); -} - -// TODO(vitaliii): Store one set instead of two. See crbug.com/656024. -void DownloadSuggestionsProvider::StoreDismissedIDsToPrefs( - bool for_offline_page_downloads, - const std::set<std::string>& dismissed_ids) { - if (for_offline_page_downloads) { +void DownloadSuggestionsProvider::AddToDismissedStorageIfNeeded( + const ContentSuggestion::ID& suggestion_id) { + if (CorrespondsToOfflinePage(suggestion_id)) { + std::set<std::string> dismissed_ids = + ReadOfflinePageDismissedIDsFromPrefs(); + dismissed_ids.insert(suggestion_id.id_within_category()); StoreOfflinePageDismissedIDsToPrefs(dismissed_ids); } else { - StoreAssetDismissedIDsToPrefs(dismissed_ids); + std::vector<std::string> dismissed_ids = ReadAssetDismissedIDsFromPrefs(); + // The suggestion may be double dismissed from previously opened NTPs. + if (!ContainsValue(dismissed_ids, suggestion_id.id_within_category())) { + dismissed_ids.push_back(suggestion_id.id_within_category()); + // TODO(vitaliii): Remove this workaround once the dismissed ids are + // pruned. See crbug.com/672758. + while (dismissed_ids.size() > kMaxDismissedIdCount) { + dismissed_ids.erase(dismissed_ids.begin()); + } + StoreAssetDismissedIDsToPrefs(dismissed_ids); + } + } +} + +void DownloadSuggestionsProvider::RemoveFromDismissedStorageIfNeeded( + const ContentSuggestion::ID& suggestion_id) { + if (CorrespondsToOfflinePage(suggestion_id)) { + std::set<std::string> dismissed_ids = + ReadOfflinePageDismissedIDsFromPrefs(); + if (dismissed_ids.count(suggestion_id.id_within_category())) { + dismissed_ids.erase(suggestion_id.id_within_category()); + StoreOfflinePageDismissedIDsToPrefs(dismissed_ids); + } + } else { + std::vector<std::string> dismissed_ids = ReadAssetDismissedIDsFromPrefs(); + auto it = std::find(dismissed_ids.begin(), dismissed_ids.end(), + suggestion_id.id_within_category()); + if (it != dismissed_ids.end()) { + dismissed_ids.erase(it); + StoreAssetDismissedIDsToPrefs(dismissed_ids); + } } }
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider.h b/chrome/browser/ntp_snippets/download_suggestions_provider.h index 9b7cdb2..a98dc97 100644 --- a/chrome/browser/ntp_snippets/download_suggestions_provider.h +++ b/chrome/browser/ntp_snippets/download_suggestions_provider.h
@@ -75,6 +75,8 @@ static void RegisterProfilePrefs(PrefRegistrySimple* registry); + static int GetMaxDismissedCountForTesting(); + private: friend class DownloadSuggestionsProviderTest; @@ -171,11 +173,11 @@ void InvalidateSuggestion(const std::string& id_within_category); // Reads dismissed IDs related to asset downloads from prefs. - std::set<std::string> ReadAssetDismissedIDsFromPrefs() const; + std::vector<std::string> ReadAssetDismissedIDsFromPrefs() const; // Writes |dismissed_ids| into prefs for asset downloads. void StoreAssetDismissedIDsToPrefs( - const std::set<std::string>& dismissed_ids); + const std::vector<std::string>& dismissed_ids); // Reads dismissed IDs related to offline page downloads from prefs. std::set<std::string> ReadOfflinePageDismissedIDsFromPrefs() const; @@ -184,15 +186,15 @@ void StoreOfflinePageDismissedIDsToPrefs( const std::set<std::string>& dismissed_ids); - // Reads from prefs dismissed IDs related to either offline page or asset - // downloads (given by |for_offline_page_downloads|). - std::set<std::string> ReadDismissedIDsFromPrefs( - bool for_offline_page_downloads) const; + // Adds a suggestion ID to the dismissed list in prefs, if it is not there. + // Works for both Offline Page and Asset downloads. + void AddToDismissedStorageIfNeeded( + const ntp_snippets::ContentSuggestion::ID& suggestion_id); - // Writes |dismissed_ids| into prefs for either offline page or asset - // downloads (given by |for_offline_page_downloads|). - void StoreDismissedIDsToPrefs(bool for_offline_page_downloads, - const std::set<std::string>& dismissed_ids); + // Removes a suggestion ID from the dismissed list in prefs, if it is there. + // Works for both Offline Page and Asset downloads. + void RemoveFromDismissedStorageIfNeeded( + const ntp_snippets::ContentSuggestion::ID& suggestion_id); void UnregisterDownloadItemObservers();
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc b/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc index c68d1d3c..90f654f 100644 --- a/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc +++ b/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc
@@ -38,12 +38,12 @@ using testing::AnyNumber; using testing::ElementsAre; using testing::IsEmpty; +using testing::Lt; using testing::Mock; using testing::Return; using testing::SizeIs; using testing::StrictMock; using testing::UnorderedElementsAre; -using testing::Lt; namespace ntp_snippets { // These functions are implicitly used to print out values during the tests. @@ -926,3 +926,87 @@ HasUrl("http://download.com/2")))); CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false); } + +TEST_F(DownloadSuggestionsProviderTest, + ShouldNotPruneDismissedSuggestionsOnStartup) { + IgnoreOnCategoryStatusChangedToAvailable(); + IgnoreOnSuggestionInvalidated(); + + // We dismiss an item to store it in the list of dismissed items. + *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1}); + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false); + provider()->DismissSuggestion( + GetDummySuggestionId(1, /*is_offline_page=*/false)); + DestroyProvider(); + + // We simulate current DownloadManager behaviour; + // The download manager has not started reading the list yet, so it is empty. + downloads_manager()->mutable_items()->clear(); + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false); + Mock::VerifyAndClearExpectations(observer()); + + // The first download is being read. + *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1}); + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)) + .Times(0); + FireDownloadCreated(downloads_manager()->items()[0].get()); + // The first download should not be reported, because it is dismissed. +} + +TEST_F(DownloadSuggestionsProviderTest, ShouldStoreDismissedSuggestions) { + IgnoreOnCategoryStatusChangedToAvailable(); + IgnoreOnSuggestionInvalidated(); + + // Dismiss items to store them in the list of dismissed items. + *(offline_pages_model()->mutable_items()) = CreateDummyOfflinePages({1}); + *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1}); + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/true); + provider()->DismissSuggestion( + GetDummySuggestionId(1, /*is_offline_page=*/true)); + provider()->DismissSuggestion( + GetDummySuggestionId(1, /*is_offline_page=*/false)); + // Destroy and create provider to simulate turning off Chrome. + DestroyProvider(); + + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/true); + EXPECT_THAT(GetDismissedSuggestions(), + UnorderedElementsAre(HasUrl("http://dummy.com/1"), + HasUrl("http://download.com/1"))); +} + +// TODO(vitaliii): Remove this test once the dismissed ids are pruned. See +// crbug.com/672758. +TEST_F(DownloadSuggestionsProviderTest, ShouldRemoveOldDismissedIdsIfTooMany) { + IgnoreOnCategoryStatusChangedToAvailable(); + IgnoreOnSuggestionInvalidated(); + + const int kMaxDismissedIdCount = + DownloadSuggestionsProvider::GetMaxDismissedCountForTesting(); + std::vector<int> ids; + for (int i = 0; i < kMaxDismissedIdCount + 1; ++i) { + ids.push_back(i); + } + + *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads(ids); + EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _)); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false); + + for (int i = 0; i < static_cast<int>(ids.size()); ++i) { + provider()->DismissSuggestion( + GetDummySuggestionId(i, /*is_offline_page=*/false)); + } + + EXPECT_THAT(GetDismissedSuggestions(), SizeIs(kMaxDismissedIdCount)); + DestroyProvider(); + // The oldest dismissed suggestion must become undismissed now. This is a + // temporary workaround and not what we want in long term. This test must be + // removed once we start pruning dismissed asset downloads on startup. + EXPECT_CALL(*observer(), + OnNewSuggestions(_, downloads_category(), + ElementsAre(HasUrl("http://download.com/0")))); + CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false); +}
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc index c47ea93c..3016a1e 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc +++ b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc
@@ -112,6 +112,19 @@ navigation_id->main_frame_url = GURL("http://127.0.0.1"); } +void ModifySubresourceForComparison(URLRequestSummary* subresource, + bool match_navigation_id) { + if (!match_navigation_id) + SetValidNavigationID(&subresource->navigation_id); + if (subresource->resource_type == content::RESOURCE_TYPE_IMAGE && + subresource->priority == net::LOWEST) { + // Fuzzy comparison for images because an image priority can be + // boosted during layout via + // ResourceFetcher::updateAllImageResourcePriorities(). + subresource->priority = net::MEDIUM; + } +} + // Does a custom comparison of subresources of URLRequestSummary // and fail the test if the expectation is not met. void CompareSubresources(std::vector<URLRequestSummary> actual_subresources, @@ -121,12 +134,11 @@ // ResourcePrefetchPredictor only cares about the first occurrence of each. RemoveDuplicateSubresources(&actual_subresources); - if (!match_navigation_id) { - for (auto& subresource : actual_subresources) - SetValidNavigationID(&subresource.navigation_id); - for (auto& subresource : expected_subresources) - SetValidNavigationID(&subresource.navigation_id); - } + for (auto& subresource : actual_subresources) + ModifySubresourceForComparison(&subresource, match_navigation_id); + for (auto& subresource : expected_subresources) + ModifySubresourceForComparison(&subresource, match_navigation_id); + EXPECT_THAT(actual_subresources, testing::UnorderedElementsAreArray(expected_subresources)); } @@ -456,8 +468,9 @@ NavigateToURLAndCheckSubresources(GetURL(kHtmlDocumentWritePath)); } +// Disabled due to flakiness (crbug.com/673028). IN_PROC_BROWSER_TEST_F(ResourcePrefetchPredictorBrowserTest, - LearningJavascriptAppendChild) { + DISABLED_LearningJavascriptAppendChild) { auto externalScript = AddExternalResource(GetURL(kScriptAppendChildPath), content::RESOURCE_TYPE_SCRIPT, net::MEDIUM);
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs index 99c957d..1fab64c 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
@@ -997,7 +997,7 @@ }; mockFeedback.call(doCmd('nextEditText')) - .expectSpeech('Top News') + .expectSpeech('Top News Most Popular Sports') .call(doCmd('nextHeading')) .expectSpeech('Top News') .call(assertRangeHasText('Top News'))
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions.js index 29a9c6f..7c0eb03 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions.js
@@ -134,6 +134,10 @@ return; } + // Alerts should be announced as a result of focus. + if (node.role == RoleType.alert) + return; + var range = cursors.Range.fromNode(node); var output = new Output(); if (opt_prependFormatStr)
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions_test.extjs index d2bc87d..88d7d53a 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions_test.extjs +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/live_regions_test.extjs
@@ -109,9 +109,7 @@ function(rootNode) { var go = rootNode.find({ role: RoleType.button }); mockFeedback.call(go.doDefault.bind(go)) - .expectCategoryFlushSpeech('Alpha') - .expectQueuedSpeech('Bravo') - .expectQueuedSpeech('Charlie'); + .expectCategoryFlushSpeech('Alpha Bravo Charlie') mockFeedback.replay(); }); });
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js index bb8767b..1d12d9d 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
@@ -397,11 +397,12 @@ leave: '@exited_container($role)' }, alert: { - speak: '$earcon(ALERT_NONMODAL) $role $descendants $state' + enter: '$name $role $state', + speak: '$earcon(ALERT_NONMODAL) $role $nameOrTextContent $state' }, alertDialog: { enter: '$earcon(ALERT_MODAL) $name $state', - speak: '$earcon(ALERT_MODAL) $name $descendants $state $role' + speak: '$earcon(ALERT_MODAL) $name $nameOrTextContent $state $role' }, cell: { enter: '@cell_summary($tableCellRowIndex, $tableCellColumnIndex) ' + @@ -524,7 +525,7 @@ enter: '$node(tableRowHeader)' }, rowHeader: { - speak: '$descendants $state' + speak: '$nameOrTextContent $state' }, slider: { speak: '$earcon(SLIDER) @describe_slider($value, $name) $description ' + @@ -547,7 +548,7 @@ '$node(tableHeader)' }, tableHeaderContainer: { - speak: '$descendants $state $description' + speak: '$nameOrTextContent $state $description' }, textField: { speak: '$name $value $if($multiline, @tag_textarea, $if(' + @@ -601,7 +602,7 @@ alert: { default: { speak: '$earcon(ALERT_NONMODAL) @role_alert ' + - '$if($name, $name, $descendants) $description' + '$nameOrTextContent $description' } } }; @@ -1236,11 +1237,14 @@ Dir.FORWARD, {visit: AutomationPredicate.leafOrStaticText, leaf: AutomationPredicate.leafOrStaticText}); + var outputStrings = []; while (walker.next().node && walker.phase == AutomationTreeWalkerPhase.DESCENDANT) { if (walker.node.name) - this.append_(buff, walker.node.name, options); + outputStrings.push(walker.node.name); } + var joinedOutput = outputStrings.join(' '); + this.append_(buff, joinedOutput, options); } } else if (node[token] !== undefined) { options.annotation.push(token);
diff --git a/chrome/browser/resources/chromeos/login/lock.js b/chrome/browser/resources/chromeos/login/lock.js index ad5919ce..4028f54 100644 --- a/chrome/browser/resources/chromeos/login/lock.js +++ b/chrome/browser/resources/chromeos/login/lock.js
@@ -66,6 +66,39 @@ chrome.send('screenStateInitialize'); }, + /** + * Notification from the host that the PIN keyboard will be used in the + * lock session so it should also get preloaded. + */ + preloadPinKeyboard: function() { + showPinKeyboardAsync(); + }, + + /** + * Called when a preloaded webview (this) instance is being reused to + * display a new lock screen session. This will also be called when a + * lock screen has been preloaded and is being displayed for the first + * time. + */ + reload: function() { + // Sending accountPickerReady displays the webui. Wait for the next + // animation frame so the user does not see any state from the previous + // instance. + requestAnimationFrame(function() { + chrome.send('accountPickerReady'); + }); + }, + + /** + * Called when the lock screen has been dismissed but this webview will stay + * in memory. The webview will be reused when Oobe.reload() is called. + */ + teardown: function() { + // The PIN keyboard will disable the virtual keyboard. Make sure to + // revert the force disable when hiding the lock screen. + chrome.send('setForceDisableVirtualKeyboard', [false]); + }, + // Dummy Oobe functions not present with stripped login UI. initializeA11yMenu: function(e) {}, handleAccessibilityLinkClick: function(e) {},
diff --git a/chrome/browser/safe_browsing/srt_fetcher_win.cc b/chrome/browser/safe_browsing/srt_fetcher_win.cc index 2711ba2..6bdb1f1 100644 --- a/chrome/browser/safe_browsing/srt_fetcher_win.cc +++ b/chrome/browser/safe_browsing/srt_fetcher_win.cc
@@ -632,10 +632,13 @@ ProfileIOData* io_data = ProfileIOData::FromResourceContext( profile_->GetResourceContext()); net::HttpRequestHeaders headers; + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; variations::AppendVariationHeaders( url_fetcher_->GetOriginalURL(), io_data->IsOffTheRecord(), ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(), - &headers); + is_signed_in, &headers); url_fetcher_->SetExtraRequestHeaders(headers.ToString()); url_fetcher_->Start(); }
diff --git a/chrome/browser/search/search_unittest.cc b/chrome/browser/search/search_unittest.cc index 335905e..1761130 100644 --- a/chrome/browser/search/search_unittest.cc +++ b/chrome/browser/search/search_unittest.cc
@@ -443,7 +443,6 @@ std::map<std::string, bool> hosts; hosts["foo.com"] = false; url_filter->SetManualHosts(&hosts); - url_filter->SetEnabled(true); EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), GetNewTabPageURL(profile()));
diff --git a/chrome/browser/supervised_user/supervised_user_resource_throttle.cc b/chrome/browser/supervised_user/supervised_user_resource_throttle.cc index 53df77ad..a0695f6 100644 --- a/chrome/browser/supervised_user/supervised_user_resource_throttle.cc +++ b/chrome/browser/supervised_user/supervised_user_resource_throttle.cc
@@ -117,7 +117,7 @@ const SupervisedUserURLFilter* url_filter) { // Only treat main frame requests (ignoring subframes and subresources). bool is_main_frame = resource_type == content::RESOURCE_TYPE_MAIN_FRAME; - if (!is_main_frame || !url_filter->enabled()) + if (!is_main_frame) return nullptr; // Can't use base::MakeUnique because the constructor is private.
diff --git a/chrome/browser/supervised_user/supervised_user_resource_throttle_browsertest.cc b/chrome/browser/supervised_user/supervised_user_resource_throttle_browsertest.cc index 90955a67..c19e8d29 100644 --- a/chrome/browser/supervised_user/supervised_user_resource_throttle_browsertest.cc +++ b/chrome/browser/supervised_user/supervised_user_resource_throttle_browsertest.cc
@@ -136,28 +136,3 @@ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(tab, "loaded2()", &loaded2)); EXPECT_TRUE(loaded2); } - -class SupervisedUserResourceThrottleNotSupervisedTest - : public SupervisedUserResourceThrottleTest { - protected: - SupervisedUserResourceThrottleNotSupervisedTest() {} - ~SupervisedUserResourceThrottleNotSupervisedTest() override {} - - private: - // Overridden to do nothing, so that the supervised user ID will be empty. - void SetUpCommandLine(base::CommandLine* command_line) override {} -}; - -IN_PROC_BROWSER_TEST_F(SupervisedUserResourceThrottleNotSupervisedTest, - DontBlock) { - BlockHost(kExampleHost); - - WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); - - GURL blocked_url = embedded_test_server()->GetURL( - kExampleHost, "/supervised_user/simple.html"); - ui_test_utils::NavigateToURL(browser(), blocked_url); - // Even though the URL is marked as blocked, the load should go through, since - // the user isn't supervised. - EXPECT_FALSE(tab->ShowingInterstitialPage()); -}
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index a470f3e..324f525d6 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -441,13 +441,6 @@ return io_url_filter_.get(); } -void SupervisedUserService::URLFilterContext::SetEnabled(bool enabled) { - ui_url_filter_->SetEnabled(enabled); - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::Bind(&SupervisedUserURLFilter::SetEnabled, - io_url_filter_, enabled)); -} - void SupervisedUserService::URLFilterContext::SetDefaultFilteringBehavior( SupervisedUserURLFilter::FilteringBehavior behavior) { ui_url_filter_->SetDefaultFilteringBehavior(behavior); @@ -679,8 +672,6 @@ BrowserList::RemoveObserver(this); #endif } - - url_filter_context_.SetEnabled(active_); } #if !defined(OS_ANDROID)
diff --git a/chrome/browser/supervised_user/supervised_user_service.h b/chrome/browser/supervised_user/supervised_user_service.h index b461177..b896f63a5 100644 --- a/chrome/browser/supervised_user/supervised_user_service.h +++ b/chrome/browser/supervised_user/supervised_user_service.h
@@ -250,7 +250,6 @@ SupervisedUserURLFilter* ui_url_filter() const; SupervisedUserURLFilter* io_url_filter() const; - void SetEnabled(bool enabled); void SetDefaultFilteringBehavior( SupervisedUserURLFilter::FilteringBehavior behavior); void LoadWhitelists(
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.cc b/chrome/browser/supervised_user/supervised_user_url_filter.cc index dfece48..5318b1b 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter.cc +++ b/chrome/browser/supervised_user/supervised_user_url_filter.cc
@@ -231,8 +231,7 @@ } // namespace SupervisedUserURLFilter::SupervisedUserURLFilter() - : enabled_(false), - default_behavior_(ALLOW), + : default_behavior_(ALLOW), contents_(new Contents()), blacklist_(nullptr), amp_cache_path_regex_(kAmpCachePathPattern), @@ -324,16 +323,6 @@ return trimmed_host == trimmed_pattern; } -void SupervisedUserURLFilter::SetEnabled(bool enabled) { - if (enabled_ == enabled) - return; - - enabled_ = enabled; - - for (Observer& observer : observers_) - observer.OnSiteListUpdated(); -} - SupervisedUserURLFilter::FilteringBehavior SupervisedUserURLFilter::GetFilteringBehaviorForURL(const GURL& url) const { supervised_user_error_page::FilteringBehaviorReason reason; @@ -354,11 +343,6 @@ supervised_user_error_page::FilteringBehaviorReason* reason) const { DCHECK(CalledOnValidThread()); - if (!enabled_) { - *reason = supervised_user_error_page::DEFAULT; - return ALLOW; - } - GURL effective_url = GetEmbeddedURL(url); if (!effective_url.is_valid()) effective_url = url; @@ -661,10 +645,8 @@ void SupervisedUserURLFilter::SetContents(std::unique_ptr<Contents> contents) { DCHECK(CalledOnValidThread()); contents_ = std::move(contents); - if (enabled_) { - for (Observer& observer : observers_) - observer.OnSiteListUpdated(); - } + for (Observer& observer : observers_) + observer.OnSiteListUpdated(); } void SupervisedUserURLFilter::CheckCallback(
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.h b/chrome/browser/supervised_user/supervised_user_url_filter.h index e11c50cc..0b34d37 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter.h +++ b/chrome/browser/supervised_user/supervised_user_url_filter.h
@@ -61,11 +61,7 @@ class Observer { public: - // Called whenever the filter changes. - // TODO(treib,bauerb): Rename to OnURLFilterUpdated. virtual void OnSiteListUpdated() = 0; - // Called whenever a check started via - // GetFilteringBehaviorForURLWithAsyncChecks completes. virtual void OnURLChecked( const GURL& url, FilteringBehavior behavior, @@ -110,13 +106,6 @@ static bool HostMatchesPattern(const std::string& canonical_host, const std::string& pattern); - // Returns whether the filter is enabled. If this is false, all URL checks - // will return ALLOW. - bool enabled() const { return enabled_; } - - // Enables or disables the filter. Notifies observers if the state changed. - void SetEnabled(bool enabled); - // Returns the filtering behavior for a given URL, based on the default // behavior and whether it is on a site list. FilteringBehavior GetFilteringBehaviorForURL(const GURL& url) const; @@ -209,10 +198,6 @@ // This is mutable to allow notification in const member functions. mutable base::ObserverList<Observer> observers_; - // Whether this filter is enabled. True for supervised user profiles, false - // otherwise. - bool enabled_; - FilteringBehavior default_behavior_; std::unique_ptr<Contents> contents_;
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc b/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc index bbac7bae..e306abc 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc +++ b/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc
@@ -22,7 +22,6 @@ public: SupervisedUserURLFilterTest() : filter_(new SupervisedUserURLFilter) { filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); - filter_->SetEnabled(true); filter_->AddObserver(this); } @@ -69,11 +68,6 @@ EXPECT_TRUE(IsURLWhitelisted("chrome://extensions/")); EXPECT_TRUE(IsURLWhitelisted("chrome-extension://foo/main.html")); EXPECT_TRUE(IsURLWhitelisted("file:///home/chronos/user/Downloads/img.jpg")); - - // If the filter is disabled, everything should be allowed. - filter_->SetEnabled(false); - EXPECT_TRUE(IsURLWhitelisted("http://google.com")); - EXPECT_TRUE(IsURLWhitelisted("http://notgoogle.com/")); } TEST_F(SupervisedUserURLFilterTest, EffectiveURL) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 559b0fa..04eb8fc 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1892,8 +1892,14 @@ # apart from aura::Window, which is also not supported). if (!is_mac) { sources += [ - "views/ime_driver_mus.cc", - "views/ime_driver_mus.h", + "views/ime_driver/ime_driver_mus.cc", + "views/ime_driver/ime_driver_mus.h", + "views/ime_driver/input_method_bridge_chromeos.cc", + "views/ime_driver/input_method_bridge_chromeos.h", + "views/ime_driver/remote_text_input_client.cc", + "views/ime_driver/remote_text_input_client.h", + "views/ime_driver/simple_input_method.cc", + "views/ime_driver/simple_input_method.h", "views/tabs/window_finder_mus.cc", "views/tabs/window_finder_mus.h", ]
diff --git a/chrome/browser/ui/android/autofill/autofill_popup_view_android.cc b/chrome/browser/ui/android/autofill/autofill_popup_view_android.cc index 3046b58..6795ac7 100644 --- a/chrome/browser/ui/android/autofill/autofill_popup_view_android.cc +++ b/chrome/browser/ui/android/autofill/autofill_popup_view_android.cc
@@ -94,7 +94,7 @@ controller_->layout_model().GetIconResourceID(suggestion.icon)); } - bool deletable = + bool is_deletable = controller_->GetRemovalConfirmationText(i, nullptr, nullptr); bool is_label_multiline = suggestion.frontend_id == @@ -102,11 +102,16 @@ suggestion.frontend_id == POPUP_ITEM_ID_CREDIT_CARD_SIGNIN_PROMO; Java_AutofillPopupBridge_addToAutofillSuggestionArray( env, data_array, i, value, label, android_icon_id, - suggestion.frontend_id, deletable, is_label_multiline); + controller_->layout_model().IsIconAtStart(suggestion.frontend_id), + suggestion.frontend_id, is_deletable, is_label_multiline, + suggestion.is_value_bold); } - Java_AutofillPopupBridge_show(env, java_object_, data_array, - controller_->IsRTL()); + Java_AutofillPopupBridge_show( + env, java_object_, data_array, controller_->IsRTL(), + controller_->layout_model().GetBackgroundColor(), + controller_->layout_model().GetDividerColor(), + controller_->layout_model().GetDropdownItemHeight()); } void AutofillPopupViewAndroid::SuggestionSelected(
diff --git a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc index bcdcaf6f..169aac1 100644 --- a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc +++ b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
@@ -70,7 +70,7 @@ container_view, web_contents)), view_(NULL), - layout_model_(this), + layout_model_(this, delegate->IsCreditCardPopup()), delegate_(delegate), weak_ptr_factory_(this) { ClearState();
diff --git a/chrome/browser/ui/autofill/autofill_popup_layout_model.cc b/chrome/browser/ui/autofill/autofill_popup_layout_model.cc index 5364cb6..c93e702 100644 --- a/chrome/browser/ui/autofill/autofill_popup_layout_model.cc +++ b/chrome/browser/ui/autofill/autofill_popup_layout_model.cc
@@ -10,10 +10,12 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/autofill/autofill_popup_view.h" #include "chrome/browser/ui/autofill/popup_constants.h" +#include "components/autofill/core/browser/autofill_experiments.h" #include "components/autofill/core/browser/popup_item_ids.h" #include "components/autofill/core/browser/suggestion.h" #include "components/autofill/core/common/autofill_util.h" #include "components/grit/components_scaled_resources.h" +#include "third_party/skia/include/core/SkColor.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/color_utils.h" @@ -70,8 +72,8 @@ } // namespace AutofillPopupLayoutModel::AutofillPopupLayoutModel( - AutofillPopupViewDelegate* delegate) - : delegate_(delegate) { + AutofillPopupViewDelegate* delegate, bool is_credit_card_popup) + : delegate_(delegate), is_credit_card_popup_(is_credit_card_popup) { #if !defined(OS_ANDROID) smaller_font_list_ = normal_font_list_.DeriveWithSizeDelta(kSmallerFontSizeDelta); @@ -282,4 +284,28 @@ return gfx::ToEnclosingRect(delegate_->element_bounds()); } +bool AutofillPopupLayoutModel::IsPopupLayoutExperimentEnabled() const { + return is_credit_card_popup_ && + IsAutofillCreditCardPopupLayoutExperimentEnabled(); +} + +SkColor AutofillPopupLayoutModel::GetBackgroundColor() const { + return is_credit_card_popup_ ? + GetCreditCardPopupBackgroundColor() : SK_ColorTRANSPARENT; +} + +SkColor AutofillPopupLayoutModel::GetDividerColor() const { + return is_credit_card_popup_ ? + GetCreditCardPopupDividerColor() : SK_ColorTRANSPARENT; +} + +unsigned int AutofillPopupLayoutModel::GetDropdownItemHeight() const { + return GetPopupDropdownItemHeight(); +} + +bool AutofillPopupLayoutModel::IsIconAtStart(int frontend_id) const { + return frontend_id == POPUP_ITEM_ID_HTTP_NOT_SECURE_WARNING_MESSAGE || + (is_credit_card_popup_ && IsIconInCreditCardPopupAtStart()); +} + } // namespace autofill
diff --git a/chrome/browser/ui/autofill/autofill_popup_layout_model.h b/chrome/browser/ui/autofill/autofill_popup_layout_model.h index b3a2c73..6e31077 100644 --- a/chrome/browser/ui/autofill/autofill_popup_layout_model.h +++ b/chrome/browser/ui/autofill/autofill_popup_layout_model.h
@@ -25,7 +25,9 @@ // TODO(mathp): investigate moving ownership of this class to the view. class AutofillPopupLayoutModel { public: - explicit AutofillPopupLayoutModel(AutofillPopupViewDelegate* delegate); + AutofillPopupLayoutModel(AutofillPopupViewDelegate* delegate, + bool is_credit_card_popup); + ~AutofillPopupLayoutModel(); // The minimum amount of padding between the Autofill name and subtext, @@ -92,6 +94,27 @@ // resource isn't recognized. int GetIconResourceID(const base::string16& resource_name) const; + // Returns whether |GetBackgroundColor, GetDividerColor| returns a custom + // color configured in an experiment to tweak autofill popup layout. + bool IsPopupLayoutExperimentEnabled() const; + + // Returns the background color for the autofill popup, or + // |SK_ColorTRANSPARENT| if not in an experiment to tweak autofill popup + // layout. + SkColor GetBackgroundColor() const; + + // Returns the divider color for the autofill popup, or + // |SK_ColorTRANSPARENT| if not in an experiment to tweak autofill popup + // layout. + SkColor GetDividerColor() const; + + // Returns the dropdown item height, or 0 if the dropdown item height isn't + // configured in an experiment to tweak autofill popup layout. + unsigned int GetDropdownItemHeight() const; + + // Returns true if suggestion icon must be displayed before suggestion text. + bool IsIconAtStart(int frontend_id) const; + private: // Returns the enclosing rectangle for the element_bounds. const gfx::Rect RoundedElementBounds() const; @@ -116,6 +139,8 @@ AutofillPopupViewDelegate* delegate_; // Weak reference. + const bool is_credit_card_popup_; + DISALLOW_COPY_AND_ASSIGN(AutofillPopupLayoutModel); };
diff --git a/chrome/browser/ui/autofill/autofill_popup_layout_model_unittest.cc b/chrome/browser/ui/autofill/autofill_popup_layout_model_unittest.cc index 47b408a7..920a88a 100644 --- a/chrome/browser/ui/autofill/autofill_popup_layout_model_unittest.cc +++ b/chrome/browser/ui/autofill/autofill_popup_layout_model_unittest.cc
@@ -74,7 +74,8 @@ ChromeRenderViewHostTestHarness::SetUp(); delegate_.reset(new TestAutofillPopupViewDelegate(web_contents())); - layout_model_.reset(new AutofillPopupLayoutModel(delegate_.get())); + layout_model_.reset(new AutofillPopupLayoutModel( + delegate_.get(), false /* is_credit_card_field */)); } AutofillPopupLayoutModel* layout_model() { return layout_model_.get(); }
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h index e390147..5f4fe0b 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h
@@ -294,10 +294,10 @@ base::scoped_nsobject<BookmarkContextMenuCocoaController> contextMenuController_; - // Weak pointer to the pulsed button for the currently pulsing node. We need - // to store this as it may not be possible to determine the pulsing button if - // the pulsing node is deleted. Nil if there is no pulsing node. - BookmarkButton* pulsingButton_; + // The pulsed button for the currently pulsing node. We need to store this as + // it may not be possible to determine the pulsing button if the pulsing node + // is deleted. Nil if there is no pulsing node. + base::scoped_nsobject<BookmarkButton> pulsingButton_; // Specifically watch the currently pulsing node. This lets us stop pulsing // when anything happens to the node. Null if there is no pulsing node.
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm index 51c7bce..d3b2c4f1 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
@@ -361,7 +361,8 @@ - (void)startPulsingBookmarkNode:(const BookmarkNode*)node { [self stopPulsingBookmarkNode]; - pulsingButton_ = [self bookmarkButtonToPulseForNode:node]; + pulsingButton_.reset([self bookmarkButtonToPulseForNode:node], + base::scoped_policy::RETAIN); if (!pulsingButton_) return; @@ -379,7 +380,7 @@ return; [pulsingButton_ setPulseIsStuckOn:NO]; - pulsingButton_ = nil; + pulsingButton_.reset(); pulsingBookmarkObserver_.reset(); }
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm index c0056eb..a182b0f 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm
@@ -1568,6 +1568,46 @@ EXPECT_TRUE([view isHidden]); } +// Simulate coarse browser window width change and ensure that the bookmark +// buttons that should be visible are visible. +TEST_F(BookmarkBarControllerTest, RedistributeButtonsOnBarAsNeeded) { + // Hide the apps shortcut. + profile()->GetPrefs()->SetBoolean( + bookmarks::prefs::kShowAppsShortcutInBookmarkBar, false); + ASSERT_TRUE([bar_ appsPageShortcutButtonIsHidden]); + + // Add three buttons to the bookmark bar. + BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile()); + const BookmarkNode* root = model->bookmark_bar_node(); + // Make long labels to test coarse resizes. After 16 digits, text eliding + // starts. + const std::string model_string( + "0000000000000000 1111111111111111 2222222222222222 "); + bookmarks::test::AddNodesFromModelString(model, root, model_string); + NSRect frame = [[bar_ view] frame]; + frame.size.width = 400; // Typical minimum browser size. + [[bar_ view] setFrame:frame]; + EXPECT_EQ(2, [bar_ displayedButtonCount]); + + { + base::mac::ScopedNSAutoreleasePool pool; + frame.size.width = 800; + [[bar_ view] setFrame:frame]; + EXPECT_EQ(3, [bar_ displayedButtonCount]); + + const BookmarkNode* last = model->bookmark_bar_node()->GetChild(2); + EXPECT_TRUE(last); + [bar_ startPulsingBookmarkNode:last]; + + frame.size.width = 400; + [[bar_ view] setFrame:frame]; + EXPECT_EQ(2, [bar_ displayedButtonCount]); + } + + // Regression test for http://crbug.com/616051. + [bar_ stopPulsingBookmarkNode]; +} + // Simiulate browser window width change and ensure that the bookmark buttons // that should be visible are visible. // Appears to fail on Mac 10.11 bot on the waterfall; http://crbug.com/612640.
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h index 05e33de..30bb569 100644 --- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h +++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.h
@@ -35,7 +35,6 @@ // as AvatarButtonErrorController. std::unique_ptr<ProfileUpdateObserver> profileObserver_; - @private // The menu controller, if the menu is open. BaseBubbleController* menuController_; } @@ -59,8 +58,6 @@ @interface AvatarBaseController (ExposedForTesting) - (BaseBubbleController*)menuController; - -- (BOOL)isCtrlPressed; @end class ProfileUpdateObserver : public ProfileAttributesStorage::Observer,
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm index fde4c663..a3e0d5a1 100644 --- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm +++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
@@ -171,13 +171,6 @@ profiles::TutorialMode tutorialMode; profiles::BubbleViewModeFromAvatarBubbleMode( mode, &viewMode, &tutorialMode); - // Don't start creating the view if it would be an empty fast user switcher. - // It has to happen here to prevent the view system from creating an empty - // container. - if (viewMode == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER && - !profiles::HasProfileSwitchTargets(browser_->profile())) { - return; - } menuController_ = [[ProfileChooserController alloc] initWithBrowser:browser_ @@ -197,29 +190,9 @@ ProfileMetrics::LogProfileOpenMethod(ProfileMetrics::ICON_AVATAR_BUBBLE); } -- (BOOL)isCtrlPressed { - return [NSEvent modifierFlags] & NSControlKeyMask ? YES : NO; -} - - (IBAction)buttonClicked:(id)sender { - BrowserWindow::AvatarBubbleMode mode = - BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT; - if ([self isCtrlPressed]) - mode = BrowserWindow::AVATAR_BUBBLE_MODE_FAST_USER_SWITCH; - [self showAvatarBubbleAnchoredAt:button_ - withMode:mode - withServiceType:signin::GAIA_SERVICE_TYPE_NONE - fromAccessPoint:signin_metrics::AccessPoint:: - ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN]; -} - -- (IBAction)buttonRightClicked:(id)sender { - BrowserWindow::AvatarBubbleMode mode = - BrowserWindow::AVATAR_BUBBLE_MODE_FAST_USER_SWITCH; - - [self showAvatarBubbleAnchoredAt:button_ - withMode:mode + withMode:BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT withServiceType:signin::GAIA_SERVICE_TYPE_NONE fromAccessPoint:signin_metrics::AccessPoint:: ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN];
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm index 13e7fab..7bc7e0d 100644 --- a/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm +++ b/chrome/browser/ui/cocoa/profiles/avatar_button_controller.mm
@@ -185,7 +185,7 @@ [avatarButton setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin]; [avatarButton setTarget:self]; [avatarButton setAction:@selector(buttonClicked:)]; - [avatarButton setRightAction:@selector(buttonRightClicked:)]; + [avatarButton setRightAction:@selector(buttonClicked:)]; // Check if the account already has an authentication or sync error and // initialize the avatar button UI. @@ -298,12 +298,13 @@ withMode:(BrowserWindow::AvatarBubbleMode)mode withServiceType:(signin::GAIAServiceType)serviceType fromAccessPoint:(signin_metrics::AccessPoint)accessPoint { - AvatarButton* button = base::mac::ObjCCastStrict<AvatarButton>(button_); - [button setIsActive:YES]; [super showAvatarBubbleAnchoredAt:anchor withMode:mode withServiceType:serviceType fromAccessPoint:accessPoint]; + + AvatarButton* button = base::mac::ObjCCastStrict<AvatarButton>(button_); + [button setIsActive:[[menuController_ window] isVisible]]; } - (void)bubbleWillClose:(NSNotification*)notif {
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_button_controller_unittest.mm b/chrome/browser/ui/cocoa/profiles/avatar_button_controller_unittest.mm index 015cfbd5..8e7d6d3 100644 --- a/chrome/browser/ui/cocoa/profiles/avatar_button_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/profiles/avatar_button_controller_unittest.mm
@@ -29,31 +29,6 @@ - (void)setErrorStatus:(BOOL)hasError; @end -// Subclassing AvatarButtonController to be able to control the state of -// keyboard modifierFlags. -@interface AvatarButtonControllerForTesting : AvatarButtonController { - @private - bool isCtrlPressed_; -} -@end - -@interface AvatarButtonControllerForTesting (ExposedForTesting) -- (void)setIsCtrlPressed:(BOOL)isPressed; -- (BOOL)isCtrlPressed; -@end - -@implementation AvatarButtonControllerForTesting -- (void)setIsCtrlPressed:(BOOL)isPressed { - isCtrlPressed_ = isPressed; -} - -- (BOOL)isCtrlPressed { - // Always report that Cmd is not pressed since that's the case we're testing - // and otherwise running the test while holding the Cmd key makes it fail. - return isCtrlPressed_; -} -@end - class AvatarButtonControllerTest : public CocoaProfileTest { public: void SetUp() override { @@ -63,8 +38,7 @@ ASSERT_TRUE(browser()); controller_.reset( - [[AvatarButtonControllerForTesting alloc] initWithBrowser:browser()]); - [controller_ setIsCtrlPressed:false]; + [[AvatarButtonController alloc] initWithBrowser:browser()]); } void TearDown() override { @@ -76,10 +50,10 @@ NSView* view() { return [controller_ view]; } - AvatarButtonControllerForTesting* controller() { return controller_.get(); } + AvatarButtonController* controller() { return controller_.get(); } private: - base::scoped_nsobject<AvatarButtonControllerForTesting> controller_; + base::scoped_nsobject<AvatarButtonController> controller_; }; TEST_F(AvatarButtonControllerTest, GenericButtonShown) { @@ -130,32 +104,3 @@ [menu close]; EXPECT_FALSE([controller() menuController]); } - -TEST_F(AvatarButtonControllerTest, DontOpenFastSwitcherWithoutTarget) { - EXPECT_FALSE([controller() menuController]); - - [controller() setIsCtrlPressed:YES]; - [button() performClick:button()]; - - // If there's only one profile and the fast user switcher is requested, - // nothing should happen. - EXPECT_FALSE([controller() menuController]); -} - -TEST_F(AvatarButtonControllerTest, OpenFastUserSwitcherWithTarget) { - testing_profile_manager()->CreateTestingProfile("batman"); - EXPECT_FALSE([controller() menuController]); - - [controller() setIsCtrlPressed:YES]; - [button() performClick:button()]; - - BaseBubbleController* menu = [controller() menuController]; - EXPECT_TRUE(menu); - EXPECT_TRUE([menu isKindOfClass:[ProfileChooserController class]]); - - // Do not animate out because that is hard to test around. - static_cast<InfoBubbleWindow*>(menu.window).allowedAnimations = - info_bubble::kAnimateNone; - [menu close]; - EXPECT_FALSE([controller() menuController]); -}
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h index 10bfdff..f59a72bf 100644 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h +++ b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.h
@@ -8,7 +8,7 @@ #include "base/mac/scoped_nsobject.h" #include "base/macros.h" -#import "chrome/browser/ui/cocoa/base_bubble_controller.h" +#import "chrome/browser/ui/cocoa/omnibox_decoration_bubble_controller.h" #include "chrome/browser/ui/website_settings/website_settings_ui.h" #include "content/public/browser/web_contents_observer.h" @@ -31,7 +31,7 @@ // // TODO(palmer): Normalize all WebsiteSettings*, SiteSettings*, PageInfo*, et c. // to OriginInfo*. -@interface WebsiteSettingsBubbleController : BaseBubbleController { +@interface WebsiteSettingsBubbleController : OmniboxDecorationBubbleController { @private content::WebContents* webContents_;
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm index 23152e05..df64d4e3 100644 --- a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm +++ b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm
@@ -235,6 +235,12 @@ return self; } +- (LocationBarDecoration*)decorationForBubble { + BrowserWindowController* controller = [[self parentWindow] windowController]; + LocationBarViewMac* location_bar = [controller locationBarBridge]; + return location_bar ? location_bar->GetPageInfoDecoration() : nullptr; +} + - (Profile*)profile { return Profile::FromBrowserContext(webContents_->GetBrowserContext()); }
diff --git a/chrome/browser/ui/views/ash/OWNERS b/chrome/browser/ui/views/ash/OWNERS index f19e7650..6c1a33b 100644 --- a/chrome/browser/ui/views/ash/OWNERS +++ b/chrome/browser/ui/views/ash/OWNERS
@@ -1,2 +1,4 @@ derat@chromium.org sky@chromium.org +jamescook@chromium.org +erg@chromium.org
diff --git a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc index f158192..83f63ce 100644 --- a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc +++ b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
@@ -6,7 +6,7 @@ #include "chrome/browser/ui/views/chrome_constrained_window_views_client.h" #include "chrome/browser/ui/views/chrome_views_delegate.h" -#include "chrome/browser/ui/views/ime_driver_mus.h" +#include "chrome/browser/ui/views/ime_driver/ime_driver_mus.h" #include "components/constrained_window/constrained_window_views.h" #if defined(USE_AURA)
diff --git a/chrome/browser/ui/views/ime_driver/ime_driver_mus.cc b/chrome/browser/ui/views/ime_driver/ime_driver_mus.cc new file mode 100644 index 0000000..763cbd90 --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/ime_driver_mus.cc
@@ -0,0 +1,58 @@ +// Copyright 2016 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 "chrome/browser/ui/views/ime_driver/ime_driver_mus.h" + +#include "content/public/browser/browser_thread.h" +#include "content/public/common/service_manager_connection.h" +#include "mojo/public/cpp/bindings/strong_binding.h" +#include "services/service_manager/public/cpp/connector.h" +#include "services/ui/public/interfaces/constants.mojom.h" +#include "services/ui/public/interfaces/ime/ime.mojom.h" +#include "ui/base/ime/ime_bridge.h" + +#if defined(OS_CHROMEOS) +#include "chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h" +#else +#include "chrome/browser/ui/views/ime_driver/simple_input_method.h" +#endif // defined(OS_CHROMEOS) + +IMEDriver::IMEDriver() { + ui::IMEBridge::Initialize(); +} + +IMEDriver::~IMEDriver() {} + +// static +void IMEDriver::Register() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + ui::mojom::IMEDriverPtr ime_driver_ptr; + mojo::MakeStrongBinding(base::MakeUnique<IMEDriver>(), + GetProxy(&ime_driver_ptr)); + ui::mojom::IMERegistrarPtr ime_registrar; + content::ServiceManagerConnection::GetForProcess() + ->GetConnector() + ->ConnectToInterface(ui::mojom::kServiceName, &ime_registrar); + ime_registrar->RegisterDriver(std::move(ime_driver_ptr)); +} + +void IMEDriver::StartSession( + int32_t session_id, + ui::mojom::TextInputClientPtr client, + ui::mojom::InputMethodRequest input_method_request) { +#if defined(OS_CHROMEOS) + input_method_bindings_[session_id] = + base::MakeUnique<mojo::Binding<ui::mojom::InputMethod>>( + new InputMethodBridge(std::move(client)), + std::move(input_method_request)); +#else + input_method_bindings_[session_id] = + base::MakeUnique<mojo::Binding<ui::mojom::InputMethod>>( + new SimpleInputMethod()); +#endif +} + +void IMEDriver::CancelSession(int32_t session_id) { + input_method_bindings_.erase(session_id); +}
diff --git a/chrome/browser/ui/views/ime_driver_mus.h b/chrome/browser/ui/views/ime_driver/ime_driver_mus.h similarity index 82% rename from chrome/browser/ui/views/ime_driver_mus.h rename to chrome/browser/ui/views/ime_driver/ime_driver_mus.h index bc70b37..e81d34d 100644 --- a/chrome/browser/ui/views/ime_driver_mus.h +++ b/chrome/browser/ui/views/ime_driver/ime_driver_mus.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_VIEWS_IME_DRIVER_MUS_H_ -#define CHROME_BROWSER_UI_VIEWS_IME_DRIVER_MUS_H_ +#ifndef CHROME_BROWSER_UI_VIEWS_IME_DRIVER_IME_DRIVER_MUS_H_ +#define CHROME_BROWSER_UI_VIEWS_IME_DRIVER_IME_DRIVER_MUS_H_ #include <stdint.h> @@ -15,14 +15,13 @@ class IMEDriver : public ui::mojom::IMEDriver { public: + IMEDriver(); ~IMEDriver() override; // Instantiate the IME driver and register it to the UI service. static void Register(); private: - IMEDriver(); - // ui::mojom::IMEDriver: void StartSession( int32_t session_id, @@ -36,4 +35,4 @@ DISALLOW_COPY_AND_ASSIGN(IMEDriver); }; -#endif // CHROME_BROWSER_UI_VIEWS_IME_DRIVER_MUS_H_ +#endif // CHROME_BROWSER_UI_VIEWS_IME_DRIVER_IME_DRIVER_MUS_H_
diff --git a/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc new file mode 100644 index 0000000..76869b1c --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.cc
@@ -0,0 +1,48 @@ +// Copyright 2016 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 "chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h" + +#include "chrome/browser/ui/views/ime_driver/remote_text_input_client.h" + +InputMethodBridge::InputMethodBridge(ui::mojom::TextInputClientPtr client) + : client_(base::MakeUnique<RemoteTextInputClient>(std::move(client))), + input_method_chromeos_( + base::MakeUnique<ui::InputMethodChromeOS>(nullptr)) { + input_method_chromeos_->SetFocusedTextInputClient(client_.get()); +} + +InputMethodBridge::~InputMethodBridge() {} + +void InputMethodBridge::OnTextInputModeChanged( + ui::mojom::TextInputMode text_input_mode) { + // TODO(moshayedi): crbug.com/631527. Consider removing this, as + // ui::InputMethodChromeOS doesn't have this. +} + +void InputMethodBridge::OnTextInputTypeChanged( + ui::mojom::TextInputType text_input_type) { + input_method_chromeos_->OnTextInputTypeChanged(client_.get()); +} + +void InputMethodBridge::OnCaretBoundsChanged(const gfx::Rect& caret_bounds) { + input_method_chromeos_->OnCaretBoundsChanged(client_.get()); +} + +void InputMethodBridge::ProcessKeyEvent( + std::unique_ptr<ui::Event> event, + const ProcessKeyEventCallback& callback) { + DCHECK(event->IsKeyEvent()); + ui::KeyEvent* key_event = event->AsKeyEvent(); + if (!key_event->is_char()) { + input_method_chromeos_->DispatchKeyEvent( + key_event, base::MakeUnique<base::Callback<void(bool)>>(callback)); + } else { + callback.Run(false); + } +} + +void InputMethodBridge::CancelComposition() { + input_method_chromeos_->CancelComposition(client_.get()); +}
diff --git a/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h new file mode 100644 index 0000000..d757a75 --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h
@@ -0,0 +1,35 @@ +// Copyright 2016 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 CHROME_BROWSER_UI_VIEWS_IME_DRIVER_INPUT_METHOD_BRIDGE_CHROMEOS_H_ +#define CHROME_BROWSER_UI_VIEWS_IME_DRIVER_INPUT_METHOD_BRIDGE_CHROMEOS_H_ + +#include "services/ui/public/interfaces/ime/ime.mojom.h" +#include "ui/base/ime/input_method_chromeos.h" + +// This bridges between mojo InputMethod API and ui::InputMethodChromeOS. It +// forwards the received events to an instance of ui::InputMethodChromeOS. +class InputMethodBridge : public ui::mojom::InputMethod { + public: + explicit InputMethodBridge(ui::mojom::TextInputClientPtr client); + ~InputMethodBridge() override; + + // ui::mojom::InputMethod: + void OnTextInputModeChanged( + ui::mojom::TextInputMode text_input_mode) override; + void OnTextInputTypeChanged( + ui::mojom::TextInputType text_input_type) override; + void OnCaretBoundsChanged(const gfx::Rect& caret_bounds) override; + void ProcessKeyEvent(std::unique_ptr<ui::Event> key_event, + const ProcessKeyEventCallback& callback) override; + void CancelComposition() override; + + private: + std::unique_ptr<ui::TextInputClient> client_; + std::unique_ptr<ui::InputMethodChromeOS> input_method_chromeos_; + + DISALLOW_COPY_AND_ASSIGN(InputMethodBridge); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_IME_DRIVER_INPUT_METHOD_BRIDGE_CHROMEOS_H_
diff --git a/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos_unittest.cc b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos_unittest.cc new file mode 100644 index 0000000..9d7cc668 --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos_unittest.cc
@@ -0,0 +1,200 @@ +// Copyright 2016 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 <stdint.h> + +#include "base/bind.h" +#include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/ui/views/ime_driver/input_method_bridge_chromeos.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "mojo/public/cpp/bindings/binding.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/ime/ime_bridge.h" +#include "ui/events/event.h" +#include "ui/events/event_constants.h" +#include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" +#include "ui/events/keycodes/dom/dom_key.h" +#include "ui/events/keycodes/keyboard_code_conversion.h" +#include "ui/events/keycodes/keyboard_codes.h" + +enum class CompositionEventType { + SET, + CONFIRM, + CLEAR, + INSERT_TEXT, + INSERT_CHAR +}; + +struct CompositionEvent { + CompositionEventType type; + base::string16 text_data; + base::char16 char_data; +}; + +class TestTextInputClient : public ui::mojom::TextInputClient { + public: + explicit TestTextInputClient(ui::mojom::TextInputClientRequest request) + : binding_(this, std::move(request)) {} + + CompositionEvent WaitUntilCompositionEvent() { + if (!receieved_event_.has_value()) { + run_loop_ = base::MakeUnique<base::RunLoop>(); + run_loop_->Run(); + run_loop_.reset(); + } + CompositionEvent result = receieved_event_.value(); + receieved_event_.reset(); + return result; + } + + private: + void SetCompositionText(const ui::CompositionText& composition) override { + CompositionEvent ev = {CompositionEventType::SET, composition.text, 0}; + receieved_event_ = ev; + if (run_loop_) + run_loop_->Quit(); + } + void ConfirmCompositionText() override { + CompositionEvent ev = {CompositionEventType::CONFIRM, base::string16(), 0}; + receieved_event_ = ev; + if (run_loop_) + run_loop_->Quit(); + } + void ClearCompositionText() override { + CompositionEvent ev = {CompositionEventType::CLEAR, base::string16(), 0}; + receieved_event_ = ev; + if (run_loop_) + run_loop_->Quit(); + } + void InsertText(const std::string& text) override { + CompositionEvent ev = {CompositionEventType::INSERT_TEXT, + base::UTF8ToUTF16(text), 0}; + receieved_event_ = ev; + if (run_loop_) + run_loop_->Quit(); + } + void InsertChar(std::unique_ptr<ui::Event> event) override { + ASSERT_TRUE(event->IsKeyEvent()); + CompositionEvent ev = {CompositionEventType::INSERT_CHAR, base::string16(), + event->AsKeyEvent()->GetCharacter()}; + receieved_event_ = ev; + if (run_loop_) + run_loop_->Quit(); + } + + mojo::Binding<ui::mojom::TextInputClient> binding_; + std::unique_ptr<base::RunLoop> run_loop_; + base::Optional<CompositionEvent> receieved_event_; + + DISALLOW_COPY_AND_ASSIGN(TestTextInputClient); +}; + +class InputMethodBridgeChromeOSTest : public testing::Test { + public: + InputMethodBridgeChromeOSTest() + : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {} + ~InputMethodBridgeChromeOSTest() override {} + + void SetUp() override { + ui::IMEBridge::Initialize(); + + ui::mojom::TextInputClientPtr client_ptr; + client_ = base::MakeUnique<TestTextInputClient>(GetProxy(&client_ptr)); + input_method_ = base::MakeUnique<InputMethodBridge>(std::move(client_ptr)); + } + + bool ProcessKeyEvent(std::unique_ptr<ui::Event> event) { + handled_.reset(); + + input_method_->ProcessKeyEvent( + std::move(event), + base::Bind(&InputMethodBridgeChromeOSTest::ProcessKeyEventCallback, + base::Unretained(this))); + + if (!handled_.has_value()) { + run_loop_ = base::MakeUnique<base::RunLoop>(); + run_loop_->Run(); + run_loop_.reset(); + } + + return handled_.value(); + } + + std::unique_ptr<ui::Event> UnicodeKeyPress(ui::KeyboardCode vkey, + ui::DomCode code, + int flags, + base::char16 character) const { + return base::MakeUnique<ui::KeyEvent>(ui::ET_KEY_PRESSED, vkey, code, flags, + ui::DomKey::FromCharacter(character), + ui::EventTimeForNow()); + } + + protected: + void ProcessKeyEventCallback(bool handled) { + handled_ = handled; + if (run_loop_) + run_loop_->Quit(); + } + + content::TestBrowserThreadBundle thread_bundle_; + std::unique_ptr<TestTextInputClient> client_; + std::unique_ptr<InputMethodBridge> input_method_; + std::unique_ptr<base::RunLoop> run_loop_; + base::Optional<bool> handled_; + + DISALLOW_COPY_AND_ASSIGN(InputMethodBridgeChromeOSTest); +}; + +// Tests if hexadecimal composition provided by ui::CharacterComposer works +// correctly. ui::CharacterComposer is tried if no input method extensions +// have been registered yet. +TEST_F(InputMethodBridgeChromeOSTest, HexadecimalComposition) { + struct { + ui::KeyboardCode vkey; + ui::DomCode code; + int flags; + base::char16 character; + std::string composition_text; + } kTestSequence[] = { + {ui::VKEY_U, ui::DomCode::US_U, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, + 'U', "u"}, + {ui::VKEY_3, ui::DomCode::DIGIT3, 0, '3', "u3"}, + {ui::VKEY_0, ui::DomCode::DIGIT0, 0, '0', "u30"}, + {ui::VKEY_4, ui::DomCode::DIGIT4, 0, '4', "u304"}, + {ui::VKEY_2, ui::DomCode::DIGIT2, 0, '2', "u3042"}, + }; + + // Send the Ctrl-Shift-U,3,4,0,2 sequence. + for (size_t i = 0; i < arraysize(kTestSequence); i++) { + EXPECT_TRUE(ProcessKeyEvent( + UnicodeKeyPress(kTestSequence[i].vkey, kTestSequence[i].code, + kTestSequence[i].flags, kTestSequence[i].character))); + CompositionEvent ev = client_->WaitUntilCompositionEvent(); + EXPECT_EQ(CompositionEventType::SET, ev.type); + EXPECT_EQ(base::UTF8ToUTF16(kTestSequence[i].composition_text), + ev.text_data); + } + + // Press the return key and verify that the composition text was converted + // to the desired text. + EXPECT_TRUE(ProcessKeyEvent( + UnicodeKeyPress(ui::VKEY_RETURN, ui::DomCode::ENTER, 0, '\r'))); + CompositionEvent ev = client_->WaitUntilCompositionEvent(); + EXPECT_EQ(CompositionEventType::INSERT_TEXT, ev.type); + EXPECT_EQ(base::string16(1, 0x3042), ev.text_data); +} + +// Test that Ctrl-C, Ctrl-X, and Ctrl-V are not handled. +TEST_F(InputMethodBridgeChromeOSTest, ClipboardAccelerators) { + EXPECT_FALSE(ProcessKeyEvent(UnicodeKeyPress(ui::VKEY_C, ui::DomCode::US_C, + ui::EF_CONTROL_DOWN, 'C'))); + EXPECT_FALSE(ProcessKeyEvent(UnicodeKeyPress(ui::VKEY_X, ui::DomCode::US_X, + ui::EF_CONTROL_DOWN, 'X'))); + EXPECT_FALSE(ProcessKeyEvent(UnicodeKeyPress(ui::VKEY_V, ui::DomCode::US_V, + ui::EF_CONTROL_DOWN, 'V'))); +}
diff --git a/chrome/browser/ui/views/ime_driver/remote_text_input_client.cc b/chrome/browser/ui/views/ime_driver/remote_text_input_client.cc new file mode 100644 index 0000000..b7705ad0 --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/remote_text_input_client.cc
@@ -0,0 +1,163 @@ +// Copyright 2016 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. + +// Reduce number of log messages by logging each NOTIMPLEMENTED() only once. +// This has to be before any other includes, else default is picked up. +// See base/logging.h for details on this. +#define NOTIMPLEMENTED_POLICY 5 + +#include "chrome/browser/ui/views/ime_driver/remote_text_input_client.h" + +#include "base/strings/utf_string_conversions.h" + +RemoteTextInputClient::RemoteTextInputClient( + ui::mojom::TextInputClientPtr remote_client) + : remote_client_(std::move(remote_client)) {} + +RemoteTextInputClient::~RemoteTextInputClient() {} + +void RemoteTextInputClient::SetCompositionText( + const ui::CompositionText& composition) { + remote_client_->SetCompositionText(composition); +} + +void RemoteTextInputClient::ConfirmCompositionText() { + remote_client_->ConfirmCompositionText(); +} + +void RemoteTextInputClient::ClearCompositionText() { + remote_client_->ClearCompositionText(); +} + +void RemoteTextInputClient::InsertText(const base::string16& text) { + remote_client_->InsertText(base::UTF16ToUTF8(text)); +} + +void RemoteTextInputClient::InsertChar(const ui::KeyEvent& event) { + remote_client_->InsertChar(ui::Event::Clone(event)); +} + +ui::TextInputType RemoteTextInputClient::GetTextInputType() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return ui::TEXT_INPUT_TYPE_TEXT; +} + +ui::TextInputMode RemoteTextInputClient::GetTextInputMode() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return ui::TEXT_INPUT_MODE_DEFAULT; +} + +base::i18n::TextDirection RemoteTextInputClient::GetTextDirection() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return base::i18n::UNKNOWN_DIRECTION; +} + +int RemoteTextInputClient::GetTextInputFlags() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return 0; +} + +bool RemoteTextInputClient::CanComposeInline() const { + // If we return false here, ui::InputMethodChromeOS will try to create a + // composition window. But here we are at IMEDriver, and composition + // window shouldn't be created by IMEDriver. + return true; +} + +gfx::Rect RemoteTextInputClient::GetCaretBounds() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return gfx::Rect(); +} + +bool RemoteTextInputClient::GetCompositionCharacterBounds( + uint32_t index, + gfx::Rect* rect) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::HasCompositionText() const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::GetTextRange(gfx::Range* range) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::GetCompositionTextRange(gfx::Range* range) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::GetSelectionRange(gfx::Range* range) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::SetSelectionRange(const gfx::Range& range) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::DeleteRange(const gfx::Range& range) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +bool RemoteTextInputClient::GetTextFromRange(const gfx::Range& range, + base::string16* text) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +void RemoteTextInputClient::OnInputMethodChanged() { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); +} + +bool RemoteTextInputClient::ChangeTextDirectionAndLayoutAlignment( + base::i18n::TextDirection direction) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +void RemoteTextInputClient::ExtendSelectionAndDelete(size_t before, + size_t after) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); +} + +void RemoteTextInputClient::EnsureCaretNotInRect(const gfx::Rect& rect) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); +} + +bool RemoteTextInputClient::IsTextEditCommandEnabled( + ui::TextEditCommand command) const { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); + return false; +} + +void RemoteTextInputClient::SetTextEditCommandForNextKeyEvent( + ui::TextEditCommand command) { + // TODO(moshayedi): crbug.com/631527. + NOTIMPLEMENTED(); +}
diff --git a/chrome/browser/ui/views/ime_driver/remote_text_input_client.h b/chrome/browser/ui/views/ime_driver/remote_text_input_client.h new file mode 100644 index 0000000..056be5f1 --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/remote_text_input_client.h
@@ -0,0 +1,55 @@ +// Copyright 2016 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 CHROME_BROWSER_UI_VIEWS_IME_DRIVER_REMOTE_TEXT_INPUT_CLIENT_H_ +#define CHROME_BROWSER_UI_VIEWS_IME_DRIVER_REMOTE_TEXT_INPUT_CLIENT_H_ + +#include "services/ui/public/interfaces/ime/ime.mojom.h" +#include "ui/base/ime/text_input_client.h" + +// This implementation of ui::TextInputClient sends all updates via mojo IPC to +// a remote client. This is intended to be passed to the overrides of +// ui::InputMethod::SetFocusedTextInputClient(). +class RemoteTextInputClient : public ui::TextInputClient { + public: + explicit RemoteTextInputClient(ui::mojom::TextInputClientPtr remote_client); + ~RemoteTextInputClient() override; + + private: + // ui::TextInputClient: + void SetCompositionText(const ui::CompositionText& composition) override; + void ConfirmCompositionText() override; + void ClearCompositionText() override; + void InsertText(const base::string16& text) override; + void InsertChar(const ui::KeyEvent& event) override; + ui::TextInputType GetTextInputType() const override; + ui::TextInputMode GetTextInputMode() const override; + base::i18n::TextDirection GetTextDirection() const override; + int GetTextInputFlags() const override; + bool CanComposeInline() const override; + gfx::Rect GetCaretBounds() const override; + bool GetCompositionCharacterBounds(uint32_t index, + gfx::Rect* rect) const override; + bool HasCompositionText() const override; + bool GetTextRange(gfx::Range* range) const override; + bool GetCompositionTextRange(gfx::Range* range) const override; + bool GetSelectionRange(gfx::Range* range) const override; + bool SetSelectionRange(const gfx::Range& range) override; + bool DeleteRange(const gfx::Range& range) override; + bool GetTextFromRange(const gfx::Range& range, + base::string16* text) const override; + void OnInputMethodChanged() override; + bool ChangeTextDirectionAndLayoutAlignment( + base::i18n::TextDirection direction) override; + void ExtendSelectionAndDelete(size_t before, size_t after) override; + void EnsureCaretNotInRect(const gfx::Rect& rect) override; + bool IsTextEditCommandEnabled(ui::TextEditCommand command) const override; + void SetTextEditCommandForNextKeyEvent(ui::TextEditCommand command) override; + + ui::mojom::TextInputClientPtr remote_client_; + + DISALLOW_COPY_AND_ASSIGN(RemoteTextInputClient); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_IME_DRIVER_REMOTE_TEXT_INPUT_CLIENT_H_
diff --git a/chrome/browser/ui/views/ime_driver/simple_input_method.cc b/chrome/browser/ui/views/ime_driver/simple_input_method.cc new file mode 100644 index 0000000..e040d2c --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/simple_input_method.cc
@@ -0,0 +1,25 @@ +// Copyright 2016 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 "chrome/browser/ui/views/ime_driver/simple_input_method.h" + +SimpleInputMethod::SimpleInputMethod() {} + +SimpleInputMethod::~SimpleInputMethod() {} + +void SimpleInputMethod::OnTextInputModeChanged( + ui::mojom::TextInputMode text_input_mode) {} + +void SimpleInputMethod::OnTextInputTypeChanged( + ui::mojom::TextInputType text_input_type) {} + +void SimpleInputMethod::OnCaretBoundsChanged(const gfx::Rect& caret_bounds) {} + +void SimpleInputMethod::ProcessKeyEvent( + std::unique_ptr<ui::Event> key_event, + const ProcessKeyEventCallback& callback) { + callback.Run(false); +} + +void SimpleInputMethod::CancelComposition() {}
diff --git a/chrome/browser/ui/views/ime_driver/simple_input_method.h b/chrome/browser/ui/views/ime_driver/simple_input_method.h new file mode 100644 index 0000000..c488cce --- /dev/null +++ b/chrome/browser/ui/views/ime_driver/simple_input_method.h
@@ -0,0 +1,33 @@ +// Copyright 2016 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 CHROME_BROWSER_UI_VIEWS_IME_DRIVER_SIMPLE_INPUT_METHOD_H_ +#define CHROME_BROWSER_UI_VIEWS_IME_DRIVER_SIMPLE_INPUT_METHOD_H_ + +#include "services/ui/public/interfaces/ime/ime.mojom.h" + +// This is to be used on platforms where a proper implementation of +// ui::mojom::InputMethod is missing. It doesn't handle any events and calls +// the callback with false, which will result in client code handling events +// locally. +class SimpleInputMethod : public ui::mojom::InputMethod { + public: + SimpleInputMethod(); + ~SimpleInputMethod() override; + + // ui::mojom::InputMethod: + void OnTextInputModeChanged( + ui::mojom::TextInputMode text_input_mode) override; + void OnTextInputTypeChanged( + ui::mojom::TextInputType text_input_type) override; + void OnCaretBoundsChanged(const gfx::Rect& caret_bounds) override; + void ProcessKeyEvent(std::unique_ptr<ui::Event> key_event, + const ProcessKeyEventCallback& callback) override; + void CancelComposition() override; + + private: + DISALLOW_COPY_AND_ASSIGN(SimpleInputMethod); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_IME_DRIVER_SIMPLE_INPUT_METHOD_H_
diff --git a/chrome/browser/ui/views/ime_driver_mus.cc b/chrome/browser/ui/views/ime_driver_mus.cc deleted file mode 100644 index 2b618861..0000000 --- a/chrome/browser/ui/views/ime_driver_mus.cc +++ /dev/null
@@ -1,77 +0,0 @@ -// Copyright 2016 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 "chrome/browser/ui/views/ime_driver_mus.h" - -#include "content/public/browser/browser_thread.h" -#include "content/public/common/service_manager_connection.h" -#include "mojo/public/cpp/bindings/strong_binding.h" -#include "services/service_manager/public/cpp/connector.h" -#include "services/ui/public/interfaces/constants.mojom.h" -#include "services/ui/public/interfaces/ime/ime.mojom.h" - -namespace { - -class InputMethod : public ui::mojom::InputMethod { - public: - explicit InputMethod(ui::mojom::TextInputClientPtr client) - : client_(std::move(client)) {} - ~InputMethod() override {} - - private: - // ui::mojom::InputMethod: - void OnTextInputModeChanged( - ui::mojom::TextInputMode text_input_mode) override {} - void OnTextInputTypeChanged( - ui::mojom::TextInputType text_input_type) override {} - void OnCaretBoundsChanged(const gfx::Rect& caret_bounds) override {} - void ProcessKeyEvent(std::unique_ptr<ui::Event> key_event, - const ProcessKeyEventCallback& callback) override { - DCHECK(key_event->IsKeyEvent()); - - if (key_event->AsKeyEvent()->is_char()) { - client_->InsertChar(std::move(key_event)); - callback.Run(true); - } else { - callback.Run(false); - } - } - void CancelComposition() override {} - - ui::mojom::TextInputClientPtr client_; - - DISALLOW_COPY_AND_ASSIGN(InputMethod); -}; - -} // namespace - -IMEDriver::~IMEDriver() {} - -// static -void IMEDriver::Register() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - ui::mojom::IMEDriverPtr ime_driver_ptr; - mojo::MakeStrongBinding(base::WrapUnique(new IMEDriver), - GetProxy(&ime_driver_ptr)); - ui::mojom::IMERegistrarPtr ime_registrar; - content::ServiceManagerConnection::GetForProcess() - ->GetConnector() - ->ConnectToInterface(ui::mojom::kServiceName, &ime_registrar); - ime_registrar->RegisterDriver(std::move(ime_driver_ptr)); -} - -void IMEDriver::StartSession( - int32_t session_id, - ui::mojom::TextInputClientPtr client, - ui::mojom::InputMethodRequest input_method_request) { - input_method_bindings_[session_id] = - base::MakeUnique<mojo::Binding<ui::mojom::InputMethod>>( - new InputMethod(std::move(client)), std::move(input_method_request)); -} - -IMEDriver::IMEDriver() {} - -void IMEDriver::CancelSession(int32_t session_id) { - input_method_bindings_.erase(session_id); -}
diff --git a/chrome/browser/ui/views/profiles/new_avatar_button.cc b/chrome/browser/ui/views/profiles/new_avatar_button.cc index 0b7b45a..160c44f 100644 --- a/chrome/browser/ui/views/profiles/new_avatar_button.cc +++ b/chrome/browser/ui/views/profiles/new_avatar_button.cc
@@ -70,7 +70,8 @@ // is larger than this, it will be shrunk to match it. // TODO(noms): Calculate this constant algorithmically from the button's size. const int kDisplayFontHeight = 16; - SetFontList(GetFontList().DeriveWithHeightUpperBound(kDisplayFontHeight)); + SetFontList( + label()->font_list().DeriveWithHeightUpperBound(kDisplayFontHeight)); ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); if (button_style == AvatarButtonStyle::THEMED) {
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc index 638f0497..f2a8cfd 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -534,7 +534,7 @@ AddChildView(profile_name_textfield_); button_ = new RightAlignedIconLabelButton(this, text); - button_->SetFontList(medium_font_list); + button_->SetFontListDeprecated(medium_font_list); // Show an "edit" pencil icon when hovering over. In the default state, // we need to create an empty placeholder of the correct size, so that // the text doesn't jump around when the hovered icon appears.
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index 2b9092ec..c3067a60c 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -894,12 +894,22 @@ } void SigninScreenHandler::Initialize() { - // If delegate_ is nullptr here (e.g. WebUIScreenLocker has been destroyed), - // don't do anything, just return. - if (!delegate_) - return; + // Preload PIN keyboard if any of the users can authenticate via PIN. + if (user_manager::UserManager::IsInitialized()) { + for (user_manager::User* user : + user_manager::UserManager::Get()->GetLoggedInUsers()) { - if (show_on_init_) { + chromeos::PinStorage* pin_storage = + chromeos::PinStorageFactory::GetForUser(user); + if (pin_storage && pin_storage->IsPinAuthenticationAvailable()) { + CallJS("cr.ui.Oobe.preloadPinKeyboard"); + break; + } + } + } + + // |delegate_| is null when we are preloading the lock screen. + if (delegate_ && show_on_init_) { show_on_init_ = false; ShowImpl(); }
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 769c213e..e656b88 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -1018,8 +1018,14 @@ const char kHelp[] = "help"; const char kHelpShort[] = "h"; -// Specifies which password store to use -// (detect, default, gnome-keyring, gnome-libsecret, kwallet). +// Specifies which encryption storage backend to use. Possible values are +// kwallet, kwallet5, gnome, gnome-keyring, gnome-libsecret, basic. Any other +// value will lead to Chrome detecting the best backend automatically. +// TODO(crbug.com/571003): Once PasswordStore no longer uses the Keyring or +// KWallet for storing passwords, rename this flag to stop referencing +// passwords. Do not rename it sooner, though; developers and testers might +// rely on it keeping large amounts of testing passwords out of their Keyrings +// or KWallets. const char kPasswordStore[] = "password-store"; // The same as the --class argument in X applications. Overrides the WM_CLASS
diff --git a/chrome/common/stack_sampling_configuration.cc b/chrome/common/stack_sampling_configuration.cc index ca79f3f..c2b0786 100644 --- a/chrome/common/stack_sampling_configuration.cc +++ b/chrome/common/stack_sampling_configuration.cc
@@ -128,7 +128,8 @@ DCHECK(IsBrowserProcess()); if (process_type == switches::kGpuProcess && - (configuration_ == PROFILE_GPU_PROCESS || + (configuration_ == PROFILE_CONTROL || + configuration_ == PROFILE_GPU_PROCESS || configuration_ == PROFILE_BROWSER_AND_GPU_PROCESS)) { command_line->AppendSwitch(switches::kStartStackProfiler); } @@ -180,18 +181,18 @@ return ChooseConfiguration({ { PROFILE_BROWSER_PROCESS, 0}, { PROFILE_GPU_PROCESS, 0}, - { PROFILE_BROWSER_AND_GPU_PROCESS, 50}, - { PROFILE_CONTROL, 50}, - { PROFILE_DISABLED, 0} + { PROFILE_BROWSER_AND_GPU_PROCESS, 80}, + { PROFILE_CONTROL, 10}, + { PROFILE_DISABLED, 10} }); case version_info::Channel::DEV: return ChooseConfiguration({ { PROFILE_BROWSER_PROCESS, 0}, { PROFILE_GPU_PROCESS, 0}, - { PROFILE_BROWSER_AND_GPU_PROCESS, 50}, - { PROFILE_CONTROL, 50}, - { PROFILE_DISABLED, 0} + { PROFILE_BROWSER_AND_GPU_PROCESS, 80}, + { PROFILE_CONTROL, 10}, + { PROFILE_DISABLED, 10} }); default:
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index e39ee89..b389afe 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4757,6 +4757,9 @@ "../browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc", "../browser/ui/views/website_settings/website_settings_popup_view_unittest.cc", ] + if (is_chromeos) { + sources += [ "../browser/ui/views/ime_driver/input_method_bridge_chromeos_unittest.cc" ] + } if (!is_chromeos && (!is_mac || mac_views_browser)) { sources += [ "../browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/platform_keys/basic.js b/chrome/test/data/extensions/api_test/platform_keys/basic.js index 5e1eccba..ee4516d3 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/basic.js +++ b/chrome/test/data/extensions/api_test/platform_keys/basic.js
@@ -36,39 +36,38 @@ // X.509 client certificate in DER encoding. // Algorithm in SPKI: rsaEncryption. - // openssl x509 -in net/data/ssl/certificates/client_1.pem -outform DER -out - // client_1.der + // Generated by create_net_cert_data.sh . client_1: 'client_1.der', // X.509 client certificate in DER encoding. // Algorithm in SPKI: rsaEncryption. - // openssl x509 -in net/data/ssl/certificates/client_2.pem -outform DER -out - // client_2.der + // Generated by create_net_cert_data.sh . client_2: 'client_2.der', // The public key of client_1 as Subject Public Key Info in DER encoding. - // openssl rsa -in net/data/ssl/certificates/client_1.key -inform PEM -out - // pubkey.der -pubout -outform DER + // Generated by create_net_cert_data.sh . client_1_spki: 'client_1_spki.der', // The distinguished name of the CA that issued client_1 in DER encoding. - // openssl asn1parse -in client_1.der -inform DER -strparse 32 -out - // client_1_issuer_dn.der + // Generated by create_net_cert_data.sh . client_1_issuer_dn: 'client_1_issuer_dn.der', - // echo -n "hello world" > data + // The string "hello world". + // Generated by create_net_cert_data.sh . raw_data: 'data', - // openssl rsautl -inkey net/data/ssl/certificates/client_1.key -sign -in - // data -pkcs -out signature_nohash_pkcs + // A signature of raw_data using RSASSA-PKCS1-v1_5 with client_1, but treating + // raw_data as a raw digest and without adding the DigestInfo prefix. + // Generated by create_net_cert_data.sh . signature_nohash_pkcs: 'signature_nohash_pkcs', - // openssl dgst -sha1 -sign net/data/ssl/certificates/client_1.key - // -out signature_sha1_pkcs data + // A signature of raw_data using RSASSA-PKCS1-v1_5 with client_1, using SHA-1 + // as the hash function. + // Generated by create_net_cert_data.sh . signature_sha1_pkcs: 'signature_sha1_pkcs', }; -// Reads the binary file at |path| and passes it as a Uin8Array to |callback|. +// Reads the binary file at |path| and passes it as a Uint8Array to |callback|. function readFile(path, callback) { var oReq = new XMLHttpRequest(); oReq.responseType = "arraybuffer";
diff --git a/chrome/test/data/extensions/api_test/platform_keys/client_1.der b/chrome/test/data/extensions/api_test/platform_keys/client_1.der index 248df92..a5d1da179a 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/client_1.der +++ b/chrome/test/data/extensions/api_test/platform_keys/client_1.der Binary files differ
diff --git a/chrome/test/data/extensions/api_test/platform_keys/client_1_spki.der b/chrome/test/data/extensions/api_test/platform_keys/client_1_spki.der index 7bd2e3f..55a79d4 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/client_1_spki.der +++ b/chrome/test/data/extensions/api_test/platform_keys/client_1_spki.der Binary files differ
diff --git a/chrome/test/data/extensions/api_test/platform_keys/client_2.der b/chrome/test/data/extensions/api_test/platform_keys/client_2.der index e2de8cb..8f49092 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/client_2.der +++ b/chrome/test/data/extensions/api_test/platform_keys/client_2.der Binary files differ
diff --git a/chrome/test/data/extensions/api_test/platform_keys/create_net_cert_data.sh b/chrome/test/data/extensions/api_test/platform_keys/create_net_cert_data.sh new file mode 100755 index 0000000..45e87b6 --- /dev/null +++ b/chrome/test/data/extensions/api_test/platform_keys/create_net_cert_data.sh
@@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright 2016 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. + +# Updates the files which depend on net/data/ssl/certificates. + +try() { + "$@" || { + e=$? + echo "*** ERROR $e *** $@ " > /dev/stderr + exit $e + } +} + +net_certs_dir=../../../../../../net/data/ssl/certificates + +try openssl x509 -in "${net_certs_dir}/client_1.pem" -outform DER -out \ + client_1.der +try openssl x509 -in "${net_certs_dir}/client_2.pem" -outform DER -out \ + client_2.der +try openssl rsa -in "${net_certs_dir}/client_1.key" -inform PEM -out \ + client_1_spki.der -pubout -outform DER +try openssl asn1parse -in client_1.der -inform DER -strparse 32 -out \ + client_1_issuer_dn.der +try echo -n "hello world" > data +try openssl rsautl -inkey "${net_certs_dir}/client_1.key" -sign -in \ + data -pkcs -out signature_nohash_pkcs +try openssl dgst -sha1 -sign "${net_certs_dir}/client_1.key" -out \ + signature_sha1_pkcs data
diff --git a/chrome/test/data/extensions/api_test/platform_keys/signature_nohash_pkcs b/chrome/test/data/extensions/api_test/platform_keys/signature_nohash_pkcs index 36784aa..bf916de 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/signature_nohash_pkcs +++ b/chrome/test/data/extensions/api_test/platform_keys/signature_nohash_pkcs Binary files differ
diff --git a/chrome/test/data/extensions/api_test/platform_keys/signature_sha1_pkcs b/chrome/test/data/extensions/api_test/platform_keys/signature_sha1_pkcs index c4b768e..e8d5e25 100644 --- a/chrome/test/data/extensions/api_test/platform_keys/signature_sha1_pkcs +++ b/chrome/test/data/extensions/api_test/platform_keys/signature_sha1_pkcs Binary files differ
diff --git a/chrome/tools/build/win/create_installer_archive.py b/chrome/tools/build/win/create_installer_archive.py index 8c0f814..4a4f0807 100755 --- a/chrome/tools/build/win/create_installer_archive.py +++ b/chrome/tools/build/win/create_installer_archive.py
@@ -485,30 +485,8 @@ if not os.path.exists(installer_dir): os.mkdir(installer_dir) - if setup_runtime_deps: - setup_component_dlls = ParseDLLsFromDeps(build_dir, setup_runtime_deps) - else: - # Explicitly list the component DLLs setup.exe depends on (this list may - # contain wildcards). These will be copied to |installer_dir| in the - # archive. - # TODO(jbauman): Remove when GYP is deprecated on Windows. - setup_component_dll_globs = [ 'api-ms-win-*.dll', - 'base.dll', - 'boringssl.dll', - 'crcrypto.dll', - 'icui18n.dll', - 'icuuc.dll', - 'msvc*.dll', - 'ucrtbase*.dll', - 'vcruntime*.dll', ] - setup_component_dlls = set() - for setup_component_dll_glob in setup_component_dll_globs: - setup_component_partial_dlls = glob.glob( - os.path.join(build_dir, setup_component_dll_glob)) - if len(setup_component_partial_dlls) == 0: - raise Exception('Error: missing expected DLL for component build ' - 'mini_installer: "%s"' % setup_component_dll_glob) - setup_component_dlls.update(setup_component_partial_dlls) + setup_component_dlls = ParseDLLsFromDeps(build_dir, setup_runtime_deps) + for setup_component_dll in setup_component_dlls: g_archive_inputs.append(setup_component_dll) shutil.copy(setup_component_dll, installer_dir) @@ -517,26 +495,13 @@ # the version assembly to be able to refer to them below and make sure # chrome.exe can find them at runtime), except the ones that are already # staged (i.e. non-component DLLs). - if chrome_runtime_deps: - build_dlls = ParseDLLsFromDeps(build_dir, chrome_runtime_deps) - else: - # If no chrome_runtime_deps was specified, every DLL in build_dir is - # considered to be a component DLL. - # TODO(jbauman): Remove when GYP is deprecated on Windows. - build_dlls = glob.glob(os.path.join(build_dir, '*.dll')) + build_dlls = ParseDLLsFromDeps(build_dir, chrome_runtime_deps) staged_dll_basenames = [os.path.basename(staged_dll) for staged_dll in \ glob.glob(os.path.join(version_dir, '*.dll'))] component_dll_filenames = [] for component_dll in [dll for dll in build_dlls if \ os.path.basename(dll) not in staged_dll_basenames]: component_dll_name = os.path.basename(component_dll) - # These remoting_*.dll's don't belong in the archive (it doesn't depend - # on them in gyp). Trying to copy them causes a build race when creating the - # installer archive in component mode. See: crbug.com/180996 and - # crbug.com/586967 - if (component_dll_name.startswith('remoting_')): - continue - component_dll_filenames.append(component_dll_name) g_archive_inputs.append(component_dll) shutil.copy(component_dll, version_dir) @@ -646,9 +611,6 @@ parser.add_option('--depfile', help='Generate a depfile with the given name listing the implicit inputs ' 'to the archive process that can be used with a build system.') - - # TODO(jbauman): Make --chrome_runtime_deps and --setup_runtime_deps - # mandatory when GYP is deprecated on Windows. parser.add_option('--chrome_runtime_deps', help='A file listing runtime dependencies. This will be used to get a ' 'list of DLLs to archive in a component build.') @@ -674,6 +636,12 @@ if not options.input_file: parser.error('You must provide an input file') + is_component_build = options.component_build == '1' + if is_component_build and not options.chrome_runtime_deps: + parser.error("chrome_runtime_deps must be specified for a component build") + if is_component_build and not options.setup_runtime_deps: + parser.error("setup_runtime_deps must be specified for a component build") + if not options.output_dir: options.output_dir = options.build_dir
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc index f364d639..f95ceadf 100644 --- a/chrome/utility/chrome_content_utility_client.cc +++ b/chrome/utility/chrome_content_utility_client.cc
@@ -204,7 +204,7 @@ registry->AddInterface<net::interfaces::ProxyResolverFactory>( base::Bind(CreateProxyResolverFactory)); registry->AddInterface(base::Bind(CreateResourceUsageReporter)); - registry->AddInterface(base::Bind(ProfileImportHandler::Create)); + registry->AddInterface(base::Bind(&ProfileImportHandler::Create)); #endif registry->AddInterface( base::Bind(&safe_json::SafeJsonParserMojoImpl::Create));
diff --git a/components/autofill/DEPS b/components/autofill/DEPS index 7e8eeb9..6b6ca5c 100644 --- a/components/autofill/DEPS +++ b/components/autofill/DEPS
@@ -4,6 +4,7 @@ "+grit", # For generated headers "+jni", "+net", + "+third_party/skia", "+third_party/zlib/google", "+ui",
diff --git a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillPopup.java b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillPopup.java index 55c214f..3a5bd06 100644 --- a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillPopup.java +++ b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillPopup.java
@@ -6,6 +6,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Color; import android.view.View; import android.widget.AdapterView; import android.widget.PopupWindow; @@ -28,7 +29,8 @@ /** * The constant used to specify a separator in a list of Autofill suggestions. - * Has to be kept in sync with enum in WebAutofillClient.h + * Has to be kept in sync with {@code POPUP_ITEM_ID_SEPARATOR} enum in + * components/autofill/core/browser/popup_item_ids.h */ private static final int ITEM_ID_SEPARATOR_ENTRY = -3; @@ -57,9 +59,18 @@ /** * Filters the Autofill suggestions to the ones that we support and shows the popup. * @param suggestions Autofill suggestion data. + * @param isRtl @code true if right-to-left text. + * @param backgroundColor popup background color, or {@code Color.TRANSPARENT} if unspecified. + * @param dividerColor color for divider between popup items, or {@code Color.TRANSPARENT} if + * unspecified. + * @param isBoldLabel true if suggestion label's type face is {@code Typeface.BOLD}, false if + * suggestion label's type face is {@code Typeface.NORMAL}. + * @param dropdownItemHeight height of each dropdown item in dimension independent pixel units, + * 0 if unspecified. */ @SuppressLint("InlinedApi") - public void filterAndShow(AutofillSuggestion[] suggestions, boolean isRtl) { + public void filterAndShow(AutofillSuggestion[] suggestions, boolean isRtl, + int backgroundColor, int dividerColor, int dropdownItemHeight) { mSuggestions = new ArrayList<AutofillSuggestion>(Arrays.asList(suggestions)); // Remove the AutofillSuggestions with IDs that are not supported by Android ArrayList<DropdownItem> cleanedData = new ArrayList<DropdownItem>(); @@ -73,7 +84,10 @@ } } - setAdapter(new DropdownAdapter(mContext, cleanedData, separators)); + setAdapter(new DropdownAdapter(mContext, cleanedData, separators, + backgroundColor == Color.TRANSPARENT ? null : backgroundColor, + dividerColor == Color.TRANSPARENT ? null : dividerColor, + dropdownItemHeight == 0 ? null : dropdownItemHeight)); setRtl(isRtl); show(); getListView().setOnItemLongClickListener(this);
diff --git a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillSuggestion.java b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillSuggestion.java index eaf23c363..666dcbf 100644 --- a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillSuggestion.java +++ b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillSuggestion.java
@@ -12,34 +12,42 @@ public class AutofillSuggestion extends DropdownItemBase { /** * The constant used to specify a http warning message in a list of Autofill suggestions. - * Has to be kept in sync with enum in popup_item_ids.h - * TODO(crbug.com/666529): Generate java constants from C++ enum. + * Has to be kept in sync with {@code POPUP_ITEM_ID_SEPARATOR} enum in + * components/autofill/core/browser/popup_item_ids.h */ private static final int ITEM_ID_HTTP_NOT_SECURE_WARNING_MESSAGE = -10; private final String mLabel; private final String mSublabel; private final int mIconId; + private final boolean mIsIconAtStart; private final int mSuggestionId; - private final boolean mDeletable; + private final boolean mIsDeletable; private final boolean mIsMultilineLabel; + private final boolean mIsBoldLabel; /** * Constructs a Autofill suggestion container. * @param label The main label of the Autofill suggestion. * @param sublabel The describing sublabel of the Autofill suggestion. + * @param iconId The resource ID for the icon associated with the suggestion, or + * {@code DropdownItem.NO_ICON} for no icon. + * @param isIconAtStart {@code true} if {@param iconId} is displayed before {@param label}. * @param suggestionId The type of suggestion. - * @param deletable Whether the item can be deleted by the user. - * @param multilineLabel Whether the label is displayed over multiple lines. + * @param isDeletable Whether the item can be deleted by the user. + * @param isMultilineLabel Whether the label is displayed over multiple lines. + * @param isBoldLabel Whether the label is displayed in {@code Typeface.BOLD}. */ - public AutofillSuggestion(String label, String sublabel, int iconId, int suggestionId, - boolean deletable, boolean multilineLabel) { + public AutofillSuggestion(String label, String sublabel, int iconId, boolean isIconAtStart, + int suggestionId, boolean isDeletable, boolean isMultilineLabel, boolean isBoldLabel) { mLabel = label; mSublabel = sublabel; mIconId = iconId; + mIsIconAtStart = isIconAtStart; mSuggestionId = suggestionId; - mDeletable = deletable; - mIsMultilineLabel = multilineLabel; + mIsDeletable = isDeletable; + mIsMultilineLabel = isMultilineLabel; + mIsBoldLabel = isBoldLabel; } @Override @@ -63,6 +71,11 @@ } @Override + public boolean isBoldLabel() { + return mIsBoldLabel; + } + + @Override public int getLabelFontColorResId() { if (mSuggestionId == ITEM_ID_HTTP_NOT_SECURE_WARNING_MESSAGE) { return R.color.http_bad_warning_message_text; @@ -88,7 +101,7 @@ @Override public boolean isIconAtStart() { - if (mSuggestionId == ITEM_ID_HTTP_NOT_SECURE_WARNING_MESSAGE) { + if (mIsIconAtStart) { return true; } return super.isIconAtStart(); @@ -99,7 +112,7 @@ } public boolean isDeletable() { - return mDeletable; + return mIsDeletable; } public boolean isFillable() {
diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc index 021a850..331de99 100644 --- a/components/autofill/core/browser/autofill_download_manager.cc +++ b/components/autofill/core/browser/autofill_download_manager.cc
@@ -247,8 +247,12 @@ net::LOAD_DO_NOT_SEND_COOKIES); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; - variations::AppendVariationHeaders( - fetcher->GetOriginalURL(), driver_->IsOffTheRecord(), false, &headers); + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; + variations::AppendVariationHeaders(fetcher->GetOriginalURL(), + driver_->IsOffTheRecord(), false, + is_signed_in, &headers); fetcher->SetExtraRequestHeaders(headers.ToString()); fetcher->Start();
diff --git a/components/autofill/core/browser/autofill_experiments.cc b/components/autofill/core/browser/autofill_experiments.cc index 6ecc864b..28fdc27b 100644 --- a/components/autofill/core/browser/autofill_experiments.cc +++ b/components/autofill/core/browser/autofill_experiments.cc
@@ -7,9 +7,12 @@ #include "base/command_line.h" #include "base/feature_list.h" #include "base/metrics/field_trial.h" +#include "base/strings/string16.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "components/autofill/core/browser/suggestion.h" #include "components/autofill/core/common/autofill_pref_names.h" #include "components/autofill/core/common/autofill_switches.h" #include "components/prefs/pref_service.h" @@ -17,6 +20,8 @@ #include "components/sync/driver/sync_service.h" #include "components/variations/variations_associated_data.h" #include "google_apis/gaia/gaia_auth_util.h" +#include "grit/components_strings.h" +#include "ui/base/l10n/l10n_util.h" namespace autofill { @@ -28,7 +33,34 @@ base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kAutofillScanCardholderName{ "AutofillScanCardholderName", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kAutofillCreditCardPopupLayout{ + "AutofillCreditCardPopupLayout", base::FEATURE_DISABLED_BY_DEFAULT}; const char kCreditCardSigninPromoImpressionLimitParamKey[] = "impression_limit"; +const char kAutofillCreditCardPopupBackgroundColorKey[] = "background_color"; +const char kAutofillCreditCardPopupDividerColorKey[] = "dropdown_divider_color"; +const char kAutofillCreditCardPopupValueBoldKey[] = "is_value_bold"; +const char kAutofillCreditCardPopupIsValueAndLabelInSingleLineKey[] = + "is_value_and_label_in_single_line"; +const char kAutofillPopupDropdownItemHeightKey[] = + "dropdown_item_height"; +const char kAutofillCreditCardPopupIsIconAtStartKey[] = + "is_credit_card_icon_at_start"; + +namespace { + +// Returns parameter value in |kAutofillCreditCardPopupLayout| feature, or 0 if +// parameter is not specified. +unsigned int GetCreditCardPopupParameterUintValue( + const std::string& param_name) { + unsigned int value; + const std::string param_value = variations::GetVariationParamValueByFeature( + kAutofillCreditCardPopupLayout, param_name); + if (!param_value.empty() && base::StringToUint(param_value, &value)) + return value; + return 0; +} + +} // namespace bool IsAutofillEnabled(const PrefService* pref_service) { return pref_service->GetBoolean(prefs::kAutofillEnabled); @@ -67,6 +99,60 @@ return 0; } +bool IsAutofillCreditCardPopupLayoutExperimentEnabled() { + return base::FeatureList::IsEnabled(kAutofillCreditCardPopupLayout); +} + +// |GetCreditCardPopupParameterUintValue| returns 0 if experiment parameter is +// not specified. 0 == |SK_ColorTRANSPARENT|. +SkColor GetCreditCardPopupBackgroundColor() { + return GetCreditCardPopupParameterUintValue( + kAutofillCreditCardPopupBackgroundColorKey); +} + +SkColor GetCreditCardPopupDividerColor() { + return GetCreditCardPopupParameterUintValue( + kAutofillCreditCardPopupDividerColorKey); +} + +bool IsCreditCardPopupValueBold() { + const std::string param_value = variations::GetVariationParamValueByFeature( + kAutofillCreditCardPopupLayout, kAutofillCreditCardPopupValueBoldKey); + return param_value == "true"; +} + +unsigned int GetPopupDropdownItemHeight() { + return GetCreditCardPopupParameterUintValue( + kAutofillPopupDropdownItemHeightKey); +} + +bool IsIconInCreditCardPopupAtStart() { + const std::string param_value = variations::GetVariationParamValueByFeature( + kAutofillCreditCardPopupLayout, kAutofillCreditCardPopupIsIconAtStartKey); + return param_value == "true"; +} + +// Modifies |suggestion| as follows if experiment to display value and label in +// a single line is enabled. +// Say, |value| is 'Visa ....1111' and |label| is '01/18' (expiration date). +// Modifies |value| to 'Visa ....1111, exp 01/18' and clears |label|. +void ModifyAutofillCreditCardSuggestion(Suggestion* suggestion) { + DCHECK(IsAutofillCreditCardPopupLayoutExperimentEnabled()); + const std::string param_value = variations::GetVariationParamValueByFeature( + kAutofillCreditCardPopupLayout, + kAutofillCreditCardPopupIsValueAndLabelInSingleLineKey); + if (param_value == "true") { + const base::string16 format_string = l10n_util::GetStringUTF16( + IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_LABEL_AND_ABBR); + if (!format_string.empty()) { + suggestion->value.append(l10n_util::GetStringFUTF16( + IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_LABEL_AND_ABBR, + suggestion->label)); + } + suggestion->label.clear(); + } +} + bool OfferStoreUnmaskedCards() { #if defined(OS_LINUX) && !defined(OS_CHROMEOS) // The checkbox can be forced on with a flag, but by default we don't store
diff --git a/components/autofill/core/browser/autofill_experiments.h b/components/autofill/core/browser/autofill_experiments.h index 9fe4fc0b..fc02866 100644 --- a/components/autofill/core/browser/autofill_experiments.h +++ b/components/autofill/core/browser/autofill_experiments.h
@@ -7,6 +7,9 @@ #include <string> +#include "base/strings/string16.h" +#include "third_party/skia/include/core/SkColor.h" + class PrefService; namespace base { @@ -19,11 +22,15 @@ namespace autofill { +struct Suggestion; + extern const base::Feature kAutofillCreditCardAssist; extern const base::Feature kAutofillCreditCardSigninPromo; extern const base::Feature kAutofillProfileCleanup; extern const base::Feature kAutofillScanCardholderName; +extern const base::Feature kAutofillCreditCardPopupLayout; extern const char kCreditCardSigninPromoImpressionLimitParamKey[]; +extern const char kAutofillCreditCardPopupSettingsSuggestionValueKey[]; // Returns true if autofill should be enabled. See also // IsInAutofillSuggestionsDisabledExperiment below. @@ -64,6 +71,37 @@ // in the autofill dropdown when credit card fields are on an HTTP page. bool IsCreditCardAutofillHttpWarningEnabled(); +// Returns whether the new Autofill credit card popup layout experiment is +// enabled. +bool IsAutofillCreditCardPopupLayoutExperimentEnabled(); + +// Returns the background color for credit card autofill popup, or +// |SK_ColorTRANSPARENT| if the new credit card autofill popup layout experiment +// is not enabled. +SkColor GetCreditCardPopupBackgroundColor(); + +// Returns the divider color for credit card autofill popup, or +// |SK_ColorTRANSPARENT| if the new credit card autofill popup layout experiment +// is not enabled. +SkColor GetCreditCardPopupDividerColor(); + +// Returns true if the credit card autofill popup suggestion value is displayed +// in bold type face. +bool IsCreditCardPopupValueBold(); + +// Returns the dropdown item height for autofill popup, returning 0 if the +// dropdown item height isn't configured in an experiment to tweak autofill +// popup layout. +unsigned int GetPopupDropdownItemHeight(); + +// Returns true if the icon in the credit card autofill popup must be displayed +// before the credit card value or any other suggestion text. +bool IsIconInCreditCardPopupAtStart(); + +// Modifies the suggestion value and label if the new credit card autofill popup +// experiment is enabled to tweak the display of the value and label. +void ModifyAutofillCreditCardSuggestion(struct Suggestion* suggestion); + } // namespace autofill #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_EXPERIMENTS_H_
diff --git a/components/autofill/core/browser/autofill_external_delegate.cc b/components/autofill/core/browser/autofill_external_delegate.cc index 9c8c7c13..bfab143d 100644 --- a/components/autofill/core/browser/autofill_external_delegate.cc +++ b/components/autofill/core/browser/autofill_external_delegate.cc
@@ -19,6 +19,7 @@ #include "build/build_config.h" #include "components/autofill/core/browser/autocomplete_history_manager.h" #include "components/autofill/core/browser/autofill_driver.h" +#include "components/autofill/core/browser/autofill_experiments.h" #include "components/autofill/core/browser/autofill_manager.h" #include "components/autofill/core/browser/autofill_metrics.h" #include "components/autofill/core/browser/popup_item_ids.h" @@ -48,6 +49,7 @@ has_autofill_suggestions_(false), has_shown_popup_for_current_edit_(false), should_show_scan_credit_card_(false), + is_credit_card_popup_(false), should_show_cc_signin_promo_(false), has_shown_address_book_prompt(false), weak_ptr_factory_(this) { @@ -69,6 +71,8 @@ element_bounds_ = element_bounds; should_show_scan_credit_card_ = manager_->ShouldShowScanCreditCard(query_form_, query_field_); + is_credit_card_popup_ = + manager_->IsCreditCardPopup(query_form_, query_field_); should_show_cc_signin_promo_ = manager_->ShouldShowCreditCardSigninPromo(query_form_, query_field_); } @@ -275,6 +279,10 @@ driver_->RendererShouldClearPreviewedForm(); } +bool AutofillExternalDelegate::IsCreditCardPopup() { + return is_credit_card_popup_; +} + void AutofillExternalDelegate::Reset() { manager_->client()->HideAutofillPopup(); } @@ -325,8 +333,6 @@ if (query_field_.is_autofilled) { base::string16 value = l10n_util::GetStringUTF16(IDS_AUTOFILL_CLEAR_FORM_MENU_ITEM); - // TODO(rouslan): Remove manual upper-casing when keyboard accessory becomes - // default on Android. if (IsKeyboardAccessoryEnabled()) value = base::i18n::ToUpper(value); @@ -334,12 +340,9 @@ suggestions->back().frontend_id = POPUP_ITEM_ID_CLEAR_FORM; } - // Append the 'Chrome Autofill options' menu item; - // TODO(rouslan): Switch on the platform in the GRD file when keyboard - // accessory becomes default on Android. - suggestions->push_back(Suggestion(l10n_util::GetStringUTF16( - IsKeyboardAccessoryEnabled() ? IDS_AUTOFILL_OPTIONS_CONTENT_DESCRIPTION - : IDS_AUTOFILL_OPTIONS_POPUP))); + // Append the 'Chrome Autofill options' menu item, or the menu item specified + // in the popup layout experiment. + suggestions->push_back(Suggestion(GetSettingsSuggestionValue())); suggestions->back().frontend_id = POPUP_ITEM_ID_AUTOFILL_OPTIONS; if (IsKeyboardAccessoryEnabled()) suggestions->back().icon = base::ASCIIToUTF16("settings"); @@ -382,4 +385,14 @@ } } +base::string16 AutofillExternalDelegate::GetSettingsSuggestionValue() + const { + if (IsKeyboardAccessoryEnabled()) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_OPTIONS_CONTENT_DESCRIPTION); + } + return l10n_util::GetStringUTF16(is_credit_card_popup_ ? + IDS_AUTOFILL_CREDIT_CARD_OPTIONS_POPUP : + IDS_AUTOFILL_OPTIONS_POPUP); +} + } // namespace autofill
diff --git a/components/autofill/core/browser/autofill_external_delegate.h b/components/autofill/core/browser/autofill_external_delegate.h index 4afbb92..6a9807a0 100644 --- a/components/autofill/core/browser/autofill_external_delegate.h +++ b/components/autofill/core/browser/autofill_external_delegate.h
@@ -51,6 +51,9 @@ base::string16* body) override; bool RemoveSuggestion(const base::string16& value, int identifier) override; void ClearPreviewedForm() override; + // Returns false for all popups prior to |onQuery|, true for credit card + // popups after call to |onQuery|. + bool IsCreditCardPopup() override; // Records and associates a query_id with web form data. Called // when the renderer posts an Autofill query to the browser. |bounds| @@ -115,6 +118,9 @@ // version. void InsertDataListValues(std::vector<Suggestion>* suggestions); + // Returns the text (i.e. |Suggestion| value) for Chrome autofill options. + base::string16 GetSettingsSuggestionValue() const; + AutofillManager* manager_; // weak. // Provides driver-level context to the shared code of the component. Must @@ -139,8 +145,8 @@ // currently editing? Used to keep track of state for metrics logging. bool has_shown_popup_for_current_edit_; - // FIXME bool should_show_scan_credit_card_; + bool is_credit_card_popup_; // Whether the credit card signin promo should be shown to the user. bool should_show_cc_signin_promo_;
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc index fe2557c..6d12bb9 100644 --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc
@@ -308,6 +308,12 @@ return field.value.size() <= kShowScanCreditCardMaxValueLength; } +bool AutofillManager::IsCreditCardPopup(const FormData& form, + const FormFieldData& field) { + AutofillField* autofill_field = GetAutofillField(form, field); + return autofill_field && autofill_field->Type().group() == CREDIT_CARD; +} + bool AutofillManager::ShouldShowCreditCardSigninPromo( const FormData& form, const FormFieldData& field) { @@ -528,8 +534,6 @@ if (!IsValidFormData(form) || !IsValidFormFieldData(field)) return; - std::vector<Suggestion> suggestions; - gfx::RectF transformed_box = driver_->TransformBoundingBoxToViewportCoordinates(bounding_box); external_delegate_->OnQuery(query_id, form, field, transformed_box); @@ -554,6 +558,8 @@ } } + std::vector<Suggestion> suggestions; + if (is_autofill_possible && driver_->RendererIsAvailable() && got_autofillable_form) { @@ -1790,6 +1796,7 @@ for (size_t i = 0; i < suggestions.size(); i++) { suggestions[i].frontend_id = MakeFrontendID(suggestions[i].backend_id, std::string()); + suggestions[i].is_value_bold = IsCreditCardPopupValueBold(); } return suggestions; }
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h index 16efc7f..ce8608f 100644 --- a/components/autofill/core/browser/autofill_manager.h +++ b/components/autofill/core/browser/autofill_manager.h
@@ -96,6 +96,10 @@ virtual bool ShouldShowScanCreditCard(const FormData& form, const FormFieldData& field); + // Whether the |field| belongs to CREDIT_CARD |FieldTypeGroup|. + virtual bool IsCreditCardPopup(const FormData& form, + const FormFieldData& field); + // Whether we should show the signin promo, based on the triggered |field| // inside the |form|. virtual bool ShouldShowCreditCardSigninPromo(const FormData& form,
diff --git a/components/autofill/core/browser/autofill_popup_delegate.h b/components/autofill/core/browser/autofill_popup_delegate.h index 99a6675..5a86424 100644 --- a/components/autofill/core/browser/autofill_popup_delegate.h +++ b/components/autofill/core/browser/autofill_popup_delegate.h
@@ -43,6 +43,9 @@ // Informs the delegate that the Autofill previewed form should be cleared. virtual void ClearPreviewedForm() = 0; + + // Returns true if popup is for credit card. + virtual bool IsCreditCardPopup() = 0; }; } // namespace autofill
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 37418c7..b58bc6c 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -1626,6 +1626,8 @@ suggestion->value = credit_card->TypeAndLastFourDigits(); suggestion->label = credit_card->GetInfo( AutofillType(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR), app_locale_); + if (IsAutofillCreditCardPopupLayoutExperimentEnabled()) + ModifyAutofillCreditCardSuggestion(suggestion); } else if (credit_card->number().empty()) { if (type.GetStorableType() != CREDIT_CARD_NAME_FULL) { suggestion->label = credit_card->GetInfo(
diff --git a/components/autofill/core/browser/suggestion.cc b/components/autofill/core/browser/suggestion.cc index 22d4ac7..754ede93 100644 --- a/components/autofill/core/browser/suggestion.cc +++ b/components/autofill/core/browser/suggestion.cc
@@ -10,7 +10,8 @@ Suggestion::Suggestion() : frontend_id(0), - match(PREFIX_MATCH) { + match(PREFIX_MATCH), + is_value_bold(false) { } Suggestion::Suggestion(const Suggestion& other) @@ -19,13 +20,15 @@ value(other.value), label(other.label), icon(other.icon), - match(other.match) { + match(other.match), + is_value_bold(other.is_value_bold) { } Suggestion::Suggestion(const base::string16& v) : frontend_id(0), value(v), - match(PREFIX_MATCH) { + match(PREFIX_MATCH), + is_value_bold(false) { } Suggestion::Suggestion(const std::string& v, @@ -36,7 +39,8 @@ value(base::UTF8ToUTF16(v)), label(base::UTF8ToUTF16(l)), icon(base::UTF8ToUTF16(i)), - match(PREFIX_MATCH) { + match(PREFIX_MATCH), + is_value_bold(false) { } Suggestion::~Suggestion() {
diff --git a/components/autofill/core/browser/suggestion.h b/components/autofill/core/browser/suggestion.h index 930ab23..63522de 100644 --- a/components/autofill/core/browser/suggestion.h +++ b/components/autofill/core/browser/suggestion.h
@@ -47,6 +47,7 @@ base::string16 label; base::string16 icon; MatchMode match; + bool is_value_bold; // true if |value| should be displayed in bold type face. }; } // namespace autofill
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp index e6bafa54..92713992 100644 --- a/components/autofill_strings.grdp +++ b/components/autofill_strings.grdp
@@ -157,6 +157,17 @@ </message> </if> + <if expr="_google_chrome"> + <message name="IDS_AUTOFILL_CREDIT_CARD_OPTIONS_POPUP" desc="The label of the text displayed in the Autofill Credit Card popup to direct the user to the Autofill settings UI."> + Chrome Autofill settings... + </message> + </if> + <if expr="not _google_chrome"> + <message name="IDS_AUTOFILL_CREDIT_CARD_OPTIONS_POPUP" desc="The label of the text displayed in the Autofill Credit Card popup to direct the user to the Autofill settings UI."> + Chromium Autofill settings... + </message> + </if> + <message name="IDS_AUTOFILL_OPTIONS_CONTENT_DESCRIPTION" desc="The text verbalised by a screen reader for the button that directs the user to the Autofill settings UI. This string is not displayed."> settings </message> @@ -229,6 +240,10 @@ Exp: <ph name="EXPIRATION_MONTH">$1<ex>06</ex></ph>/<ph name="EXPIRATION_YEAR">$2<ex>17</ex></ph> </message> + <message name="IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_LABEL_AND_ABBR" desc="text displayed in the Autofill Credit Card popup before the credit card expiration date and the abbreviated expiration date."> + , exp <ph name="EXPIRATION_DATE_ABBR">$1<ex>06/17</ex></ph> + </message> + <!-- Autofill credit card unmask prompt --> <message name="IDS_AUTOFILL_CARD_UNMASK_PROMPT_ERROR_TRY_AGAIN_CVC" desc="Error message that encourages the user to try to re-enter their credit card CVC after a previous failed attempt." formatter_data="android_java"> Check your CVC and try again
diff --git a/components/browsing_data/core/counters/autofill_counter.cc b/components/browsing_data/core/counters/autofill_counter.cc index a852db4..b0e55d0f 100644 --- a/components/browsing_data/core/counters/autofill_counter.cc +++ b/components/browsing_data/core/counters/autofill_counter.cc
@@ -81,7 +81,20 @@ WebDataServiceBase::Handle handle, std::unique_ptr<WDTypedResult> result) { DCHECK(thread_checker_.CalledOnValidThread()); + if (!result) { + // CancelAllRequests will cancel all queries that are active; the query that + // just failed is complete and cannot be canceled so zero it out. + if (handle == suggestions_query_) { + suggestions_query_ = 0; + } else if (handle == credit_cards_query_) { + credit_cards_query_ = 0; + } else if (handle == addresses_query_) { + addresses_query_ = 0; + } else { + NOTREACHED(); + } + CancelAllRequests(); return; }
diff --git a/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java b/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java index 6fc67f4e..4535fe15 100644 --- a/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java +++ b/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java
@@ -181,8 +181,12 @@ return this; } + /** + * Returns delegate, only for testing. + * @hide + */ @VisibleForTesting - ICronetEngineBuilder getBuilderDelegate() { + public ICronetEngineBuilder getBuilderDelegate() { return mBuilderDelegate; }
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java index addc524f..c0b8d3c 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java
@@ -152,7 +152,7 @@ } } - void assertResponseEquals(UrlResponseInfo expected, UrlResponseInfo actual) { + public void assertResponseEquals(UrlResponseInfo expected, UrlResponseInfo actual) { assertEquals(expected.getAllHeaders(), actual.getAllHeaders()); assertEquals(expected.getAllHeadersAsList(), actual.getAllHeadersAsList()); assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode()); @@ -168,7 +168,7 @@ } } - static void assertContains(String expectedSubstring, String actualString) { + public static void assertContains(String expectedSubstring, String actualString) { assertNotNull(actualString); if (!actualString.contains(expectedSubstring)) { fail("String [" + actualString + "] doesn't contain substring [" + expectedSubstring
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java index b088cfb..42f98a5 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java
@@ -27,7 +27,7 @@ * method to block thread until the request completes on another thread. * Allows to cancel, block request or throw an exception from an arbitrary step. */ -class TestUrlRequestCallback extends UrlRequest.Callback { +public class TestUrlRequestCallback extends UrlRequest.Callback { public ArrayList<UrlResponseInfo> mRedirectResponseInfoList = new ArrayList<UrlResponseInfo>(); public ArrayList<String> mRedirectUrlList = new ArrayList<String>(); public UrlResponseInfo mResponseInfo;
diff --git a/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java b/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java index 0e9c5878..4745e7f 100644 --- a/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java +++ b/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java
@@ -7,6 +7,7 @@ import android.content.Context; import android.os.ConditionVariable; +import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; @@ -73,6 +74,7 @@ } public static long createMockCertVerifier() { + TestFilesInstaller.installIfNeeded(ContextUtils.getApplicationContext()); return MockCertVerifier.createMockCertVerifier(CERTS_USED, true); }
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc index 4a2b45e2..5a96288 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
@@ -282,6 +282,62 @@ DISALLOW_COPY_AND_ASSIGN(SecureProxyChecker); }; +// URLFetcherDelegate for fetching the warmup URL. +class WarmupURLFetcher : public net::URLFetcherDelegate { + public: + explicit WarmupURLFetcher(const scoped_refptr<net::URLRequestContextGetter>& + url_request_context_getter) + : url_request_context_getter_(url_request_context_getter) { + DCHECK(url_request_context_getter_); + } + + ~WarmupURLFetcher() override {} + + // Creates and starts a URLFetcher that fetches the warmup URL. + void FetchWarmupURL() { + UMA_HISTOGRAM_EXACT_LINEAR("DataReductionProxy.WarmupURL.FetchInitiated", 1, + 2); + + fetcher_ = net::URLFetcher::Create(params::GetWarmupURL(), + net::URLFetcher::GET, this); + data_use_measurement::DataUseUserData::AttachToFetcher( + fetcher_.get(), + data_use_measurement::DataUseUserData::DATA_REDUCTION_PROXY); + fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE); + fetcher_->SetRequestContext(url_request_context_getter_.get()); + // |fetcher| should not retry on 5xx errors. + fetcher_->SetAutomaticallyRetryOn5xx(false); + fetcher_->SetAutomaticallyRetryOnNetworkChanges(0); + fetcher_->Start(); + } + + void SetWarmupURLFetcherCallbackForTesting( + base::Callback<void()> warmup_url_fetched_callback) { + fetch_completion_callback_ = warmup_url_fetched_callback; + } + + private: + void OnURLFetchComplete(const net::URLFetcher* source) override { + DCHECK_EQ(source, fetcher_.get()); + UMA_HISTOGRAM_BOOLEAN( + "DataReductionProxy.WarmupURL.FetchSuccessful", + source->GetStatus().status() == net::URLRequestStatus::SUCCESS); + + if (fetch_completion_callback_) + fetch_completion_callback_.Run(); + } + + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; + + // The URLFetcher being used for fetching the warmup URL. + std::unique_ptr<net::URLFetcher> fetcher_; + + // Called upon the completion of fetching of the warmup URL. May be null. + base::Callback<void()> fetch_completion_callback_; + + DISALLOW_COPY_AND_ASSIGN(WarmupURLFetcher); +}; + DataReductionProxyConfig::DataReductionProxyConfig( scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, net::NetLog* net_log, @@ -320,10 +376,16 @@ net::NetworkChangeNotifier::RemoveIPAddressObserver(this); } -void DataReductionProxyConfig::InitializeOnIOThread(const scoped_refptr< - net::URLRequestContextGetter>& url_request_context_getter) { +void DataReductionProxyConfig::InitializeOnIOThread( + const scoped_refptr<net::URLRequestContextGetter>& + basic_url_request_context_getter, + const scoped_refptr<net::URLRequestContextGetter>& + url_request_context_getter) { + DCHECK(thread_checker_.CalledOnValidThread()); + secure_proxy_checker_.reset( - new SecureProxyChecker(url_request_context_getter)); + new SecureProxyChecker(basic_url_request_context_getter)); + warmup_url_fetcher_.reset(new WarmupURLFetcher(url_request_context_getter)); if (!config_values_->allowed()) return; @@ -647,6 +709,7 @@ if (enabled) { HandleCaptivePortal(); + FetchWarmupURL(); // Check if the proxy has been restricted explicitly by the carrier. // It is safe to use base::Unretained here, since it gets executed @@ -732,6 +795,8 @@ } void DataReductionProxyConfig::OnIPAddressChanged() { + DCHECK(thread_checker_.CalledOnValidThread()); + if (enabled_by_user_) { DCHECK(config_values_->allowed()); RecordNetworkChangeEvent(IP_CHANGED); @@ -741,6 +806,7 @@ network_quality_at_last_query_ = NETWORK_QUALITY_AT_LAST_QUERY_UNKNOWN; HandleCaptivePortal(); + FetchWarmupURL(); // It is safe to use base::Unretained here, since it gets executed // synchronously on the IO thread, and |this| outlives // |secure_proxy_checker_|. @@ -791,6 +857,23 @@ fetcher_callback); } +void DataReductionProxyConfig::FetchWarmupURL() { + DCHECK(thread_checker_.CalledOnValidThread()); + + if (!enabled_by_user_ || !params::FetchWarmupURLEnabled()) + return; + + warmup_url_fetcher_->FetchWarmupURL(); +} + +void DataReductionProxyConfig::SetWarmupURLFetcherCallbackForTesting( + base::Callback<void()> warmup_url_fetched_callback) { + DCHECK(thread_checker_.CalledOnValidThread()); + + warmup_url_fetcher_->SetWarmupURLFetcherCallbackForTesting( + warmup_url_fetched_callback); +} + void DataReductionProxyConfig::SetLoFiModeOff() { DCHECK(thread_checker_.CalledOnValidThread()); lofi_off_ = true;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h index 385bf60..3fe9f61 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h
@@ -51,6 +51,7 @@ class DataReductionProxyConfigurator; class DataReductionProxyEventCreator; class SecureProxyChecker; +class WarmupURLFetcher; struct DataReductionProxyTypeInfo; // Values of the UMA DataReductionProxy.ProbeURL histogram. @@ -103,7 +104,13 @@ ~DataReductionProxyConfig() override; // Performs initialization on the IO thread. + // |basic_url_request_context_getter| is the net::URLRequestContextGetter that + // disables the use of alternative protocols and proxies. + // |url_request_context_getter| is the default net::URLRequestContextGetter + // used for making URL requests. void InitializeOnIOThread(const scoped_refptr<net::URLRequestContextGetter>& + basic_url_request_context_getter, + const scoped_refptr<net::URLRequestContextGetter>& url_request_context_getter); // Sets the proxy configs, enabling or disabling the proxy according to @@ -214,6 +221,10 @@ // Updates the Data Reduction Proxy configurator with the current config. void UpdateConfigForTesting(bool enabled, bool restricted); + // Updates the callback that is called when the warmup URL has been fetched. + void SetWarmupURLFetcherCallbackForTesting( + base::Callback<void()> warmup_url_fetched_callback); + private: friend class MockDataReductionProxyConfig; friend class TestDataReductionProxyConfig; @@ -230,6 +241,7 @@ FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigTest, LoFiAccuracy); FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigTest, LoFiAccuracyNonZeroDelay); + FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigTest, WarmupURL); // Values of the estimated network quality at the beginning of the most // recent query of the Network Quality Estimator. @@ -308,8 +320,15 @@ // for testing. virtual bool GetIsCaptivePortal() const; + // Fetches the warmup URL. + void FetchWarmupURL(); + + // URL fetcher used for performing the secure proxy check. std::unique_ptr<SecureProxyChecker> secure_proxy_checker_; + // URL fetcher used for fetching the warmup URL. + std::unique_ptr<WarmupURLFetcher> warmup_url_fetcher_; + // Indicates if the secure Data Reduction Proxy can be used or not. bool secure_proxy_allowed_;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h index 05b59b3..4198e68 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h
@@ -118,6 +118,7 @@ void SetIsCaptivePortal(bool is_captive_portal); using DataReductionProxyConfig::UpdateConfigForTesting; + using DataReductionProxyConfig::SetWarmupURLFetcherCallbackForTesting; private: bool GetIsCaptivePortal() const override;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc index 0535786..c2984bc 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
@@ -14,10 +14,13 @@ #include <vector> #include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/metrics/field_trial.h" +#include "base/run_loop.h" #include "base/strings/safe_sprintf.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -44,8 +47,10 @@ #include "net/nqe/network_quality_estimator.h" #include "net/nqe/network_quality_estimator_test_util.h" #include "net/proxy/proxy_server.h" +#include "net/test/embedded_test_server/embedded_test_server.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_fetcher.h" +#include "net/url_request/url_request.h" #include "net/url_request/url_request_test_util.h" using testing::_; @@ -167,6 +172,17 @@ 1); } + void WarmupURLFetchedCallBack() const { + warmup_url_fetched_run_loop_->Quit(); + } + + void WarmUpURLFetchedRunLoop() { + warmup_url_fetched_run_loop_.reset(new base::RunLoop()); + // |warmup_url_fetched_run_loop_| will run until WarmupURLFetchedCallBack() + // is called. + warmup_url_fetched_run_loop_->Run(); + } + void RunUntilIdle() { test_context_->RunUntilIdle(); } @@ -204,6 +220,7 @@ std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_; base::MessageLoopForIO message_loop_; + std::unique_ptr<base::RunLoop> warmup_url_fetched_run_loop_; std::unique_ptr<DataReductionProxyTestContext> test_context_; std::unique_ptr<TestDataReductionProxyParams> expected_params_; }; @@ -304,6 +321,103 @@ FAILED_PROXY_DISABLED, std::vector<net::ProxyServer>(1, kHttpProxy)); } +// Verifies that the warm up URL is fetched correctly. +TEST_F(DataReductionProxyConfigTest, WarmupURL) { + const net::URLRequestStatus kSuccess(net::URLRequestStatus::SUCCESS, net::OK); + const net::ProxyServer kHttpsProxy = net::ProxyServer::FromURI( + "https://secure_origin.net:443", net::ProxyServer::SCHEME_HTTP); + const net::ProxyServer kHttpProxy = net::ProxyServer::FromURI( + "insecure_origin.net:80", net::ProxyServer::SCHEME_HTTP); + + // Set up the embedded test server from where the warm up URL will be fetched. + net::EmbeddedTestServer embedded_test_server; + embedded_test_server.AddDefaultHandlers( + base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); + EXPECT_TRUE(embedded_test_server.Start()); + + GURL warmup_url = embedded_test_server.GetURL("/simple.html"); + + const struct { + bool data_reduction_proxy_enabled; + bool enabled_via_field_trial; + } tests[] = { + { + false, false, + }, + { + false, true, + }, + { + true, false, + }, + { + true, true, + }, + }; + for (const auto& test : tests) { + base::HistogramTester histogram_tester; + SetProxiesForHttpOnCommandLine({kHttpsProxy, kHttpProxy}); + + ResetSettings(true, true, true, false); + + variations::testing::ClearAllVariationParams(); + std::map<std::string, std::string> variation_params; + variation_params["enable_warmup"] = + test.enabled_via_field_trial ? "true" : "false"; + variation_params["warmup_url"] = warmup_url.spec(); + + ASSERT_TRUE(variations::AssociateVariationParams( + params::GetQuicFieldTrialName(), "Enabled", variation_params)); + + base::FieldTrialList field_trial_list(nullptr); + base::FieldTrialList::CreateFieldTrial(params::GetQuicFieldTrialName(), + "Enabled"); + + base::CommandLine::ForCurrentProcess()->InitFromArgv(0, NULL); + TestDataReductionProxyConfig config( + DataReductionProxyParams::kAllowed | + DataReductionProxyParams::kFallbackAllowed, + TestDataReductionProxyParams::HAS_EVERYTHING, task_runner(), nullptr, + configurator(), event_creator()); + + scoped_refptr<net::URLRequestContextGetter> request_context_getter_ = + new net::TestURLRequestContextGetter(task_runner()); + config.InitializeOnIOThread(request_context_getter_.get(), + request_context_getter_.get()); + config.SetWarmupURLFetcherCallbackForTesting( + base::Bind(&DataReductionProxyConfigTest::WarmupURLFetchedCallBack, + base::Unretained(this))); + config.SetProxyConfig(test.data_reduction_proxy_enabled, true); + bool warmup_url_enabled = + test.data_reduction_proxy_enabled && test.enabled_via_field_trial; + + if (warmup_url_enabled) { + // Block until warm up URL is fetched successfully. + WarmUpURLFetchedRunLoop(); + histogram_tester.ExpectUniqueSample( + "DataReductionProxy.WarmupURL.FetchInitiated", 1, 1); + histogram_tester.ExpectUniqueSample( + "DataReductionProxy.WarmupURL.FetchSuccessful", 1, 1); + } + + config.OnIPAddressChanged(); + + if (warmup_url_enabled) { + // Block until warm up URL is fetched successfully. + WarmUpURLFetchedRunLoop(); + histogram_tester.ExpectUniqueSample( + "DataReductionProxy.WarmupURL.FetchInitiated", 1, 2); + histogram_tester.ExpectUniqueSample( + "DataReductionProxy.WarmupURL.FetchSuccessful", 1, 2); + } else { + histogram_tester.ExpectTotalCount( + "DataReductionProxy.WarmupURL.FetchInitiated", 0); + histogram_tester.ExpectTotalCount( + "DataReductionProxy.WarmupURL.FetchSuccessful", 0); + } + } +} + TEST_F(DataReductionProxyConfigTest, AreProxiesBypassed) { const struct { // proxy flags
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc index 4a1326e..91c05f7d 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
@@ -196,7 +196,8 @@ void DataReductionProxyIOData::InitializeOnIOThread() { DCHECK(io_task_runner_->BelongsToCurrentThread()); - config_->InitializeOnIOThread(basic_url_request_context_getter_.get()); + config_->InitializeOnIOThread(basic_url_request_context_getter_.get(), + url_request_context_getter_); bypass_stats_->InitializeOnIOThread(); proxy_delegate_->InitializeOnIOThread(); if (config_client_.get())
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc index f4c28f4..84f14ec 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
@@ -33,7 +33,7 @@ "http://o-o.preferred.nttdocomodcp-hnd1.proxy-dev.googlezip.net:80"; const char kDefaultFallbackOrigin[] = "compress.googlezip.net:80"; const char kDefaultSecureProxyCheckUrl[] = "http://check.googlezip.net/connect"; -const char kDefaultWarmupUrl[] = "http://www.gstatic.com/generate_204"; +const char kDefaultWarmupUrl[] = "http://check.googlezip.net/generate_204"; const char kAndroidOneIdentifier[] = "sprout"; @@ -138,6 +138,29 @@ "TamperDetection_Enabled", base::CompareCase::SENSITIVE); } +bool FetchWarmupURLEnabled() { + // Fetching of the warmup URL can be enabled only for Enabled* and Control* + // groups. + if (!base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kEnabled, + base::CompareCase::SENSITIVE) && + !base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kControl, + base::CompareCase::SENSITIVE)) { + return false; + } + + std::map<std::string, std::string> params; + variations::GetVariationParams(GetQuicFieldTrialName(), ¶ms); + return GetStringValueForVariationParamWithDefaultValue( + params, "enable_warmup", "false") == "true"; +} + +GURL GetWarmupURL() { + std::map<std::string, std::string> params; + variations::GetVariationParams(GetQuicFieldTrialName(), ¶ms); + return GURL(GetStringValueForVariationParamWithDefaultValue( + params, "warmup_url", kDefaultWarmupUrl)); +} + bool IsLoFiOnViaFlags() { return IsLoFiAlwaysOnViaFlags() || IsLoFiCellularOnlyViaFlags() || IsLoFiSlowConnectionsOnlyViaFlags(); @@ -427,8 +450,6 @@ fallback_origin = GetDefaultFallbackOrigin(); if (secure_proxy_check_url.empty()) secure_proxy_check_url = GetDefaultSecureProxyCheckURL(); - if (warmup_url.empty()) - warmup_url = GetDefaultWarmupURL(); origin_ = net::ProxyServer::FromURI(origin, net::ProxyServer::SCHEME_HTTP); fallback_origin_ = @@ -439,7 +460,6 @@ proxies_for_http_.push_back(fallback_origin_); secure_proxy_check_url_ = GURL(secure_proxy_check_url); - warmup_url_ = GURL(warmup_url); } const std::vector<net::ProxyServer>& @@ -495,8 +515,5 @@ return kDefaultSecureProxyCheckUrl; } -std::string DataReductionProxyParams::GetDefaultWarmupURL() const { - return kDefaultWarmupUrl; -} } // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h index 4aea4d5..bfdf16e 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h
@@ -148,6 +148,12 @@ // Returns the name of the server side experiment field trial. const char* GetServerExperimentsFieldTrialName(); +// Returns true if fetching of the warmup URL is enabled. +bool FetchWarmupURLEnabled(); + +// Returns the warmup URL. +GURL GetWarmupURL(); + } // namespace params // Contains information about a given proxy server. |proxies_for_http| contains @@ -222,7 +228,6 @@ virtual std::string GetDefaultOrigin() const; virtual std::string GetDefaultFallbackOrigin() const; virtual std::string GetDefaultSecureProxyCheckURL() const; - virtual std::string GetDefaultWarmupURL() const; std::vector<net::ProxyServer> proxies_for_http_; @@ -231,7 +236,6 @@ net::ProxyServer fallback_origin_; GURL secure_proxy_check_url_; - GURL warmup_url_; bool allowed_; bool fallback_allowed_;
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc index 716e02a1..e849b0d 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc
@@ -377,20 +377,31 @@ bool expected_enabled; std::string zero_rtt_param; bool expected_zero_rtt; + bool enable_warmup_url; + bool expect_warmup_url_enabled; + std::string warmup_url; } tests[] = { - {"Enabled", true, "true", true}, - {"Enabled_Control", true, "true", true}, - {"Enabled_Control", true, "false", false}, - {"Enabled_Control", true, std::string(), false}, - {"Control", false, "true", false}, - {"Disabled", false, "false", false}, - {"enabled", false, "false", false}, + {"Enabled", true, "true", true, true, true, std::string()}, + {"Enabled", true, "true", true, false, false, std::string()}, + {"Enabled_Control", true, "true", true, true, true, std::string()}, + {"Enabled_Control", true, "false", false, true, true, std::string()}, + {"Enabled_Control", true, std::string(), false, true, true, + std::string()}, + {"Control", false, "true", false, true, true, std::string()}, + {"Disabled", false, "false", false, true, false, std::string()}, + {"enabled", false, "false", false, true, false, std::string()}, + {"Enabled", true, "true", true, true, true, "example.com/test.html"}, }; for (const auto& test : tests) { variations::testing::ClearAllVariationParams(); std::map<std::string, std::string> variation_params; variation_params["enable_zero_rtt"] = test.zero_rtt_param; + if (test.enable_warmup_url) + variation_params["enable_warmup"] = "true"; + + if (!test.warmup_url.empty()) + variation_params["warmup_url"] = test.warmup_url; ASSERT_TRUE(variations::AssociateVariationParams( params::GetQuicFieldTrialName(), test.trial_group_name, variation_params)); @@ -401,6 +412,13 @@ EXPECT_EQ(test.expected_enabled, params::IsIncludedInQuicFieldTrial()); EXPECT_EQ(test.expected_zero_rtt, params::IsZeroRttQuicEnabled()); + if (!test.warmup_url.empty()) { + EXPECT_EQ(GURL(test.warmup_url), params::GetWarmupURL()); + } else { + EXPECT_EQ(GURL("http://check.googlezip.net/generate_204"), + params::GetWarmupURL()); + } + EXPECT_EQ(test.expect_warmup_url_enabled, params::FetchWarmupURLEnabled()); } }
diff --git a/components/display_compositor/compositor_overlay_candidate_validator_android.cc b/components/display_compositor/compositor_overlay_candidate_validator_android.cc index b5b1c130..a42d035 100644 --- a/components/display_compositor/compositor_overlay_candidate_validator_android.cc +++ b/components/display_compositor/compositor_overlay_candidate_validator_android.cc
@@ -37,7 +37,7 @@ // This quad either will be promoted, or would be if it were backed by a // SurfaceView. Record that it should get a promotion hint. - candidates->promotable_resource_hints_.insert(candidate.resource_id); + candidates->AddPromotionHint(candidate); if (candidate.is_backed_by_surface_texture) { // This quad would be promoted if it were backed by a SurfaceView. Since
diff --git a/components/feedback/feedback_uploader_chrome.cc b/components/feedback/feedback_uploader_chrome.cc index 0de322a..9b3cb82e 100644 --- a/components/feedback/feedback_uploader_chrome.cc +++ b/components/feedback/feedback_uploader_chrome.cc
@@ -60,8 +60,12 @@ fetcher, data_use_measurement::DataUseUserData::FEEDBACK_UPLOADER); // Tell feedback server about the variation state of this install. net::HttpRequestHeaders headers; - variations::AppendVariationHeaders( - fetcher->GetOriginalURL(), context_->IsOffTheRecord(), false, &headers); + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; + variations::AppendVariationHeaders(fetcher->GetOriginalURL(), + context_->IsOffTheRecord(), false, + is_signed_in, &headers); fetcher->SetExtraRequestHeaders(headers.ToString()); fetcher->SetUploadData(kProtoBufMimeType, data);
diff --git a/components/ntp_snippets/remote/ntp_snippets_fetcher.cc b/components/ntp_snippets/remote/ntp_snippets_fetcher.cc index 360d476..50dcf780 100644 --- a/components/ntp_snippets/remote/ntp_snippets_fetcher.cc +++ b/components/ntp_snippets/remote/ntp_snippets_fetcher.cc
@@ -691,10 +691,13 @@ headers.SetHeader("Authorization", auth_header_); } // Add X-Client-Data header with experiment IDs from field trials. + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; variations::AppendVariationHeaders(url_, false, // incognito false, // uma_enabled - &headers); + is_signed_in, &headers); return headers.ToString(); }
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc index 666e966..55e363f 100644 --- a/components/omnibox/browser/search_provider.cc +++ b/components/omnibox/browser/search_provider.cc
@@ -890,8 +890,12 @@ fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; - variations::AppendVariationHeaders( - fetcher->GetOriginalURL(), client()->IsOffTheRecord(), false, &headers); + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; + variations::AppendVariationHeaders(fetcher->GetOriginalURL(), + client()->IsOffTheRecord(), false, + is_signed_in, &headers); fetcher->SetExtraRequestHeaders(headers.ToString()); fetcher->Start(); return fetcher;
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc index f848a3c8..652034f 100644 --- a/components/omnibox/browser/zero_suggest_provider.cc +++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -333,9 +333,12 @@ fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; variations::AppendVariationHeaders(fetcher_->GetOriginalURL(), client()->IsOffTheRecord(), false, - &headers); + is_signed_in, &headers); fetcher_->SetExtraRequestHeaders(headers.ToString()); fetcher_->Start(); LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_SENT);
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc index 1c0b1bf..56f3efc 100644 --- a/components/password_manager/core/browser/password_autofill_manager.cc +++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -310,6 +310,10 @@ password_manager_driver_->ClearPreviewedForm(); } +bool PasswordAutofillManager::IsCreditCardPopup() { + return false; +} + //////////////////////////////////////////////////////////////////////////////// // PasswordAutofillManager, private:
diff --git a/components/password_manager/core/browser/password_autofill_manager.h b/components/password_manager/core/browser/password_autofill_manager.h index c1075c32..ce34770 100644 --- a/components/password_manager/core/browser/password_autofill_manager.h +++ b/components/password_manager/core/browser/password_autofill_manager.h
@@ -42,6 +42,7 @@ base::string16* body) override; bool RemoveSuggestion(const base::string16& value, int identifier) override; void ClearPreviewedForm() override; + bool IsCreditCardPopup() override; // Invoked when a password mapping is added. void OnAddPasswordFormMapping(
diff --git a/components/proximity_auth/screenlock_bridge.cc b/components/proximity_auth/screenlock_bridge.cc index d3996b1..0663dda 100644 --- a/components/proximity_auth/screenlock_bridge.cc +++ b/components/proximity_auth/screenlock_bridge.cc
@@ -117,13 +117,13 @@ } void ScreenlockBridge::SetLockHandler(LockHandler* lock_handler) { - DCHECK(lock_handler_ == nullptr || lock_handler == nullptr); - // Don't notify observers if there is no change -- i.e. if the screen was // already unlocked, and is remaining unlocked. if (lock_handler == lock_handler_) return; + DCHECK(lock_handler_ == nullptr || lock_handler == nullptr); + // TODO(isherman): If |lock_handler| is null, then |lock_handler_| might have // been freed. Cache the screen type rather than querying it below. LockHandler::ScreenType screen_type;
diff --git a/components/safe_browsing/OWNERS b/components/safe_browsing/OWNERS index b7fd72e..41a80e21 100644 --- a/components/safe_browsing/OWNERS +++ b/components/safe_browsing/OWNERS
@@ -1,3 +1,4 @@ +jialiul@chromium.org mattm@chromium.org nparker@chromium.org shess@chromium.org
diff --git a/components/suggestions/suggestions_service.cc b/components/suggestions/suggestions_service.cc index 47072e8..ec69cfe 100644 --- a/components/suggestions/suggestions_service.cc +++ b/components/suggestions/suggestions_service.cc
@@ -420,8 +420,11 @@ request->SetRequestContext(url_request_context_); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; + // Note: It's fine to pass in |is_signed_in| false, which does not affect + // transmission of experiment ids coming from the variations server. + bool is_signed_in = false; variations::AppendVariationHeaders(request->GetOriginalURL(), false, false, - &headers); + is_signed_in, &headers); request->SetExtraRequestHeaders(headers.ToString()); if (!access_token.empty()) { request->AddExtraRequestHeader(
diff --git a/components/sync/device_info/device_info_sync_bridge.cc b/components/sync/device_info/device_info_sync_bridge.cc index c762c90..e1387abe 100644 --- a/components/sync/device_info/device_info_sync_bridge.cc +++ b/components/sync/device_info/device_info_sync_bridge.cc
@@ -118,6 +118,13 @@ EntityDataMap entity_data_map) { DCHECK(has_provider_initialized_); DCHECK(change_processor()->IsTrackingMetadata()); + const DeviceInfo* local_info = + local_device_info_provider_->GetLocalDeviceInfo(); + // If our dependency was yanked out from beneath us, we cannot correctly + // handle this request, and all our data will be deleted soon. + if (local_info == nullptr) { + return SyncError(); + } // Local data should typically be near empty, with the only possible value // corresponding to this device. This is because on signout all device info @@ -130,8 +137,6 @@ } bool has_changes = false; - const DeviceInfo* local_info = - local_device_info_provider_->GetLocalDeviceInfo(); std::string local_guid = local_info->guid(); std::unique_ptr<WriteBatch> batch = store_->CreateWriteBatch(); for (const auto& kv : entity_data_map) { @@ -166,6 +171,13 @@ std::unique_ptr<MetadataChangeList> metadata_change_list, EntityChangeList entity_changes) { DCHECK(has_provider_initialized_); + const DeviceInfo* local_info = + local_device_info_provider_->GetLocalDeviceInfo(); + // If our dependency was yanked out from beneath us, we cannot correctly + // handle this request, and all our data will be deleted soon. + if (local_info == nullptr) { + return SyncError(); + } std::unique_ptr<WriteBatch> batch = store_->CreateWriteBatch(); bool has_changes = false; @@ -173,7 +185,7 @@ const std::string guid = change.storage_key(); // Each device is the authoritative source for itself, ignore any remote // changes that have our local cache guid. - if (guid == local_device_info_provider_->GetLocalDeviceInfo()->guid()) { + if (guid == local_info->guid()) { continue; } @@ -315,6 +327,8 @@ // should only need to give the processor metadata upon initialization. If // sync is disabled and enabled, our provider will try to retrigger this // event, but we do not want to send any more metadata to the processor. + // TODO(skym, crbug.com/672600): Handle re-initialization and start the pulse + // timer. subscription_.reset(); has_provider_initialized_ = true; @@ -387,6 +401,15 @@ const DeviceInfo* current_info = local_device_info_provider_->GetLocalDeviceInfo(); + // Must ensure |pulse_timer_| is started even if sync is in the process of + // being disabled. TODO(skym, crbug.com/672600): Remove this timer Start(), as + // it should be started when the provider re-initializes instead. + if (current_info == nullptr) { + pulse_timer_.Start(FROM_HERE, DeviceInfoUtil::kPulseInterval, + base::Bind(&DeviceInfoSyncBridge::SendLocalData, + base::Unretained(this))); + return; + } auto iter = all_data_.find(current_info->guid()); // Convert to DeviceInfo for Equals function.
diff --git a/components/sync/device_info/device_info_sync_bridge_unittest.cc b/components/sync/device_info/device_info_sync_bridge_unittest.cc index ace2211..3ed624e 100644 --- a/components/sync/device_info/device_info_sync_bridge_unittest.cc +++ b/components/sync/device_info/device_info_sync_bridge_unittest.cc
@@ -26,6 +26,7 @@ namespace syncer { +using base::OneShotTimer; using base::Time; using base::TimeDelta; using sync_pb::DeviceInfoSpecifics; @@ -287,6 +288,8 @@ return processor_; } + const OneShotTimer& pulse_timer() { return bridge()->pulse_timer_; } + // Should only be called after the bridge has been initialized. Will first // recover the bridge's store, so another can be initialized later, and then // deletes the bridge. @@ -398,6 +401,16 @@ EXPECT_TRUE(processor()->metadata()); } +// Simulate shutting down sync during the ModelTypeStore callbacks. The pulse +// timer should still be initialized, even though reconcile never occurs. +TEST_F(DeviceInfoSyncBridgeTest, ClearProviderDuringInit) { + InitializeBridge(); + local_device()->Clear(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); + EXPECT_TRUE(pulse_timer().IsRunning()); +} + TEST_F(DeviceInfoSyncBridgeTest, GetClientTagNormal) { InitializeBridge(); const std::string guid = "abc"; @@ -587,6 +600,25 @@ EXPECT_EQ(1, change_count()); } +TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndApply) { + // This will initialize the provider a first time. + InitializeAndPump(); + EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); + + const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); + + local_device()->Clear(); + SyncError error = bridge()->ApplySyncChanges( + bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); + EXPECT_FALSE(error.IsSet()); + EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); + + local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); + error = bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), + EntityAddList({specifics})); + EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); +} + TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) { InitializeAndPump(); EXPECT_EQ(1, change_count()); @@ -680,6 +712,24 @@ EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); } +TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndMerge) { + // This will initialize the provider a first time. + InitializeAndPump(); + EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); + + const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); + + local_device()->Clear(); + SyncError error = bridge()->MergeSyncData( + bridge()->CreateMetadataChangeList(), InlineEntityDataMap({specifics})); + EXPECT_FALSE(error.IsSet()); + EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); + local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); + error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), + InlineEntityDataMap({specifics})); + EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); +} + TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) { InitializeAndPump(); EXPECT_EQ(1, bridge()->CountActiveDevices());
diff --git a/components/variations/net/variations_http_headers.cc b/components/variations/net/variations_http_headers.cc index 48e84eb1..3217974 100644 --- a/components/variations/net/variations_http_headers.cc +++ b/components/variations/net/variations_http_headers.cc
@@ -44,6 +44,7 @@ void AppendVariationHeaders(const GURL& url, bool incognito, bool uma_enabled, + bool is_signed_in, net::HttpRequestHeaders* headers) { // Note the criteria for attaching client experiment headers: // 1. We only transmit to Google owned domains which can evaluate experiments. @@ -62,7 +63,8 @@ headers->SetHeaderIfMissing(kChromeUMAEnabled, "1"); const std::string variation_ids_header = - VariationsHttpHeaderProvider::GetInstance()->GetClientDataHeader(); + VariationsHttpHeaderProvider::GetInstance()->GetClientDataHeader( + is_signed_in); if (!variation_ids_header.empty()) { // Note that prior to M33 this header was named X-Chrome-Variations. headers->SetHeaderIfMissing(kClientData, variation_ids_header);
diff --git a/components/variations/net/variations_http_headers.h b/components/variations/net/variations_http_headers.h index d6280e5..fe4d597 100644 --- a/components/variations/net/variations_http_headers.h +++ b/components/variations/net/variations_http_headers.h
@@ -17,12 +17,16 @@ namespace variations { // Adds Chrome experiment and metrics state as custom headers to |headers|. -// Some headers may not be set given the |incognito| mode or whether -// the user has |uma_enabled|. Also, we never transmit headers to non-Google -// sites, which is checked based on the destination |url|. +// The content of the headers will depend on |incognito|, |uma_enabled| and +// |is_signed_in| parameters. It is fine to pass false for |is_signed_in| if the +// state is not known to the caller. This will prevent addition of ids of type +// GOOGLE_WEB_PROPERTIES_SIGNED_IN, which is not the case for any ids that come +// from the variations server. These headers are never transmitted to non-Google +// web sites, which is checked based on the destination |url|. void AppendVariationHeaders(const GURL& url, bool incognito, bool uma_enabled, + bool is_signed_in, net::HttpRequestHeaders* headers); // Returns the HTTP header names which are added by AppendVariationHeaders().
diff --git a/components/variations/variations_associated_data.cc b/components/variations/variations_associated_data.cc index 6701105..ec696a3 100644 --- a/components/variations/variations_associated_data.cc +++ b/components/variations/variations_associated_data.cc
@@ -39,13 +39,21 @@ const VariationID id, const bool force) { #if !defined(NDEBUG) - DCHECK_EQ(3, ID_COLLECTION_COUNT); - // Ensure that at most one of the trigger/non-trigger web property IDs are - // set. - if (key == GOOGLE_WEB_PROPERTIES || key == GOOGLE_WEB_PROPERTIES_TRIGGER) { - IDCollectionKey other_key = key == GOOGLE_WEB_PROPERTIES ? - GOOGLE_WEB_PROPERTIES_TRIGGER : GOOGLE_WEB_PROPERTIES; - DCHECK_EQ(EMPTY_ID, GetID(other_key, group_identifier)); + DCHECK_EQ(4, ID_COLLECTION_COUNT); + // Ensure that at most one of the trigger/non-trigger/signed-in web property + // IDs are set. + if (key == GOOGLE_WEB_PROPERTIES || key == GOOGLE_WEB_PROPERTIES_TRIGGER || + key == GOOGLE_WEB_PROPERTIES_SIGNED_IN) { + if (key != GOOGLE_WEB_PROPERTIES) + DCHECK_EQ(EMPTY_ID, GetID(GOOGLE_WEB_PROPERTIES, group_identifier)); + if (key != GOOGLE_WEB_PROPERTIES_TRIGGER) { + DCHECK_EQ(EMPTY_ID, + GetID(GOOGLE_WEB_PROPERTIES_TRIGGER, group_identifier)); + } + if (key != GOOGLE_WEB_PROPERTIES_SIGNED_IN) { + DCHECK_EQ(EMPTY_ID, + GetID(GOOGLE_WEB_PROPERTIES_SIGNED_IN, group_identifier)); + } } // Validate that all collections with this |group_identifier| have the same
diff --git a/components/variations/variations_associated_data.h b/components/variations/variations_associated_data.h index ad359a4..8b1b25f 100644 --- a/components/variations/variations_associated_data.h +++ b/components/variations/variations_associated_data.h
@@ -58,6 +58,9 @@ // This collection is used by Google web properties, transmitted through the // X-Client-Data header. GOOGLE_WEB_PROPERTIES, + // This collection is used by Google web properties for signed in users only, + // transmitted through the X-Client-Data header. + GOOGLE_WEB_PROPERTIES_SIGNED_IN, // This collection is used by Google web properties for IDs that trigger // server side experimental behavior, transmitted through the // X-Client-Data header.
diff --git a/components/variations/variations_http_header_provider.cc b/components/variations/variations_http_header_provider.cc index 5af7151..885c8908 100644 --- a/components/variations/variations_http_header_provider.cc +++ b/components/variations/variations_http_header_provider.cc
@@ -26,7 +26,8 @@ return base::Singleton<VariationsHttpHeaderProvider>::get(); } -std::string VariationsHttpHeaderProvider::GetClientDataHeader() { +std::string VariationsHttpHeaderProvider::GetClientDataHeader( + bool is_signed_in) { // Lazily initialize the header, if not already done, before attempting to // transmit it. InitVariationIDsCacheIfNeeded(); @@ -34,7 +35,9 @@ std::string variation_ids_header_copy; { base::AutoLock scoped_lock(lock_); - variation_ids_header_copy = variation_ids_header_; + variation_ids_header_copy = is_signed_in + ? cached_variation_ids_header_signed_in_ + : cached_variation_ids_header_; } return variation_ids_header_copy; } @@ -48,9 +51,11 @@ std::string ids_string = " "; { base::AutoLock scoped_lock(lock_); - for (VariationID id : GetAllVariationIds()) { - ids_string.append(base::IntToString(id)); - ids_string.push_back(' '); + for (const VariationIDEntry& entry : GetAllVariationIds()) { + if (entry.second == GOOGLE_WEB_PROPERTIES) { + ids_string.append(base::IntToString(entry.first)); + ids_string.push_back(' '); + } } } return ids_string; @@ -76,15 +81,12 @@ return true; } - bool VariationsHttpHeaderProvider::SetDefaultVariationIds( const std::vector<std::string>& variation_ids) { default_variation_ids_set_.clear(); - default_trigger_id_set_.clear(); for (const std::string& entry : variation_ids) { if (entry.empty()) { default_variation_ids_set_.clear(); - default_trigger_id_set_.clear(); return false; } bool trigger_id = @@ -95,13 +97,11 @@ int variation_id = 0; if (!base::StringToInt(trimmed_entry, &variation_id)) { default_variation_ids_set_.clear(); - default_trigger_id_set_.clear(); return false; } - if (trigger_id) - default_trigger_id_set_.insert(variation_id); - else - default_variation_ids_set_.insert(variation_id); + default_variation_ids_set_.insert(VariationIDEntry( + variation_id, + trigger_id ? GOOGLE_WEB_PROPERTIES_TRIGGER : GOOGLE_WEB_PROPERTIES)); } return true; } @@ -123,20 +123,13 @@ void VariationsHttpHeaderProvider::OnFieldTrialGroupFinalized( const std::string& trial_name, const std::string& group_name) { - VariationID new_id = - GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, trial_name, group_name); - VariationID new_trigger_id = GetGoogleVariationID( - GOOGLE_WEB_PROPERTIES_TRIGGER, trial_name, group_name); - if (new_id == EMPTY_ID && new_trigger_id == EMPTY_ID) - return; - base::AutoLock scoped_lock(lock_); - if (new_id != EMPTY_ID) - variation_ids_set_.insert(new_id); - if (new_trigger_id != EMPTY_ID) - variation_trigger_ids_set_.insert(new_trigger_id); - - UpdateVariationIDsHeaderValue(); + const size_t old_size = variation_ids_set_.size(); + CacheVariationsId(trial_name, group_name, GOOGLE_WEB_PROPERTIES); + CacheVariationsId(trial_name, group_name, GOOGLE_WEB_PROPERTIES_SIGNED_IN); + CacheVariationsId(trial_name, group_name, GOOGLE_WEB_PROPERTIES_TRIGGER); + if (variation_ids_set_.size() != old_size) + UpdateVariationIDsHeaderValue(); } void VariationsHttpHeaderProvider::OnSyntheticTrialsChanged( @@ -145,10 +138,18 @@ synthetic_variation_ids_set_.clear(); for (const SyntheticTrialGroup& group : groups) { - const VariationID id = + VariationID id = GetGoogleVariationIDFromHashes(GOOGLE_WEB_PROPERTIES, group.id); - if (id != EMPTY_ID) - synthetic_variation_ids_set_.insert(id); + if (id != EMPTY_ID) { + synthetic_variation_ids_set_.insert( + VariationIDEntry(id, GOOGLE_WEB_PROPERTIES)); + } + id = GetGoogleVariationIDFromHashes(GOOGLE_WEB_PROPERTIES_SIGNED_IN, + group.id); + if (id != EMPTY_ID) { + synthetic_variation_ids_set_.insert( + VariationIDEntry(id, GOOGLE_WEB_PROPERTIES_SIGNED_IN)); + } } UpdateVariationIDsHeaderValue(); } @@ -169,18 +170,12 @@ base::FieldTrialList::GetActiveFieldTrialGroups(&initial_groups); for (const auto& entry : initial_groups) { - const VariationID id = - GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, entry.trial_name, - entry.group_name); - if (id != EMPTY_ID) - variation_ids_set_.insert(id); - - const VariationID trigger_id = - GetGoogleVariationID(GOOGLE_WEB_PROPERTIES_TRIGGER, entry.trial_name, - entry.group_name); - - if (trigger_id != EMPTY_ID) - variation_trigger_ids_set_.insert(trigger_id); + CacheVariationsId(entry.trial_name, entry.group_name, + GOOGLE_WEB_PROPERTIES); + CacheVariationsId(entry.trial_name, entry.group_name, + GOOGLE_WEB_PROPERTIES_SIGNED_IN); + CacheVariationsId(entry.trial_name, entry.group_name, + GOOGLE_WEB_PROPERTIES_TRIGGER); } UpdateVariationIDsHeaderValue(); @@ -192,61 +187,90 @@ variation_ids_cache_initialized_ = true; } +void VariationsHttpHeaderProvider::CacheVariationsId( + const std::string& trial_name, + const std::string& group_name, + IDCollectionKey key) { + const VariationID id = GetGoogleVariationID(key, trial_name, group_name); + if (id != EMPTY_ID) + variation_ids_set_.insert(VariationIDEntry(id, key)); +} + void VariationsHttpHeaderProvider::UpdateVariationIDsHeaderValue() { lock_.AssertAcquired(); // The header value is a serialized protobuffer of Variation IDs which is // base64 encoded before transmitting as a string. - variation_ids_header_.clear(); + cached_variation_ids_header_.clear(); + cached_variation_ids_header_signed_in_.clear(); - if (variation_ids_set_.empty() && default_variation_ids_set_.empty() && - variation_trigger_ids_set_.empty() && default_trigger_id_set_.empty() && - synthetic_variation_ids_set_.empty()) { - return; + // If successful, swap the header value with the new one. + // Note that the list of IDs and the header could be temporarily out of sync + // if IDs are added as the header is recreated. The receiving servers are OK + // with such discrepancies. + cached_variation_ids_header_ = GenerateBase64EncodedProto(false); + cached_variation_ids_header_signed_in_ = GenerateBase64EncodedProto(true); +} + +std::string VariationsHttpHeaderProvider::GenerateBase64EncodedProto( + bool is_signed_in) { + std::set<VariationIDEntry> all_variation_ids_set = GetAllVariationIds(); + + ClientVariations proto; + for (const VariationIDEntry& entry : all_variation_ids_set) { + switch (entry.second) { + case GOOGLE_WEB_PROPERTIES_SIGNED_IN: + if (is_signed_in) + proto.add_variation_id(entry.first); + break; + case GOOGLE_WEB_PROPERTIES: + proto.add_variation_id(entry.first); + break; + case GOOGLE_WEB_PROPERTIES_TRIGGER: + proto.add_trigger_variation_id(entry.first); + break; + case CHROME_SYNC_SERVICE: + case ID_COLLECTION_COUNT: + // These cases included to get full enum coverage for switch, so that + // new enums introduce compiler warnings. Nothing to do for these. + break; + } } + const size_t total_id_count = + proto.variation_id_size() + proto.trigger_variation_id_size(); + + if (total_id_count == 0) + return std::string(); + // This is the bottleneck for the creation of the header, so validate the size // here. Force a hard maximum on the ID count in case the Variations server // returns too many IDs and DOSs receiving servers with large requests. - const size_t total_id_count = - variation_ids_set_.size() + variation_trigger_ids_set_.size(); DCHECK_LE(total_id_count, 10U); UMA_HISTOGRAM_COUNTS_100("Variations.Headers.ExperimentCount", total_id_count); if (total_id_count > 20) - return; - - std::set<VariationID> all_variation_ids_set = GetAllVariationIds(); - std::set<VariationID> all_trigger_ids_set = default_trigger_id_set_; - for (VariationID id : variation_trigger_ids_set_) - all_trigger_ids_set.insert(id); - - ClientVariations proto; - for (VariationID id : all_variation_ids_set) - proto.add_variation_id(id); - for (VariationID id : all_trigger_ids_set) - proto.add_trigger_variation_id(id); + return std::string(); std::string serialized; proto.SerializeToString(&serialized); std::string hashed; base::Base64Encode(serialized, &hashed); - // If successful, swap the header value with the new one. - // Note that the list of IDs and the header could be temporarily out of sync - // if IDs are added as the header is recreated. The receiving servers are OK - // with such discrepancies. - variation_ids_header_ = hashed; + return hashed; } -std::set<VariationID> VariationsHttpHeaderProvider::GetAllVariationIds() { +std::set<VariationsHttpHeaderProvider::VariationIDEntry> +VariationsHttpHeaderProvider::GetAllVariationIds() { lock_.AssertAcquired(); - std::set<VariationID> all_variation_ids_set = default_variation_ids_set_; - for (VariationID id : variation_ids_set_) - all_variation_ids_set.insert(id); - for (VariationID id : synthetic_variation_ids_set_) - all_variation_ids_set.insert(id); + std::set<VariationIDEntry> all_variation_ids_set = default_variation_ids_set_; + for (const VariationIDEntry& entry : variation_ids_set_) { + all_variation_ids_set.insert(entry); + } + for (const VariationIDEntry& entry : synthetic_variation_ids_set_) { + all_variation_ids_set.insert(entry); + } return all_variation_ids_set; }
diff --git a/components/variations/variations_http_header_provider.h b/components/variations/variations_http_header_provider.h index 349fea9..184766d6 100644 --- a/components/variations/variations_http_header_provider.h +++ b/components/variations/variations_http_header_provider.h
@@ -7,6 +7,7 @@ #include <set> #include <string> +#include <utility> #include <vector> #include "base/gtest_prod_util.h" @@ -32,12 +33,15 @@ static VariationsHttpHeaderProvider* GetInstance(); // Returns the value of the client data header, computing and caching it if - // necessary. - std::string GetClientDataHeader(); + // necessary. If |is_signed_in| is false, variation ids that should only be + // sent for signed in users (i.e. GOOGLE_WEB_PROPERTIES_SIGNED_IN entries) + // will not be included. + std::string GetClientDataHeader(bool is_signed_in); // Returns a space-separated string containing the list of current active // variations (as would be reported in the |variation_id| repeated field of - // the ClientVariations proto). The returned string is guaranteed to have a + // the ClientVariations proto). Does not include variation ids that should be + // sent for signed-in users only. The returned string is guaranteed to have a // a leading and trailing space, e.g. " 123 234 345 ". std::string GetVariationsString(); @@ -61,6 +65,8 @@ private: friend struct base::DefaultSingletonTraits<VariationsHttpHeaderProvider>; + typedef std::pair<VariationID, IDCollectionKey> VariationIDEntry; + FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest, SetDefaultVariationIds_Valid); FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest, @@ -88,35 +94,43 @@ // new variation IDs. void InitVariationIDsCacheIfNeeded(); + // Looks up the associated id for the given trial/group and adds an entry for + // it to |variation_ids_set_| if found. + void CacheVariationsId(const std::string& trial_name, + const std::string& group_name, + IDCollectionKey key); + // Takes whatever is currently in |variation_ids_set_| and recreates // |variation_ids_header_| with it. Assumes the the |lock_| is currently // held. void UpdateVariationIDsHeaderValue(); + // Generates a base64-encoded proto to be used as a header value for the given + // |is_signed_in| state. + std::string GenerateBase64EncodedProto(bool is_signed_in); + // Returns the currently active set of variation ids, which includes any // default values, synthetic variations and actual field trial variations. - std::set<VariationID> GetAllVariationIds(); + std::set<VariationIDEntry> GetAllVariationIds(); - // Guards |variation_ids_cache_initialized_|, |variation_ids_set_| and - // |variation_ids_header_|. + // Guards access to variables below. base::Lock lock_; - // Whether or not we've initialized the cache. + // Whether or not we've initialized the caches. bool variation_ids_cache_initialized_; // Keep a cache of variation IDs that are transmitted in headers to Google. // This consists of a list of valid IDs, and the actual transmitted header. - std::set<VariationID> variation_ids_set_; - std::set<VariationID> variation_trigger_ids_set_; + std::set<VariationIDEntry> variation_ids_set_; // Provides the google experiment ids forced from command line. - std::set<VariationID> default_variation_ids_set_; - std::set<VariationID> default_trigger_id_set_; + std::set<VariationIDEntry> default_variation_ids_set_; // Variations ids from synthetic field trials. - std::set<VariationID> synthetic_variation_ids_set_; + std::set<VariationIDEntry> synthetic_variation_ids_set_; - std::string variation_ids_header_; + std::string cached_variation_ids_header_; + std::string cached_variation_ids_header_signed_in_; DISALLOW_COPY_AND_ASSIGN(VariationsHttpHeaderProvider); };
diff --git a/components/variations/variations_http_header_provider_unittest.cc b/components/variations/variations_http_header_provider_unittest.cc index a1b9d3da..394310a 100644 --- a/components/variations/variations_http_header_provider_unittest.cc +++ b/components/variations/variations_http_header_provider_unittest.cc
@@ -67,7 +67,7 @@ // Valid experiment ids. EXPECT_TRUE(provider.SetDefaultVariationIds({"12", "456", "t789"})); provider.InitVariationIDsCacheIfNeeded(); - std::string variations = provider.GetClientDataHeader(); + std::string variations = provider.GetClientDataHeader(false); EXPECT_FALSE(variations.empty()); std::set<VariationID> variation_ids; std::set<VariationID> trigger_ids; @@ -86,13 +86,13 @@ EXPECT_FALSE(provider.SetDefaultVariationIds( std::vector<std::string>{"abcd12", "456"})); provider.InitVariationIDsCacheIfNeeded(); - EXPECT_TRUE(provider.GetClientDataHeader().empty()); + EXPECT_TRUE(provider.GetClientDataHeader(false).empty()); // Invalid trigger experiment id EXPECT_FALSE(provider.SetDefaultVariationIds( std::vector<std::string>{"12", "tabc456"})); provider.InitVariationIDsCacheIfNeeded(); - EXPECT_TRUE(provider.GetClientDataHeader().empty()); + EXPECT_TRUE(provider.GetClientDataHeader(false).empty()); } TEST_F(VariationsHttpHeaderProviderTest, OnFieldTrialGroupFinalized) { @@ -104,25 +104,44 @@ const std::string default_name = "default"; scoped_refptr<base::FieldTrial> trial_1(CreateTrialAndAssociateId( "t1", default_name, GOOGLE_WEB_PROPERTIES, 123)); - ASSERT_EQ(default_name, trial_1->group_name()); scoped_refptr<base::FieldTrial> trial_2(CreateTrialAndAssociateId( "t2", default_name, GOOGLE_WEB_PROPERTIES_TRIGGER, 456)); - ASSERT_EQ(default_name, trial_2->group_name()); + scoped_refptr<base::FieldTrial> trial_3(CreateTrialAndAssociateId( + "t3", default_name, GOOGLE_WEB_PROPERTIES_SIGNED_IN, 789)); + ASSERT_EQ(default_name, trial_3->group_name()); + // Run the message loop to make sure OnFieldTrialGroupFinalized is called for // the two field trials. base::RunLoop().RunUntilIdle(); - std::string variations = provider.GetClientDataHeader(); + // Get non-signed in ids. + { + std::string variations = provider.GetClientDataHeader(false); + std::set<VariationID> variation_ids; + std::set<VariationID> trigger_ids; + ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids)); + EXPECT_EQ(1U, variation_ids.size()); + EXPECT_TRUE(variation_ids.find(123) != variation_ids.end()); + EXPECT_EQ(1U, trigger_ids.size()); + EXPECT_TRUE(trigger_ids.find(456) != trigger_ids.end()); + } - std::set<VariationID> variation_ids; - std::set<VariationID> trigger_ids; - ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids)); - EXPECT_TRUE(variation_ids.find(123) != variation_ids.end()); - EXPECT_TRUE(trigger_ids.find(456) != trigger_ids.end()); + // Now, get signed-in ids. + { + std::string variations = provider.GetClientDataHeader(true); + std::set<VariationID> variation_ids; + std::set<VariationID> trigger_ids; + ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids)); + EXPECT_EQ(2U, variation_ids.size()); + EXPECT_TRUE(variation_ids.find(123) != variation_ids.end()); + EXPECT_TRUE(variation_ids.find(789) != variation_ids.end()); + EXPECT_EQ(1U, trigger_ids.size()); + EXPECT_TRUE(trigger_ids.find(456) != trigger_ids.end()); + } } TEST_F(VariationsHttpHeaderProviderTest, GetVariationsString) { @@ -131,6 +150,8 @@ CreateTrialAndAssociateId("t1", "g1", GOOGLE_WEB_PROPERTIES, 123); CreateTrialAndAssociateId("t2", "g2", GOOGLE_WEB_PROPERTIES, 124); + // SIGNED_IN ids shouldn't be included. + CreateTrialAndAssociateId("t3", "g3", GOOGLE_WEB_PROPERTIES_SIGNED_IN, 125); VariationsHttpHeaderProvider provider; std::vector<std::string> ids;
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc index 75a1d71..c6e228f 100644 --- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc +++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -186,16 +186,13 @@ agent_host_->DispatchProtocolMessage(this, json_command); // Some messages are dispatched synchronously. // Only run loop if we are not finished yet. - if (in_dispatch_ && wait) - WaitForResponse(); + if (in_dispatch_ && wait) { + waiting_for_command_result_id_ = last_sent_id_; + base::RunLoop().Run(); + } in_dispatch_ = false; } - void WaitForResponse() { - waiting_for_command_result_id_ = last_sent_id_; - base::RunLoop().Run(); - } - bool HasValue(const std::string& path) { base::Value* value = 0; return result_->Get(path, &value); @@ -412,26 +409,14 @@ int modifier, int windowsKeyCode, int nativeKeyCode, - const std::string& key, - bool wait) { + const std::string& key) { std::unique_ptr<base::DictionaryValue> params(new base::DictionaryValue()); params->SetString("type", type); params->SetInteger("modifiers", modifier); params->SetInteger("windowsVirtualKeyCode", windowsKeyCode); params->SetInteger("nativeVirtualKeyCode", nativeKeyCode); params->SetString("key", key); - SendCommand("Input.dispatchKeyEvent", std::move(params), wait); - } -}; - -class SyntheticMouseEventTest : public DevToolsProtocolTest { - protected: - void SendMouseEvent(const std::string& type, int x, int y, bool wait) { - std::unique_ptr<base::DictionaryValue> params(new base::DictionaryValue()); - params->SetString("type", type); - params->SetInteger("x", x); - params->SetInteger("y", y); - SendCommand("Input.dispatchMouseEvent", std::move(params), wait); + SendCommand("Input.dispatchKeyEvent", std::move(params)); } }; @@ -450,8 +435,8 @@ DOMMessageQueue dom_message_queue; // Send enter (keycode 13). - SendKeyEvent("rawKeyDown", 0, 13, 13, "Enter", true); - SendKeyEvent("keyUp", 0, 13, 13, "Enter", true); + SendKeyEvent("rawKeyDown", 0, 13, 13, "Enter"); + SendKeyEvent("keyUp", 0, 13, 13, "Enter"); std::string key; ASSERT_TRUE(dom_message_queue.WaitForMessage(&key)); @@ -460,8 +445,8 @@ EXPECT_EQ("\"Enter\"", key); // Send escape (keycode 27). - SendKeyEvent("rawKeyDown", 0, 27, 27, "Escape", true); - SendKeyEvent("keyUp", 0, 27, 27, "Escape", true); + SendKeyEvent("rawKeyDown", 0, 27, 27, "Escape"); + SendKeyEvent("keyUp", 0, 27, 27, "Escape"); ASSERT_TRUE(dom_message_queue.WaitForMessage(&key)); EXPECT_EQ("\"Escape\"", key); @@ -469,59 +454,6 @@ EXPECT_EQ("\"Escape\"", key); } -IN_PROC_BROWSER_TEST_F(SyntheticKeyEventTest, KeyboardEventAck) { - NavigateToURLBlockUntilNavigationsComplete(shell(), GURL("about:blank"), 1); - Attach(); - ASSERT_TRUE(content::ExecuteScript( - shell()->web_contents()->GetRenderViewHost(), - "document.body.addEventListener('keydown', () => console.log('x'));")); - - scoped_refptr<InputMsgWatcher> filter = new InputMsgWatcher( - RenderWidgetHostImpl::From( - shell()->web_contents()->GetRenderViewHost()->GetWidget()), - blink::WebInputEvent::MouseMove); - - SendCommand("Runtime.enable", nullptr); - SendKeyEvent("rawKeyDown", 0, 13, 13, "Enter", false); - - // We expect that the console log message event arrives *before* the input - // event ack, and the subsequent command response for Input.dispatchKeyEvent. - WaitForNotification("Runtime.consoleAPICalled"); - EXPECT_THAT(console_messages_, ElementsAre("x")); - EXPECT_FALSE(filter->HasReceivedAck()); - EXPECT_EQ(1u, result_ids_.size()); - - WaitForResponse(); - EXPECT_EQ(2u, result_ids_.size()); -} - -IN_PROC_BROWSER_TEST_F(SyntheticMouseEventTest, MouseEventAck) { - NavigateToURLBlockUntilNavigationsComplete(shell(), GURL("about:blank"), 1); - Attach(); - ASSERT_TRUE(content::ExecuteScript( - shell()->web_contents()->GetRenderViewHost(), - "document.body.addEventListener('mousemove', () => console.log('x'));")); - - scoped_refptr<InputMsgWatcher> filter = new InputMsgWatcher( - RenderWidgetHostImpl::From( - shell()->web_contents()->GetRenderViewHost()->GetWidget()), - blink::WebInputEvent::MouseMove); - - SendCommand("Runtime.enable", nullptr); - SendMouseEvent("mouseMoved", 15, 15, false); - - // We expect that the console log message event arrives *before* the input - // event ack, and the subsequent command response for - // Input.dispatchMouseEvent. - WaitForNotification("Runtime.consoleAPICalled"); - EXPECT_THAT(console_messages_, ElementsAre("x")); - EXPECT_FALSE(filter->HasReceivedAck()); - EXPECT_EQ(1u, result_ids_.size()); - - WaitForResponse(); - EXPECT_EQ(2u, result_ids_.size()); -} - namespace { bool DecodePNG(std::string base64_data, SkBitmap* bitmap) { std::string png_data;
diff --git a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py b/content/browser/devtools/protocol/devtools_protocol_handler_generator.py index 45fc22d..ca6f1ca8 100755 --- a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py +++ b/content/browser/devtools/protocol/devtools_protocol_handler_generator.py
@@ -663,8 +663,6 @@ "Network.getCookies", "Network.deleteCookie", "Network.setCookie", - "Input.dispatchKeyEvent", - "Input.dispatchMouseEvent", "Input.synthesizePinchGesture", "Input.synthesizeScrollGesture", "Input.synthesizeTapGesture"]
diff --git a/content/browser/devtools/protocol/input_handler.cc b/content/browser/devtools/protocol/input_handler.cc index 1c0526f..b963044 100644 --- a/content/browser/devtools/protocol/input_handler.cc +++ b/content/browser/devtools/protocol/input_handler.cc
@@ -130,7 +130,6 @@ InputHandler::InputHandler() : host_(NULL), - input_queued_(false), page_scale_factor_(1.0), weak_factory_(this) { } @@ -138,30 +137,8 @@ InputHandler::~InputHandler() { } -void InputHandler::OnInputEvent(const blink::WebInputEvent& event) { - input_queued_ = true; -} - -void InputHandler::OnInputEventAck(const blink::WebInputEvent& event) { - if (blink::WebInputEvent::isKeyboardEventType(event.type) && - !pending_key_command_ids_.empty()) { - SendDispatchKeyEventResponse(pending_key_command_ids_.front()); - pending_key_command_ids_.pop_front(); - } else if (blink::WebInputEvent::isMouseEventType(event.type) && - !pending_mouse_command_ids_.empty()) { - SendDispatchMouseEventResponse(pending_mouse_command_ids_.front()); - pending_mouse_command_ids_.pop_front(); - } -} - void InputHandler::SetRenderWidgetHost(RenderWidgetHostImpl* host) { - ClearPendingKeyCommands(); - ClearPendingMouseCommands(); - if (host_) - host_->RemoveInputEventObserver(this); host_ = host; - if (host) - host->AddInputEventObserver(this); } void InputHandler::SetClient(std::unique_ptr<Client> client) { @@ -174,15 +151,7 @@ scrollable_viewport_size_ = frame_metadata.scrollable_viewport_size; } -void InputHandler::Detached() { - ClearPendingKeyCommands(); - ClearPendingMouseCommands(); - if (host_) - host_->RemoveInputEventObserver(this); -} - Response InputHandler::DispatchKeyEvent( - DevToolsCommandId command_id, const std::string& type, const int* modifiers, const double* timestamp, @@ -244,17 +213,11 @@ return Response::ServerError("Could not connect to view"); host_->Focus(); - input_queued_ = false; host_->ForwardKeyboardEvent(event); - if (input_queued_) - pending_key_command_ids_.push_back(command_id); - else - SendDispatchKeyEventResponse(command_id); return Response::OK(); } Response InputHandler::DispatchMouseEvent( - DevToolsCommandId command_id, const std::string& type, int x, int y, @@ -286,12 +249,7 @@ return Response::ServerError("Could not connect to view"); host_->Focus(); - input_queued_ = false; host_->ForwardMouseEvent(event); - if (input_queued_) - pending_mouse_command_ids_.push_back(command_id); - else - SendDispatchMouseEventResponse(command_id); return Response::OK(); } @@ -521,17 +479,6 @@ return Response::FallThrough(); } -void InputHandler::SendDispatchKeyEventResponse(DevToolsCommandId command_id) { - client_->SendDispatchKeyEventResponse( - command_id, DispatchKeyEventResponse::Create()); -} - -void InputHandler::SendDispatchMouseEventResponse( - DevToolsCommandId command_id) { - client_->SendDispatchMouseEventResponse( - command_id, DispatchMouseEventResponse::Create()); -} - void InputHandler::SendSynthesizePinchGestureResponse( DevToolsCommandId command_id, SyntheticGesture::Result result) { @@ -574,18 +521,6 @@ } } -void InputHandler::ClearPendingKeyCommands() { - for (const DevToolsCommandId& command_id : pending_key_command_ids_) - SendDispatchKeyEventResponse(command_id); - pending_key_command_ids_.clear(); -} - -void InputHandler::ClearPendingMouseCommands() { - for (const DevToolsCommandId& command_id : pending_mouse_command_ids_) - SendDispatchMouseEventResponse(command_id); - pending_mouse_command_ids_.clear(); -} - } // namespace input } // namespace devtools } // namespace content
diff --git a/content/browser/devtools/protocol/input_handler.h b/content/browser/devtools/protocol/input_handler.h index e98c527..691cad2 100644 --- a/content/browser/devtools/protocol/input_handler.h +++ b/content/browser/devtools/protocol/input_handler.h
@@ -10,7 +10,6 @@ #include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h" #include "content/browser/renderer_host/input/synthetic_gesture.h" #include "content/common/input/synthetic_smooth_scroll_gesture_params.h" -#include "content/public/browser/render_widget_host.h" #include "ui/gfx/geometry/size_f.h" namespace cc { @@ -24,20 +23,18 @@ namespace devtools { namespace input { -class InputHandler : public RenderWidgetHost::InputEventObserver { +class InputHandler { public: typedef DevToolsProtocolClient::Response Response; InputHandler(); - ~InputHandler() override; + virtual ~InputHandler(); void SetRenderWidgetHost(RenderWidgetHostImpl* host); void SetClient(std::unique_ptr<Client> client); void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata); - void Detached(); - Response DispatchKeyEvent(DevToolsCommandId command_id, - const std::string& type, + Response DispatchKeyEvent(const std::string& type, const int* modifiers, const double* timestamp, const std::string* text, @@ -51,8 +48,7 @@ const bool* is_keypad, const bool* is_system_key); - Response DispatchMouseEvent(DevToolsCommandId command_id, - const std::string& type, + Response DispatchMouseEvent(const std::string& type, int x, int y, const int* modifiers, @@ -105,13 +101,6 @@ const double* timestamp); private: - // InputEventObserver - void OnInputEvent(const blink::WebInputEvent& event) override; - void OnInputEventAck(const blink::WebInputEvent& event) override; - - void SendDispatchKeyEventResponse(DevToolsCommandId command_id); - void SendDispatchMouseEventResponse(DevToolsCommandId command_id); - void SendSynthesizePinchGestureResponse(DevToolsCommandId command_id, SyntheticGesture::Result result); @@ -136,16 +125,8 @@ DevToolsCommandId command_id, SyntheticGesture::Result result); - void ClearPendingKeyCommands(); - void ClearPendingMouseCommands(); - RenderWidgetHostImpl* host_; std::unique_ptr<Client> client_; - // DevToolsCommandIds for calls to Input.dispatchKey/MouseEvent that have been - // sent to the renderer, but that we haven't yet received an ack for. - bool input_queued_; - std::deque<DevToolsCommandId> pending_key_command_ids_; - std::deque<DevToolsCommandId> pending_mouse_command_ids_; float page_scale_factor_; gfx::SizeF scrollable_viewport_size_; base::WeakPtrFactory<InputHandler> weak_factory_;
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index 43253f6f9..dd1ee7ad 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -584,7 +584,6 @@ emulation_handler_->Detached(); if (page_handler_) page_handler_->Detached(); - input_handler_->Detached(); service_worker_handler_->Detached(); target_handler_->Detached(); frame_trace_recorder_.reset();
diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc index 5d85503..953b720 100644 --- a/content/browser/indexed_db/indexed_db_database_unittest.cc +++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
@@ -377,6 +377,10 @@ void RunPostedTasks() { base::RunLoop().RunUntilIdle(); } +private: + // Needs to outlive |db_|. + content::TestBrowserThreadBundle thread_bundle_; + protected: scoped_refptr<IndexedDBFakeBackingStore> backing_store_; scoped_refptr<IndexedDBDatabase> db_; @@ -389,7 +393,6 @@ private: scoped_refptr<MockIndexedDBFactory> factory_; - content::TestBrowserThreadBundle thread_bundle_; DISALLOW_COPY_AND_ASSIGN(IndexedDBDatabaseOperationTest); };
diff --git a/content/browser/renderer_host/input/gesture_event_queue.cc b/content/browser/renderer_host/input/gesture_event_queue.cc index a0a80e3..6952862 100644 --- a/content/browser/renderer_host/input/gesture_event_queue.cc +++ b/content/browser/renderer_host/input/gesture_event_queue.cc
@@ -163,6 +163,9 @@ case WebInputEvent::GestureTapCancel: case WebInputEvent::GestureTap: case WebInputEvent::GestureDoubleTap: + case WebInputEvent::GestureLongPress: + case WebInputEvent::GestureLongTap: + case WebInputEvent::GestureTwoFingerTap: if (gesture_event.event.sourceDevice == blink::WebGestureDeviceTouchscreen) { return !touchscreen_tap_suppression_controller_.FilterTapEvent(
diff --git a/content/browser/renderer_host/input/input_router_config_helper.cc b/content/browser/renderer_host/input/input_router_config_helper.cc index 53aaee3..a41f0ec 100644 --- a/content/browser/renderer_host/input/input_router_config_helper.cc +++ b/content/browser/renderer_host/input/input_router_config_helper.cc
@@ -49,9 +49,16 @@ config.touchscreen_tap_suppression_config.max_cancel_to_down_time = base::TimeDelta::FromMilliseconds( gesture_config->fling_max_cancel_to_down_time_in_ms()); + + // Tap suppression controller forwards the stashed tapDown and drops the rest + // of the stashed events when the tapDownTimer expires. If a fling cancel ack + // with |processed = false| arrives before the timer expiration, all stashed + // events will be forwarded. The timer is used to avoid waiting for an + // arbitrarily late fling cancel ack. Its delay should be large enough for + // a long press to get stashed and forwarded if needed. config.touchscreen_tap_suppression_config.max_tap_gap_time = base::TimeDelta::FromMilliseconds( - gesture_config->long_press_time_in_ms()); + gesture_config->long_press_time_in_ms() + 50); config.touchpad_tap_suppression_config.enabled = gesture_config->fling_touchpad_tap_suppression_enabled();
diff --git a/content/browser/renderer_host/input/tap_suppression_controller.cc b/content/browser/renderer_host/input/tap_suppression_controller.cc index 78b3a07..008feb2 100644 --- a/content/browser/renderer_host/input/tap_suppression_controller.cc +++ b/content/browser/renderer_host/input/tap_suppression_controller.cc
@@ -7,13 +7,27 @@ #include "base/logging.h" #include "base/trace_event/trace_event.h" #include "content/browser/renderer_host/input/tap_suppression_controller_client.h" +#include "ui/events/gesture_detection/gesture_configuration.h" namespace content { +// The tapDownTimer is used to avoid waiting for an arbitrarily late fling +// cancel ack. While the timer is running, if a fling cancel ack with +// |Processed = false| arrives, all stashed gesture events get forwarded. If +// the timer expires, the controller forwards stashed GestureTapDown only, and +// drops the rest of the stashed events. The timer delay should be large enough +// for a GestureLongPress to get stashed and forwarded if needed. It's still +// possible for a GestureLongPress to arrive after the timer expiration. In +// this case, it will be suppressed if the controller is in SUPPRESSING_TAPS +// state. + TapSuppressionController::Config::Config() : enabled(false), - max_cancel_to_down_time(base::TimeDelta::FromMilliseconds(180)), - max_tap_gap_time(base::TimeDelta::FromMilliseconds(500)) { + max_cancel_to_down_time(base::TimeDelta::FromMilliseconds(180)) { + ui::GestureConfiguration* gesture_config = + ui::GestureConfiguration::GetInstance(); + max_tap_gap_time = base::TimeDelta::FromMilliseconds( + gesture_config->long_press_time_in_ms() + 50); } TapSuppressionController::TapSuppressionController( @@ -34,6 +48,7 @@ case NOTHING: case GFC_IN_PROGRESS: case LAST_CANCEL_STOPPED_FLING: + case SUPPRESSING_TAPS: state_ = GFC_IN_PROGRESS; break; case TAP_DOWN_STASHED: @@ -46,6 +61,7 @@ switch (state_) { case DISABLED: case NOTHING: + case SUPPRESSING_TAPS: break; case GFC_IN_PROGRESS: if (processed) @@ -57,7 +73,9 @@ TRACE_EVENT0("browser", "TapSuppressionController::GestureFlingCancelAck"); StopTapDownTimer(); - client_->ForwardStashedTapDown(); + // If the fling cancel is not processed, forward all stashed + // gesture events. + client_->ForwardStashedGestureEvents(); state_ = NOTHING; } // Else waiting for the timer to release the stashed tap down. break; @@ -89,6 +107,10 @@ state_ = NOTHING; return false; } + // Stop suppressing tap end events. + case SUPPRESSING_TAPS: + state_ = NOTHING; + return false; } NOTREACHED() << "Invalid state"; return false; @@ -101,12 +123,17 @@ case GFC_IN_PROGRESS: return false; case TAP_DOWN_STASHED: - state_ = NOTHING; + // A tap cancel happens before long tap and two finger tap events. To + // drop the latter events as well as the tap cancel, change the state + // to "SUPPRESSING_TAPS" when the stashed tap down is dropped. + state_ = SUPPRESSING_TAPS; StopTapDownTimer(); client_->DropStashedTapDown(); return true; case LAST_CANCEL_STOPPED_FLING: NOTREACHED() << "Invalid tap end on LAST_CANCEL_STOPPED_FLING state"; + case SUPPRESSING_TAPS: + return true; } return false; } @@ -128,6 +155,7 @@ switch (state_) { case DISABLED: case NOTHING: + case SUPPRESSING_TAPS: NOTREACHED() << "Timer fired on invalid state."; break; case GFC_IN_PROGRESS: @@ -138,8 +166,10 @@ case TAP_DOWN_STASHED: TRACE_EVENT0("browser", "TapSuppressionController::TapDownTimerExpired"); + // When the timer expires, only forward the stashed tap down event, and + // drop other stashed gesture events (show press or long press). client_->ForwardStashedTapDown(); - state_ = NOTHING; + state_ = SUPPRESSING_TAPS; break; } }
diff --git a/content/browser/renderer_host/input/tap_suppression_controller.h b/content/browser/renderer_host/input/tap_suppression_controller.h index dc0def5..b238258b 100644 --- a/content/browser/renderer_host/input/tap_suppression_controller.h +++ b/content/browser/renderer_host/input/tap_suppression_controller.h
@@ -70,6 +70,12 @@ GFC_IN_PROGRESS, TAP_DOWN_STASHED, LAST_CANCEL_STOPPED_FLING, + // When the stashed TapDown event is dropped or forwarded due to tap down + // timer expiration, the controller enters the SUPPRESSING_TAPS state. + // This state shows that the controller will suppress LongTap, + // TwoFingerTap, and TapCancel gesture events until the next tapDown event + // arrives. + SUPPRESSING_TAPS, }; TapSuppressionControllerClient* client_;
diff --git a/content/browser/renderer_host/input/tap_suppression_controller_client.h b/content/browser/renderer_host/input/tap_suppression_controller_client.h index d55613c9..0b917a6 100644 --- a/content/browser/renderer_host/input/tap_suppression_controller_client.h +++ b/content/browser/renderer_host/input/tap_suppression_controller_client.h
@@ -18,9 +18,14 @@ // Called whenever the deferred tap down (if saved) should be dropped totally. virtual void DropStashedTapDown() = 0; - // Called whenever the deferred tap down (if saved) should be forwarded to the - // renderer. The tap down should go back to normal path it was - // on before being deferred. + // Called whenever the deferred tap down and other gesture events (if saved) + // should be forwarded to the renderer. The tap down (and possibly other + // gesture events) should go back to normal path they were on before being + // deferred. + virtual void ForwardStashedGestureEvents() = 0; + + // Called whenever only the deferred tap down (if saved) should be forwarded + // to the renderer. Other saved gesture events will be dropped. virtual void ForwardStashedTapDown() = 0; protected:
diff --git a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc index 3dd0834..195a4962 100644 --- a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc +++ b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
@@ -22,6 +22,7 @@ using TapSuppressionController::GFC_IN_PROGRESS; using TapSuppressionController::TAP_DOWN_STASHED; using TapSuppressionController::LAST_CANCEL_STOPPED_FLING; + using TapSuppressionController::SUPPRESSING_TAPS; enum Action { NONE = 0, @@ -104,6 +105,10 @@ // TapSuppressionControllerClient implementation void DropStashedTapDown() override { last_actions_ |= TAP_DOWN_DROPPED; } + void ForwardStashedGestureEvents() override { + last_actions_ |= STASHED_TAP_DOWN_FORWARDED; + } + void ForwardStashedTapDown() override { last_actions_ |= STASHED_TAP_DOWN_FORWARDED; } @@ -178,7 +183,7 @@ EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | MockTapSuppressionController::TAP_DOWN_DROPPED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -219,7 +224,7 @@ EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | MockTapSuppressionController::TAP_DOWN_DROPPED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -252,14 +257,16 @@ tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13)); EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); - // Send TapUp. This TapUp should not be suppressed. + // Send TapUp. This TapUp should be still suppressed. + // LongTap should be suppressed when the previously suppressed TapDown is + // forwarded because of the timer expiration. tap_suppression_controller_->SendTapUp(); - EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, + EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -300,7 +307,7 @@ EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | MockTapSuppressionController::TAP_DOWN_DROPPED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -406,7 +413,7 @@ EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | MockTapSuppressionController::TAP_DOWN_DROPPED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -447,7 +454,7 @@ EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | MockTapSuppressionController::TAP_DOWN_DROPPED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); } @@ -480,14 +487,16 @@ tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13)); EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); - // Send TapUp. This TapUp should not be suppressed. + // Send TapUp. This TapUp should be still suppressed. + // LongTap should be suppressed when the previously suppressed TapDown is + // forwarded because of timer expiration. tap_suppression_controller_->SendTapUp(); - EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, + EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED, tap_suppression_controller_->last_actions()); - EXPECT_EQ(MockTapSuppressionController::NOTHING, + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS, tap_suppression_controller_->state()); }
diff --git a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc index d309742..dac3af2 100644 --- a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc +++ b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc
@@ -37,6 +37,12 @@ void TouchpadTapSuppressionController::DropStashedTapDown() { } +void TouchpadTapSuppressionController::ForwardStashedGestureEvents() { + // Mouse downs are not handled by gesture event filter; so, they are + // immediately forwarded to the renderer. + client_->SendMouseEventImmediately(stashed_mouse_down_); +} + void TouchpadTapSuppressionController::ForwardStashedTapDown() { // Mouse downs are not handled by gesture event filter; so, they are // immediately forwarded to the renderer.
diff --git a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h index 1934ad6..88b08058 100644 --- a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h +++ b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
@@ -54,6 +54,7 @@ // TapSuppressionControllerClient implementation. void DropStashedTapDown() override; + void ForwardStashedGestureEvents() override; void ForwardStashedTapDown() override; TouchpadTapSuppressionControllerClient* client_;
diff --git a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc index a5ffc01..45d5212 100644 --- a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc +++ b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc
@@ -44,12 +44,24 @@ stashed_show_press_.reset(new GestureEventWithLatencyInfo(event)); return true; + case WebInputEvent::GestureLongPress: + // It is possible that a GestureLongPress arrives after tapDownTimer + // expiration, in this case it should still get filtered if the + // controller suppresses the tap end events. + if (!stashed_tap_down_) + return controller_.ShouldSuppressTapEnd(); + + stashed_long_press_.reset(new GestureEventWithLatencyInfo(event)); + return true; + case WebInputEvent::GestureTapUnconfirmed: return !!stashed_tap_down_; case WebInputEvent::GestureTapCancel: case WebInputEvent::GestureTap: case WebInputEvent::GestureDoubleTap: + case WebInputEvent::GestureLongTap: + case WebInputEvent::GestureTwoFingerTap: return controller_.ShouldSuppressTapEnd(); default: @@ -61,15 +73,27 @@ void TouchscreenTapSuppressionController::DropStashedTapDown() { stashed_tap_down_.reset(); stashed_show_press_.reset(); + stashed_long_press_.reset(); +} + +void TouchscreenTapSuppressionController::ForwardStashedGestureEvents() { + DCHECK(stashed_tap_down_); + ScopedGestureEvent tap_down = std::move(stashed_tap_down_); + ScopedGestureEvent show_press = std::move(stashed_show_press_); + ScopedGestureEvent long_press = std::move(stashed_long_press_); + gesture_event_queue_->ForwardGestureEvent(*tap_down); + if (show_press) + gesture_event_queue_->ForwardGestureEvent(*show_press); + if (long_press) + gesture_event_queue_->ForwardGestureEvent(*long_press); } void TouchscreenTapSuppressionController::ForwardStashedTapDown() { DCHECK(stashed_tap_down_); ScopedGestureEvent tap_down = std::move(stashed_tap_down_); - ScopedGestureEvent show_press = std::move(stashed_show_press_); gesture_event_queue_->ForwardGestureEvent(*tap_down); - if (show_press) - gesture_event_queue_->ForwardGestureEvent(*show_press); + stashed_show_press_.reset(); + stashed_long_press_.reset(); } } // namespace content
diff --git a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h index 3e7623e..c7a3039 100644 --- a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h +++ b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
@@ -40,6 +40,7 @@ private: // TapSuppressionControllerClient implementation. void DropStashedTapDown() override; + void ForwardStashedGestureEvents() override; void ForwardStashedTapDown() override; GestureEventQueue* gesture_event_queue_; @@ -47,6 +48,7 @@ typedef std::unique_ptr<GestureEventWithLatencyInfo> ScopedGestureEvent; ScopedGestureEvent stashed_tap_down_; ScopedGestureEvent stashed_show_press_; + ScopedGestureEvent stashed_long_press_; // The core controller of tap suppression. TapSuppressionController controller_;
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.cc b/content/browser/renderer_host/media/audio_output_authorization_handler.cc index 9c8a1f4..56f27ea1 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler.cc
@@ -82,8 +82,8 @@ DCHECK_CURRENTLY_ON(BrowserThread::IO); if (!IsValidDeviceId(device_id)) { - bad_message::ReceivedBadMessage(render_process_id_, - bad_message::AOAH_NONSENSE_DEVICE_ID); + cb.Run(media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, false, + media::AudioParameters::UnavailableDeviceParams(), std::string()); return; }
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc index 9b5c54d..e0e42c5 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -260,8 +260,7 @@ SyncWithAllThreads(); } -TEST_F(AudioOutputAuthorizationHandlerTest, - AuthorizeInvalidDeviceId_BadMessage) { +TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeInvalidDeviceId_NotFound) { std::unique_ptr<TestBrowserContext> context = base::MakeUnique<TestBrowserContext>(); std::unique_ptr<MockRenderProcessHost> RPH = @@ -272,7 +271,10 @@ GetAudioManager(), GetMediaStreamManager(), RPH->GetID(), kSalt); EXPECT_EQ(RPH->bad_msg_count(), 0); - EXPECT_CALL(listener, MockAuthorizationCallback(_, _, _, _)).Times(0); + EXPECT_CALL(listener, + MockAuthorizationCallback( + media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, _, _, _)) + .Times(1); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -281,7 +283,9 @@ kInvalidDeviceId, SecurityOrigin(), listener.GetCallback()))); SyncWithAllThreads(); - EXPECT_EQ(RPH->bad_msg_count(), 1); + // It is possible to request an invalid device id from JS APIs, + // so we don't want to crash the renderer for this. + EXPECT_EQ(RPH->bad_msg_count(), 0); BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); SyncWithAllThreads(); RPH.reset();
diff --git a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc index 04b7209b..88dc9d37 100644 --- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc +++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
@@ -609,9 +609,8 @@ } TEST_F(AudioRendererHostTest, CreateInvalidDevice) { - Create(kInvalidDeviceId, url::Origin(GURL(kSecurityOrigin)), true, false); + Create(kInvalidDeviceId, url::Origin(GURL(kSecurityOrigin)), true, true); Close(); - AssertBadMsgReported(); } TEST_F(AudioRendererHostTest, CreateFailsForInvalidRenderFrame) {
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index dd33dfe..6141da6 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -2153,8 +2153,6 @@ const NativeWebKeyboardEventWithLatencyInfo& event, InputEventAckState ack_result) { latency_tracker_.OnInputEventAck(event.event, &event.latency, ack_result); - for (auto& input_event_observer : input_event_observers_) - input_event_observer.OnInputEventAck(event.event); const bool processed = (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result); @@ -2175,8 +2173,6 @@ InputEventAckState ack_result) { latency_tracker_.OnInputEventAck(mouse_event.event, &mouse_event.latency, ack_result); - for (auto& input_event_observer : input_event_observers_) - input_event_observer.OnInputEventAck(mouse_event.event); } void RenderWidgetHostImpl::OnWheelEventAck( @@ -2184,8 +2180,6 @@ InputEventAckState ack_result) { latency_tracker_.OnInputEventAck(wheel_event.event, &wheel_event.latency, ack_result); - for (auto& input_event_observer : input_event_observers_) - input_event_observer.OnInputEventAck(wheel_event.event); if (!is_hidden() && view_) { if (ack_result != INPUT_EVENT_ACK_STATE_CONSUMED && @@ -2200,8 +2194,6 @@ const GestureEventWithLatencyInfo& event, InputEventAckState ack_result) { latency_tracker_.OnInputEventAck(event.event, &event.latency, ack_result); - for (auto& input_event_observer : input_event_observers_) - input_event_observer.OnInputEventAck(event.event); if (view_) view_->GestureEventAck(event.event, ack_result); @@ -2211,8 +2203,6 @@ const TouchEventWithLatencyInfo& event, InputEventAckState ack_result) { latency_tracker_.OnInputEventAck(event.event, &event.latency, ack_result); - for (auto& input_event_observer : input_event_observers_) - input_event_observer.OnInputEventAck(event.event); if (touch_emulator_ && touch_emulator_->HandleTouchEventAck(event.event, ack_result)) {
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java index 376f319..9a9f212 100644 --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
@@ -6,7 +6,6 @@ import android.app.Service; import android.content.Intent; -import android.os.Bundle; import android.os.IBinder; import org.chromium.base.annotations.JNINamespace; @@ -48,20 +47,4 @@ stopSelf(); return mChildProcessServiceImpl.bind(intent, -1); } - - /** - * Helper method to initialize the params from intent. - * @param intent Intent to launch the service. - */ - protected void initializeParams(Intent intent) { - mChildProcessServiceImpl.initializeParams(intent); - } - - /** - * Helper method to get the information about the service from a given bundle. - * @param bundle Bundle that contains the information to start the service. - */ - protected void getServiceInfo(Bundle bundle) { - mChildProcessServiceImpl.getServiceInfo(bundle); - } }
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java index a3748f8..40d63878 100644 --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java
@@ -70,8 +70,6 @@ private static AtomicReference<Context> sContext = new AtomicReference<>(null); private boolean mLibraryInitialized = false; - // Becomes true once the service is bound. Access must synchronize around mMainThread. - private boolean mIsBound = false; /** * If >= 0 enables "validation of caller of {@link mBinder}'s methods". A RemoteException @@ -164,11 +162,7 @@ Linker linker = null; boolean requestedSharedRelro = false; if (Linker.isUsed()) { - synchronized (mMainThread) { - while (!mIsBound) { - mMainThread.wait(); - } - } + assert mLinkerParams != null; linker = getLinker(); if (mLinkerParams.mWaitForSharedRelro) { requestedSharedRelro = true; @@ -282,28 +276,24 @@ return mBinder; } - void initializeParams(Intent intent) { + private void initializeParams(Intent intent) { synchronized (mMainThread) { - mCommandLineParams = - intent.getStringArrayExtra(ChildProcessConstants.EXTRA_COMMAND_LINE); // mLinkerParams is never used if Linker.isUsed() returns false. // See onCreate(). mLinkerParams = new ChromiumLinkerParams(intent); mLibraryProcessType = ChildProcessCreationParams.getLibraryProcessType(intent); - mIsBound = true; mMainThread.notifyAll(); } } - void getServiceInfo(Bundle bundle) { + private void getServiceInfo(Bundle bundle) { // Required to unparcel FileDescriptorInfo. bundle.setClassLoader(mHostClassLoader); synchronized (mMainThread) { - // Allow the command line to be set via bind() intent or setupConnection, but - // the FD can only be transferred here. if (mCommandLineParams == null) { mCommandLineParams = bundle.getStringArray(ChildProcessConstants.EXTRA_COMMAND_LINE); + mMainThread.notifyAll(); } // We must have received the command line by now assert mCommandLineParams != null;
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java index 99032d4..4eb35a5 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java
@@ -130,9 +130,9 @@ try { TraceEvent.begin("ChildProcessConnectionImpl.ChildServiceConnection.bind"); final Intent intent = createServiceBindIntent(); - if (commandLine != null) { - intent.putExtra(ChildProcessConstants.EXTRA_COMMAND_LINE, commandLine); - } + // Note, the intent may be saved and re-used by Android for re-launching the + // child service. Do not pass data that is different for each child; command + // line arguments for example. if (mLinkerParams != null) { mLinkerParams.addIntentExtras(intent); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java index b9437f0..9410271 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java
@@ -44,7 +44,9 @@ initialSelection = selected[0]; } mDropdownPopupWindow.setInitialSelection(initialSelection); - mDropdownPopupWindow.setAdapter(new DropdownAdapter(mContext, items, null)); + mDropdownPopupWindow.setAdapter(new DropdownAdapter( + mContext, items, null /* separators */, null /* backgroundColor */, + null /* dividerColor */, null /* dropdownItemHeight */)); mDropdownPopupWindow.setRtl(rightAligned); mDropdownPopupWindow.setOnDismissListener( new PopupWindow.OnDismissListener() {
diff --git a/content/public/browser/render_widget_host.h b/content/public/browser/render_widget_host.h index 7005ece92..0cda573d 100644 --- a/content/public/browser/render_widget_host.h +++ b/content/public/browser/render_widget_host.h
@@ -243,13 +243,12 @@ virtual void AddMouseEventCallback(const MouseEventCallback& callback) = 0; virtual void RemoveMouseEventCallback(const MouseEventCallback& callback) = 0; - // Observer for WebInputEvents. + // Observer for WebInputEvents (but not input event acks). class InputEventObserver { public: virtual ~InputEventObserver() {} - virtual void OnInputEvent(const blink::WebInputEvent&) {}; - virtual void OnInputEventAck(const blink::WebInputEvent&) {}; + virtual void OnInputEvent(const blink::WebInputEvent&) = 0; }; // Add/remove an input event observer.
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index a39b5f8..0bac669 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc
@@ -1531,13 +1531,9 @@ return false; } -bool InputMsgWatcher::HasReceivedAck() const { - return ack_result_ != INPUT_EVENT_ACK_STATE_UNKNOWN; -} - uint32_t InputMsgWatcher::WaitForAck() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (HasReceivedAck()) + if (ack_result_ != INPUT_EVENT_ACK_STATE_UNKNOWN) return ack_result_; base::RunLoop run_loop; base::AutoReset<base::Closure> reset_quit(&quit_, run_loop.QuitClosure());
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h index 1d05389..e39416c 100644 --- a/content/public/test/browser_test_utils.h +++ b/content/public/test/browser_test_utils.h
@@ -556,8 +556,6 @@ InputMsgWatcher(RenderWidgetHost* render_widget_host, blink::WebInputEvent::Type type); - bool HasReceivedAck() const; - // Wait until ack message occurs, returning the ack result from // the message. uint32_t WaitForAck();
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index d3d457c..4012f0f 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -1811,20 +1811,20 @@ namespace { static size_t GetMallocUsage() { - // Only checks the default process heap. - HANDLE heap = ::GetProcessHeap(); - if (heap == NULL) + // Iterate through whichever heap the CRT is using. + HANDLE crt_heap = reinterpret_cast<HANDLE>(_get_heap_handle()); + if (crt_heap == NULL) return 0; - if (!::HeapLock(heap)) + if (!::HeapLock(crt_heap)) return 0 ; size_t malloc_usage = 0; PROCESS_HEAP_ENTRY heap_entry; heap_entry.lpData = NULL; - while (::HeapWalk(heap, &heap_entry) != 0) { + while (::HeapWalk(crt_heap, &heap_entry) != 0) { if ((heap_entry.wFlags & PROCESS_HEAP_ENTRY_BUSY) != 0) malloc_usage += heap_entry.cbData; } - ::HeapUnlock(heap); + ::HeapUnlock(crt_heap); return malloc_usage; }
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index a086f7b..e47f7f6 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -1518,7 +1518,6 @@ return; ImeEventGuard guard(this); blink::WebInputMethodController* controller = GetInputMethodController(); - DCHECK(controller); if (!controller || !controller->setComposition( text, WebVector<WebCompositionUnderline>(underlines), selection_start,
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py index 1ae945b..e91fd7d 100755 --- a/content/test/gpu/generate_buildbot_json.py +++ b/content/test/gpu/generate_buildbot_json.py
@@ -765,10 +765,12 @@ # added. 'build_configs': ['Release', 'Release_x64'], 'swarming_dimension_sets': [ + # NVIDIA Win 7 { 'gpu': '10de:104a', 'os': 'Windows-2008ServerR2-SP1' }, + # AMD Win 7 { 'gpu': '1002:6613', 'os': 'Windows-2008ServerR2-SP1' @@ -796,6 +798,7 @@ # trybots) for the time being, at least until more capacity is added. 'build_configs': ['Release', 'Release_x64'], 'swarming_dimension_sets': [ + # NVIDIA Linux { 'gpu': '10de:104a', 'os': 'Linux' @@ -823,6 +826,7 @@ # Run on Nexus 5X swarmed bots. 'build_configs': ['android-chromium'], 'swarming_dimension_sets': [ + # Nexus 5X { 'device_type': 'bullhead', 'device_os': 'M', @@ -846,16 +850,21 @@ 'tester_configs': [ { 'fyi_only': True, - # TODO(jmadill): Run this on the optional tryservers. + # TODO(jmadill): Run this on ANGLE roll tryservers. 'run_on_optional': False, - # Run only on the Win7 Release NVIDIA 32-bit bots (and trybots) for the - # time being, at least until more capacity is added. - # TODO(jmadill): Run on the Win AMD R7 240 bots once they are swarmed. + # Run only on the NVIDIA and AMD Win7 bots (and trybots) for the time + # being, at least until more capacity is added. 'build_configs': ['Release'], 'swarming_dimension_sets': [ + # NVIDIA Win 7 { 'gpu': '10de:104a', 'os': 'Windows-2008ServerR2-SP1' + }, + # AMD Win 7 + { + 'gpu': '1002:6613', + 'os': 'Windows-2008ServerR2-SP1' } ], } @@ -874,12 +883,13 @@ 'tester_configs': [ { 'fyi_only': True, - # TODO(jmadill): Run this on the optional tryservers. + # TODO(jmadill): Run this on ANGLE roll tryservers. 'run_on_optional': False, # Run only on the Linux Release NVIDIA 32-bit bots (and trybots) for # the time being, at least until more capacity is added. 'build_configs': ['Release'], 'swarming_dimension_sets': [ + # NVIDIA Linux { 'gpu': '10de:104a', 'os': 'Linux'
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py index 48874a3f..e57b499 100644 --- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -44,13 +44,6 @@ self.Flaky('conformance2/query/occlusion-query.html', bug=603168) self.Fail('conformance2/glsl3/tricky-loop-conditions.html', bug=483282) - # This next one fails reliably on Linux AMD and is flaky everywhere - # else. Unfortunately, this means the expectation needs to be - # complicated to avoid collisions (and unit test failures). - self.Flaky('conformance2/misc/uninitialized-test-2.html', - ['win', 'mac', 'chromeos', 'android'], bug=671791) - self.Flaky('conformance2/misc/uninitialized-test-2.html', - ['linux', 'intel', 'nvidia'], bug=671791) self.Fail('conformance2/rendering/depth-stencil-feedback-loop.html', bug=660844) # WebGL 2.0.1 self.Fail('conformance2/rendering/rendering-sampling-feedback-loop.html',
diff --git a/extensions/renderer/request_sender.cc b/extensions/renderer/request_sender.cc index 896008d..76ed369 100644 --- a/extensions/renderer/request_sender.cc +++ b/extensions/renderer/request_sender.cc
@@ -102,7 +102,7 @@ params.request_id = request_id; params.has_callback = has_callback; params.user_gesture = - blink::WebUserGestureIndicator::isProcessingUserGesture(); + blink::WebUserGestureIndicator::isProcessingUserGestureThreadSafe(); // Set Service Worker specific params to default values. params.worker_thread_id = -1;
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn index cca31195..844a14eb 100644 --- a/gpu/BUILD.gn +++ b/gpu/BUILD.gn
@@ -402,7 +402,7 @@ libfuzzer_options = [ "max_len=16384" ] } -fuzzer_test("gpu_fuzzer_angle") { +fuzzer_test("gpu_angle_fuzzer") { sources = [ "command_buffer/tests/fuzzer_main.cc", ]
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_stream_texture_matrix.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_stream_texture_matrix.txt index 1744f895..62626cf8 100644 --- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_stream_texture_matrix.txt +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_stream_texture_matrix.txt
@@ -23,6 +23,8 @@ of a stream texture. Intended for use with Android SurfaceTexture, which doesn't provide the value until the front buffer is latched. + Also allows hints about whether an image could be promoted to an overlay. + New Procedures and Functions The command @@ -44,6 +46,29 @@ <transform> Provides an additional transform matrix that is applied prior to the the stream texture transformation matrix. + The command + + void OverlayPromotionHintCHROMIUM( + GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) + + Provides a hint about whether the GLImage bound to texture could be promoted + to an overlay or not. + + <texture> is the texture id, which should have a stream texture image bound + to it. + <promotion_hint> indicates whether the GLImage could be promoted. + <display_x> is the x coordinate of the origin of the overlay if the image + could be promoted. Otherwise, it is 0. + <display_y> is the y coordinate of the origin of the overlay if the image + could be promoted. Otherwise, it is 0. + + + If <texture> is not a valid texture, or if it doesn't have a stream texture + image bound to it, then no action is taken. + Errors None.
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index ad54560b..4a703a8 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -382,6 +382,8 @@ #define glGetFragDataIndexEXT GLES2_GET_FUN(GetFragDataIndexEXT) #define glUniformMatrix4fvStreamTextureMatrixCHROMIUM \ GLES2_GET_FUN(UniformMatrix4fvStreamTextureMatrixCHROMIUM) +#define glOverlayPromotionHintCHROMIUM \ + GLES2_GET_FUN(OverlayPromotionHintCHROMIUM) #define glSwapBuffersWithDamageCHROMIUM \ GLES2_GET_FUN(SwapBuffersWithDamageCHROMIUM)
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 2cb8a76..dab6327 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -3480,6 +3480,12 @@ 'result': ['uint32_t'], 'trace_level': 1, }, + 'OverlayPromotionHintCHROMIUM': { + 'decoder_func': 'DoOverlayPromotionHintCHROMIUM', + 'extension': "CHROMIUM_uniform_stream_texture_matrix", + 'unit_test': False, + 'client_test': False, + }, 'PauseTransformFeedback': { 'decoder_func': 'DoPauseTransformFeedback', 'unit_test': False,
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index 934fe97..ebf22172 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1709,6 +1709,13 @@ gles2::GetGLContext()->UniformMatrix4fvStreamTextureMatrixCHROMIUM( location, transpose, transform); } +void GL_APIENTRY GLES2OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + gles2::GetGLContext()->OverlayPromotionHintCHROMIUM(texture, promotion_hint, + display_x, display_y); +} void GL_APIENTRY GLES2SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width, @@ -3015,6 +3022,10 @@ glUniformMatrix4fvStreamTextureMatrixCHROMIUM), }, { + "glOverlayPromotionHintCHROMIUM", + reinterpret_cast<GLES2FunctionPointer>(glOverlayPromotionHintCHROMIUM), + }, + { "glSwapBuffersWithDamageCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(glSwapBuffersWithDamageCHROMIUM), },
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index 5cb4479..c893a28 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -3166,6 +3166,17 @@ } } +void OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + gles2::cmds::OverlayPromotionHintCHROMIUM* c = + GetCmdSpace<gles2::cmds::OverlayPromotionHintCHROMIUM>(); + if (c) { + c->Init(texture, promotion_hint, display_x, display_y); + } +} + void SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index 0635ca1e..23efadd 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -1199,6 +1199,11 @@ GLboolean transpose, const GLfloat* transform) override; +void OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) override; + void SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h index 7f55484..4dfde269 100644 --- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -3488,4 +3488,18 @@ CheckGLError(); } +void GLES2Implementation::OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glOverlayPromotionHintCHROMIUM(" + << texture << ", " + << GLES2Util::GetStringBool(promotion_hint) << ", " + << display_x << ", " << display_y << ")"); + helper_->OverlayPromotionHintCHROMIUM(texture, promotion_hint, display_x, + display_y); + CheckGLError(); +} + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index 0055e6c..4f57e64 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -886,6 +886,10 @@ GLint location, GLboolean transpose, const GLfloat* transform) = 0; +virtual void OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) = 0; virtual void SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index 75af490..6851bf9 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -860,6 +860,10 @@ GLint location, GLboolean transpose, const GLfloat* transform) override; +void OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) override; void SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index ce62d91..bc012cd 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -1163,6 +1163,11 @@ GLint /* location */, GLboolean /* transpose */, const GLfloat* /* transform */) {} +void GLES2InterfaceStub::OverlayPromotionHintCHROMIUM( + GLuint /* texture */, + GLboolean /* promotion_hint */, + GLint /* display_x */, + GLint /* display_y */) {} void GLES2InterfaceStub::SwapBuffersWithDamageCHROMIUM(GLint /* x */, GLint /* y */, GLint /* width */,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index 9277de1..f69cddc 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -860,6 +860,10 @@ GLint location, GLboolean transpose, const GLfloat* transform) override; +void OverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) override; void SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index 2d08ece..abeb69d 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -2488,6 +2488,17 @@ transform); } +void GLES2TraceImplementation::OverlayPromotionHintCHROMIUM( + GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", + "GLES2Trace::OverlayPromotionHintCHROMIUM"); + gl_->OverlayPromotionHintCHROMIUM(texture, promotion_hint, display_x, + display_y); +} + void GLES2TraceImplementation::SwapBuffersWithDamageCHROMIUM(GLint x, GLint y, GLint width,
diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index 1f579fdb..9372810 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt
@@ -361,5 +361,6 @@ // Extension CHROMIUM_stream_texture_matrix GL_APICALL void GL_APIENTRY glUniformMatrix4fvStreamTextureMatrixCHROMIUM (GLintUniformLocation location, GLbooleanFalseOnly transpose, const GLfloat* transform); +GL_APICALL void GL_APIENTRY glOverlayPromotionHintCHROMIUM (GLidBindTexture texture, GLboolean promotion_hint, GLint display_x, GLint display_y); GL_APICALL void GL_APIENTRY glSwapBuffersWithDamageCHROMIUM (GLint x, GLint y, GLint width, GLint height);
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index ff02094..8383d51 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -15553,6 +15553,60 @@ "offset of UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate " "transpose should be 8"); +struct OverlayPromotionHintCHROMIUM { + typedef OverlayPromotionHintCHROMIUM ValueType; + static const CommandId kCmdId = kOverlayPromotionHintCHROMIUM; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize() { + return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { header.SetCmd<ValueType>(); } + + void Init(GLuint _texture, + GLboolean _promotion_hint, + GLint _display_x, + GLint _display_y) { + SetHeader(); + texture = _texture; + promotion_hint = _promotion_hint; + display_x = _display_x; + display_y = _display_y; + } + + void* Set(void* cmd, + GLuint _texture, + GLboolean _promotion_hint, + GLint _display_x, + GLint _display_y) { + static_cast<ValueType*>(cmd)->Init(_texture, _promotion_hint, _display_x, + _display_y); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32_t texture; + uint32_t promotion_hint; + int32_t display_x; + int32_t display_y; +}; + +static_assert(sizeof(OverlayPromotionHintCHROMIUM) == 20, + "size of OverlayPromotionHintCHROMIUM should be 20"); +static_assert(offsetof(OverlayPromotionHintCHROMIUM, header) == 0, + "offset of OverlayPromotionHintCHROMIUM header should be 0"); +static_assert(offsetof(OverlayPromotionHintCHROMIUM, texture) == 4, + "offset of OverlayPromotionHintCHROMIUM texture should be 4"); +static_assert( + offsetof(OverlayPromotionHintCHROMIUM, promotion_hint) == 8, + "offset of OverlayPromotionHintCHROMIUM promotion_hint should be 8"); +static_assert(offsetof(OverlayPromotionHintCHROMIUM, display_x) == 12, + "offset of OverlayPromotionHintCHROMIUM display_x should be 12"); +static_assert(offsetof(OverlayPromotionHintCHROMIUM, display_y) == 16, + "offset of OverlayPromotionHintCHROMIUM display_y should be 16"); + struct SwapBuffersWithDamageCHROMIUM { typedef SwapBuffersWithDamageCHROMIUM ValueType; static const CommandId kCmdId = kSwapBuffersWithDamageCHROMIUM;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index 68f1dce..a44c706 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -5214,6 +5214,22 @@ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data))); } +TEST_F(GLES2FormatTest, OverlayPromotionHintCHROMIUM) { + cmds::OverlayPromotionHintCHROMIUM& cmd = + *GetBufferAs<cmds::OverlayPromotionHintCHROMIUM>(); + void* next_cmd = + cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLboolean>(12), + static_cast<GLint>(13), static_cast<GLint>(14)); + EXPECT_EQ(static_cast<uint32_t>(cmds::OverlayPromotionHintCHROMIUM::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<GLuint>(11), cmd.texture); + EXPECT_EQ(static_cast<GLboolean>(12), cmd.promotion_hint); + EXPECT_EQ(static_cast<GLint>(13), cmd.display_x); + EXPECT_EQ(static_cast<GLint>(14), cmd.display_y); + CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); +} + TEST_F(GLES2FormatTest, SwapBuffersWithDamageCHROMIUM) { cmds::SwapBuffersWithDamageCHROMIUM& cmd = *GetBufferAs<cmds::SwapBuffersWithDamageCHROMIUM>();
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index a69e5e9..3c92dc4 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -328,7 +328,8 @@ OP(BindFragDataLocationEXTBucket) /* 569 */ \ OP(GetFragDataIndexEXT) /* 570 */ \ OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate) /* 571 */ \ - OP(SwapBuffersWithDamageCHROMIUM) /* 572 */ + OP(OverlayPromotionHintCHROMIUM) /* 572 */ \ + OP(SwapBuffersWithDamageCHROMIUM) /* 573 */ enum CommandId { kOneBeforeStartPoint =
diff --git a/gpu/command_buffer/service/gl_stream_texture_image.h b/gpu/command_buffer/service/gl_stream_texture_image.h index daaa158e..5ab4f75 100644 --- a/gpu/command_buffer/service/gl_stream_texture_image.h +++ b/gpu/command_buffer/service/gl_stream_texture_image.h
@@ -25,6 +25,10 @@ void Flush() override {} + virtual void NotifyPromotionHint(bool promotion_hint, + int display_x, + int display_y) {} + protected: ~GLStreamTextureImage() override {}
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 1746557..ba6b5ef 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1672,6 +1672,12 @@ // Wrapper for glLinkProgram void DoLinkProgram(GLuint program); + // Wrapper for glOverlayPromotionHintCHROMIUIM + void DoOverlayPromotionHintCHROMIUM(GLuint client_id, + GLboolean promotion_hint, + GLint display_x, + GLint display_y); + // Wrapper for glReadBuffer void DoReadBuffer(GLenum src); @@ -8556,6 +8562,31 @@ ExitCommandProcessingEarly(); } +void GLES2DecoderImpl::DoOverlayPromotionHintCHROMIUM(GLuint client_id, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + if (client_id == 0) + return; + + TextureRef* texture_ref = GetTexture(client_id); + if (!texture_ref) { + LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glOverlayPromotionHintCHROMIUM", + "invalid texture id"); + return; + } + GLStreamTextureImage* image = + texture_ref->texture()->GetLevelStreamTextureImage( + GL_TEXTURE_EXTERNAL_OES, 0); + if (!image) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glOverlayPromotionHintCHROMIUM", + "texture has no StreamTextureImage"); + return; + } + + image->NotifyPromotionHint(promotion_hint != GL_FALSE, display_x, display_y); +} + void GLES2DecoderImpl::DoReadBuffer(GLenum src) { Framebuffer* framebuffer = GetFramebufferInfoForTarget(GL_READ_FRAMEBUFFER); if (framebuffer) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 1f961d1..2d8c7a4 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -5107,6 +5107,20 @@ return error::kNoError; } +error::Error GLES2DecoderImpl::HandleOverlayPromotionHintCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + const volatile gles2::cmds::OverlayPromotionHintCHROMIUM& c = + *static_cast<const volatile gles2::cmds::OverlayPromotionHintCHROMIUM*>( + cmd_data); + GLuint texture = c.texture; + GLboolean promotion_hint = static_cast<GLboolean>(c.promotion_hint); + GLint display_x = static_cast<GLint>(c.display_x); + GLint display_y = static_cast<GLint>(c.display_y); + DoOverlayPromotionHintCHROMIUM(texture, promotion_hint, display_x, display_y); + return error::kNoError; +} + bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { switch (cap) { case GL_BLEND:
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h index e362fde..13cc98e 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -945,3 +945,8 @@ GLint location, GLboolean transpose, const volatile GLfloat* defaultValue); + +error::Error DoOverlayPromotionHintCHROMIUM(GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc index 554200f..5686838 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -3309,5 +3309,14 @@ return error::kNoError; } +error::Error GLES2DecoderPassthroughImpl::DoOverlayPromotionHintCHROMIUM( + GLuint texture, + GLboolean promotion_hint, + GLint display_x, + GLint display_y) { + NOTIMPLEMENTED(); + return error::kNoError; +} + } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc index 6f3935fa..811f0a13 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
@@ -4130,5 +4130,23 @@ return error::kNoError; } +error::Error GLES2DecoderPassthroughImpl::HandleOverlayPromotionHintCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + const volatile gles2::cmds::OverlayPromotionHintCHROMIUM& c = + *static_cast<const volatile gles2::cmds::OverlayPromotionHintCHROMIUM*>( + cmd_data); + GLuint texture = c.texture; + GLboolean promotion_hint = static_cast<GLboolean>(c.promotion_hint); + GLint display_x = static_cast<GLint>(c.display_x); + GLint display_y = static_cast<GLint>(c.display_y); + error::Error error = DoOverlayPromotionHintCHROMIUM(texture, promotion_hint, + display_x, display_y); + if (error != error::kNoError) { + return error; + } + return error::kNoError; +} + } // namespace gles2 } // namespace gpu
diff --git a/ios/chrome/app/application_delegate/memory_warning_helper.h b/ios/chrome/app/application_delegate/memory_warning_helper.h index 1d720d3f..28a3c07 100644 --- a/ios/chrome/app/application_delegate/memory_warning_helper.h +++ b/ios/chrome/app/application_delegate/memory_warning_helper.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_RECOVERY_HELPER_H_ -#define IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_RECOVERY_HELPER_H_ +#ifndef IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_WARNING_HELPER_H_ +#define IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_WARNING_HELPER_H_ #import <Foundation/Foundation.h> @@ -24,4 +24,4 @@ @end -#endif // IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_RECOVERY_HELPER_H_ +#endif // IOS_CHROME_APP_APPLICATION_DELEGATE_MEMORY_WARNING_HELPER_H_
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h index 54d5292..b1a99a1 100644 --- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h +++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_ -#define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_ +#ifndef IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_H_ +#define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_H_ #include <memory> @@ -105,4 +105,4 @@ DISALLOW_COPY_AND_ASSIGN(ChromeBrowserStateImpl); }; -#endif // IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_ +#endif // IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_H_
diff --git a/ios/chrome/browser/browser_state_metrics/browser_state_metrics.h b/ios/chrome/browser/browser_state_metrics/browser_state_metrics.h index dc3e048..397c93c 100644 --- a/ios/chrome/browser/browser_state_metrics/browser_state_metrics.h +++ b/ios/chrome/browser/browser_state_metrics/browser_state_metrics.h
@@ -21,4 +21,4 @@ void LogNumberOfBrowserStates(ios::ChromeBrowserStateManager* manager); -#endif // IOS_CHROME_BROWSER_BROWSER_STATE_BROWSER_STATE_METRICS_H_ +#endif // IOS_CHROME_BROWSER_BROWSER_STATE_METRICS_BROWSER_STATE_METRICS_H_
diff --git a/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.h b/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.h index 3428994..14f354c 100644 --- a/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.h +++ b/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.h
@@ -57,4 +57,4 @@ DISALLOW_COPY_AND_ASSIGN(BrowsingDataCounterWrapper); }; -#endif // IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_COUNTER_WRAPPER_ +#endif // IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_COUNTER_WRAPPER_H_
diff --git a/ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h b/ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h index a535714..730b2f8 100644 --- a/ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h +++ b/ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOX_GEOLOCATION_H_ -#define IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOX_GEOLOCATION_H_ +#ifndef IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOXGEOLOCATION_H_ +#define IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOXGEOLOCATION_H_ #import <CoreLocation/CoreLocation.h> @@ -24,4 +24,4 @@ @end -#endif // IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOX_GEOLOCATION_H_ +#endif // IOS_CHROME_BROWSER_GEOLOCATION_CLLOCATION_OMNIBOXGEOLOCATION_H_
diff --git a/ios/chrome/browser/infobars/confirm_infobar_controller+protected.h b/ios/chrome/browser/infobars/confirm_infobar_controller+protected.h index 6bf3b7f..04611cc 100644 --- a/ios/chrome/browser/infobars/confirm_infobar_controller+protected.h +++ b/ios/chrome/browser/infobars/confirm_infobar_controller+protected.h
@@ -16,4 +16,4 @@ - (void)updateInfobarLabel:(UIView<InfoBarViewProtocol>*)view; @end -#endif // IOS_CHROME_BROWSER_INFOBARS_CONFIRM_INFOBAR_CONTROLLER+PROTECTED_H_ +#endif // IOS_CHROME_BROWSER_INFOBARS_CONFIRM_INFOBAR_CONTROLLER_PROTECTED_H_
diff --git a/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h b/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h index 23c3969c..6f426cc 100644 --- a/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h +++ b/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ -#define IOS_CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ +#ifndef IOS_CHROME_BROWSER_METRICS_IOS_CHROME_STABILITY_METRICS_PROVIDER_H_ +#define IOS_CHROME_BROWSER_METRICS_IOS_CHROME_STABILITY_METRICS_PROVIDER_H_ #include "base/macros.h" #include "base/metrics/user_metrics.h" @@ -43,4 +43,4 @@ DISALLOW_COPY_AND_ASSIGN(IOSChromeStabilityMetricsProvider); }; -#endif // IOS_CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ +#endif // IOS_CHROME_BROWSER_METRICS_IOS_CHROME_STABILITY_METRICS_PROVIDER_H_
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h index d8f1f66..8b1a9d4 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h +++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_PASSWORDS_IOS_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_ -#define IOS_CHROME_BROWSER_PASSWORDS_IOS_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_ +#ifndef IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_ +#define IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_ #include <memory> @@ -47,4 +47,4 @@ web::BrowserState* context) const override; }; -#endif // IOS_CHROME_BROWSER_PASSWORDS_IOS_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_ +#endif // IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_
diff --git a/ios/chrome/browser/physical_web/ios_chrome_physical_web_data_source.h b/ios/chrome/browser/physical_web/ios_chrome_physical_web_data_source.h index 76385430..40d0ebb 100644 --- a/ios/chrome/browser/physical_web/ios_chrome_physical_web_data_source.h +++ b/ios/chrome/browser/physical_web/ios_chrome_physical_web_data_source.h
@@ -44,4 +44,4 @@ DISALLOW_COPY_AND_ASSIGN(IOSChromePhysicalWebDataSource); }; -#endif // IOS_CHROME_COMMON_PHYSICAL_WEB_IOS_CHROME_PHYSICAL_WEB_DATA_SOURCE_H_ +#endif // IOS_CHROME_BROWSER_PHYSICAL_WEB_IOS_CHROME_PHYSICAL_WEB_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/share_extension/share_extension_item_receiver.h b/ios/chrome/browser/share_extension/share_extension_item_receiver.h index 5cdd2fd..409d018 100644 --- a/ios/chrome/browser/share_extension/share_extension_item_receiver.h +++ b/ios/chrome/browser/share_extension/share_extension_item_receiver.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_ -#define IOS_CHROME_BROWSER_UI_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_ +#ifndef IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_ +#define IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_ #import <Foundation/Foundation.h> @@ -32,4 +32,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_ +#endif // IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_ITEM_RECEIVER_H_
diff --git a/ios/chrome/browser/share_extension/share_extension_service.h b/ios/chrome/browser/share_extension/share_extension_service.h index f747621..1988966 100644 --- a/ios/chrome/browser/share_extension/share_extension_service.h +++ b/ios/chrome/browser/share_extension/share_extension_service.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_INTERNAL_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_ -#define IOS_INTERNAL_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_ +#ifndef IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_ +#define IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_ #include "components/bookmarks/browser/base_bookmark_model_observer.h" #include "components/keyed_service/core/keyed_service.h" @@ -44,4 +44,4 @@ DISALLOW_COPY_AND_ASSIGN(ShareExtensionService); }; -#endif // IOS_INTERNAL_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_ +#endif // IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_
diff --git a/ios/chrome/browser/signin/fake_signin_manager_builder.h b/ios/chrome/browser/signin/fake_signin_manager_builder.h index 1d06ad4..f10af9d 100644 --- a/ios/chrome/browser/signin/fake_signin_manager_builder.h +++ b/ios/chrome/browser/signin/fake_signin_manager_builder.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_H_ -#define IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_H_ +#ifndef IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_BUILDER_H_ +#define IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_BUILDER_H_ #include <memory> @@ -22,4 +22,4 @@ } // namespace ios -#endif // IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_H_ +#endif // IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_BUILDER_H_
diff --git a/ios/chrome/browser/ui/UIView+SizeClassSupport.h b/ios/chrome/browser/ui/UIView+SizeClassSupport.h index 18b52428..af53dd0e 100644 --- a/ios/chrome/browser/ui/UIView+SizeClassSupport.h +++ b/ios/chrome/browser/ui/UIView+SizeClassSupport.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_UIVIEW_SIZE_CLASS_SUPPORT_H_ -#define IOS_CHROME_BROWSER_UI_UIVIEW_SIZE_CLASS_SUPPORT_H_ +#ifndef IOS_CHROME_BROWSER_UI_UIVIEW_SIZECLASSSUPPORT_H_ +#define IOS_CHROME_BROWSER_UI_UIVIEW_SIZECLASSSUPPORT_H_ #import <UIKit/UIKit.h> @@ -26,4 +26,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_UIVIEW_SIZE_CLASS_SUPPORT_H_ +#endif // IOS_CHROME_BROWSER_UI_UIVIEW_SIZECLASSSUPPORT_H_
diff --git a/ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h b/ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h index eed6920..50c31f2 100644 --- a/ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h +++ b/ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_UIKIT_CHROME_EXECUTE_COMMAND_H_ -#define IOS_CHROME_BROWSER_UI_UIKIT_CHROME_EXECUTE_COMMAND_H_ +#ifndef IOS_CHROME_BROWSER_UI_COMMANDS_UIKIT_CHROMEEXECUTECOMMAND_H_ +#define IOS_CHROME_BROWSER_UI_COMMANDS_UIKIT_CHROMEEXECUTECOMMAND_H_ #import <UIKit/UIKit.h> @@ -20,4 +20,4 @@ - (void)chromeExecuteCommand:(id)sender; @end -#endif // IOS_CHROME_BROWSER_UI_UIKIT_CHROME_EXECUTE_COMMAND_H_ +#endif // IOS_CHROME_BROWSER_UI_COMMANDS_UIKIT_CHROMEEXECUTECOMMAND_H_
diff --git a/ios/chrome/browser/ui/rtl_geometry.h b/ios/chrome/browser/ui/rtl_geometry.h index f883c64..87cfbad 100644 --- a/ios/chrome/browser/ui/rtl_geometry.h +++ b/ios/chrome/browser/ui/rtl_geometry.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef RTL_GEOMETRY_H_ -#define RTL_GEOMETRY_H_ +#ifndef IOS_CHROME_BROWSER_UI_RTL_GEOMETRY_H_ +#define IOS_CHROME_BROWSER_UI_RTL_GEOMETRY_H_ #include <CoreGraphics/CoreGraphics.h> #import <UIKit/UIKit.h> @@ -203,4 +203,4 @@ // smaller sections of views should be determined case by case. NSLayoutFormatOptions LayoutOptionForRTLSupport(); -#endif // RTL_GEOMETRY_H_ +#endif // IOS_CHROME_BROWSER_UI_RTL_GEOMETRY_H_
diff --git a/ios/chrome/browser/ui/webui/crashes_ui.h b/ios/chrome/browser/ui/webui/crashes_ui.h index 69ac0a93..3eae058 100644 --- a/ios/chrome/browser/ui/webui/crashes_ui.h +++ b/ios/chrome/browser/ui/webui/crashes_ui.h
@@ -28,4 +28,4 @@ DISALLOW_COPY_AND_ASSIGN(CrashesUI); }; -#endif // CHROME_BROWSER_UI_WEBUI_CRASHES_UI_H_ +#endif // IOS_CHROME_BROWSER_UI_WEBUI_CRASHES_UI_H_
diff --git a/ios/chrome/browser/web/web_controller_provider_impl.h b/ios/chrome/browser/web/web_controller_provider_impl.h index 697bd56..4da9e7b 100644 --- a/ios/chrome/browser/web/web_controller_provider_impl.h +++ b/ios/chrome/browser/web/web_controller_provider_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_ -#define IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_ +#ifndef IOS_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_ +#define IOS_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_ #include <memory> @@ -33,4 +33,4 @@ bool suppresses_dialogs_; }; -#endif // IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_ +#endif // IOS_CHROME_BROWSER_WEB_WEB_CONTROLLER_PROVIDER_IMPL_H_
diff --git a/ios/crnet/CrNet.h b/ios/crnet/CrNet.h index ce93886e..4b1d4dc 100644 --- a/ios/crnet/CrNet.h +++ b/ios/crnet/CrNet.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef IOS_CRNET_CRNET_H_ +#define IOS_CRNET_CRNET_H_ + #import <Foundation/Foundation.h> // A block, that takes a request, and returns YES if the request should @@ -132,3 +135,5 @@ + (void)clearCacheWithCompletionCallback:(ClearCacheCallback)completionBlock; @end + +#endif // IOS_CRNET_CRNET_H_
diff --git a/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.h b/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.h index 7f819d0..cb18ce98 100644 --- a/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.h +++ b/ios/crnet/crnet_consumer/crnet_consumer_app_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CRNET_CONSUMER_APP_DELEGATE_ -#define CRNET_CONSUMER_APP_DELEGATE_ +#ifndef IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_APP_DELEGATE_H_ +#define IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_APP_DELEGATE_H_ #import <UIKit/UIKit.h> @@ -17,4 +17,4 @@ @end -#endif // CRNET_CONSUMER_APP_DELEGATE_ +#endif // IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_APP_DELEGATE_H_
diff --git a/ios/crnet/crnet_consumer/crnet_consumer_view_controller.h b/ios/crnet/crnet_consumer/crnet_consumer_view_controller.h index e8539e9..73f0a42a 100644 --- a/ios/crnet/crnet_consumer/crnet_consumer_view_controller.h +++ b/ios/crnet/crnet_consumer/crnet_consumer_view_controller.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CRNET_CONSUMER_VIEW_CONTROLLER_ -#define CRNET_CONSUMER_VIEW_CONTROLLER_ +#ifndef IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_VIEW_CONTROLLER_H_ +#define IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_VIEW_CONTROLLER_H_ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @@ -11,4 +11,4 @@ @interface CrNetConsumerViewController : UIViewController @end -#endif // CRNET_CONSUMER_VIEW_CONTROLLER_ +#endif // IOS_CRNET_CRNET_CONSUMER_CRNET_CONSUMER_VIEW_CONTROLLER_H_
diff --git a/ios/public/provider/chrome/browser/geolocation_updater_provider.h b/ios/public/provider/chrome/browser/geolocation_updater_provider.h index eb037ba..9f01d280 100644 --- a/ios/public/provider/chrome/browser/geolocation_updater_provider.h +++ b/ios/public/provider/chrome/browser/geolocation_updater_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_H -#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_H +#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_PROVIDER_H_ +#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_PROVIDER_H_ #import <CoreLocation/CoreLocation.h> #import <Foundation/Foundation.h> @@ -87,4 +87,4 @@ } // namespace ios -#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_H +#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_GEOLOCATION_UPDATER_PROVIDER_H_
diff --git a/ios/public/provider/chrome/browser/spotlight/spotlight_provider.h b/ios/public/provider/chrome/browser/spotlight/spotlight_provider.h index 9e9c5f20..78faeef 100644 --- a/ios/public/provider/chrome/browser/spotlight/spotlight_provider.h +++ b/ios/public/provider/chrome/browser/spotlight/spotlight_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H -#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H +#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H_ +#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H_ #import <Foundation/Foundation.h> @@ -36,4 +36,4 @@ DISALLOW_COPY_AND_ASSIGN(SpotlightProvider); }; -#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H +#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_SPOTLIGHT_PROVIDER_H_
diff --git a/ios/public/provider/chrome/browser/spotlight/test_spotlight_provider.h b/ios/public/provider/chrome/browser/spotlight/test_spotlight_provider.h index 11eff13d..67f5589 100644 --- a/ios/public/provider/chrome/browser/spotlight/test_spotlight_provider.h +++ b/ios/public/provider/chrome/browser/spotlight/test_spotlight_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H -#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H +#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H_ +#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H_ #import <Foundation/Foundation.h> @@ -19,4 +19,4 @@ NSArray* GetAdditionalKeywords() override; }; -#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H +#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SPOTLIGHT_TEST_SPOTLIGHT_PROVIDER_H_
diff --git a/ios/public/provider/chrome/browser/voice/voice_search_controller.h b/ios/public/provider/chrome/browser/voice/voice_search_controller.h index e2dfb0b..578ec47ebb 100644 --- a/ios/public/provider/chrome/browser/voice/voice_search_controller.h +++ b/ios/public/provider/chrome/browser/voice/voice_search_controller.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_IMPL_H_ -#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_IMPL_H_ +#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_H_ +#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_H_ #include "base/memory/ref_counted.h" @@ -57,4 +57,4 @@ DISALLOW_COPY_AND_ASSIGN(VoiceSearchController); }; -#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_IMPL_H_ +#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_VOICE_VOICE_SEARCH_CONTROLLER_H_
diff --git a/ios/web/public/crw_browsing_data_store.h b/ios/web/public/crw_browsing_data_store.h index 529d7e5..5dab276 100644 --- a/ios/web/public/crw_browsing_data_store.h +++ b/ios/web/public/crw_browsing_data_store.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_CRW_BROWSING_DATA_STORE_H_ -#define IOS_WEB_CRW_BROWSING_DATA_STORE_H_ +#ifndef IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_H_ +#define IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_H_ #import <Foundation/Foundation.h> @@ -94,4 +94,4 @@ @end -#endif // IOS_WEB_CRW_BROWSING_DATA_STORE_H_ +#endif // IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_H_
diff --git a/ios/web/public/crw_browsing_data_store_delegate.h b/ios/web/public/crw_browsing_data_store_delegate.h index 63fa9649..8686790 100644 --- a/ios/web/public/crw_browsing_data_store_delegate.h +++ b/ios/web/public/crw_browsing_data_store_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_CRW_BROWSING_DATA_STORE_DELEGATE_H_ -#define IOS_WEB_CRW_BROWSING_DATA_STORE_DELEGATE_H_ +#ifndef IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_DELEGATE_H_ +#define IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_DELEGATE_H_ #import <Foundation/Foundation.h> @@ -50,4 +50,4 @@ @end -#endif // IOS_WEB_CRW_BROWSING_DATA_STORE_DELEGATE_H_ +#endif // IOS_WEB_PUBLIC_CRW_BROWSING_DATA_STORE_DELEGATE_H_
diff --git a/ios/web/public/favicon_url.h b/ios/web/public/favicon_url.h index 765c292e..409f329 100644 --- a/ios/web/public/favicon_url.h +++ b/ios/web/public/favicon_url.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_PUBLIC_FAVICON_URL_ -#define IOS_WEB_PUBLIC_FAVICON_URL_ +#ifndef IOS_WEB_PUBLIC_FAVICON_URL_H_ +#define IOS_WEB_PUBLIC_FAVICON_URL_H_ #include <vector> @@ -42,4 +42,4 @@ } // namespace web -#endif // IOS_WEB_PUBLIC_FAVICON_URL_ +#endif // IOS_WEB_PUBLIC_FAVICON_URL_H_
diff --git a/ios/web/public/load_committed_details.h b/ios/web/public/load_committed_details.h index bb9a3c17..81dc914 100644 --- a/ios/web/public/load_committed_details.h +++ b/ios/web/public/load_committed_details.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_PUBLIC_WEB_LOAD_COMMITTED_DETAILS_H_ -#define IOS_WEB_PUBLIC_WEB_LOAD_COMMITTED_DETAILS_H_ +#ifndef IOS_WEB_PUBLIC_LOAD_COMMITTED_DETAILS_H_ +#define IOS_WEB_PUBLIC_LOAD_COMMITTED_DETAILS_H_ #include "url/gurl.h" @@ -32,4 +32,4 @@ } // namespace web -#endif // IOS_WEB_PUBLIC_WEB_LOAD_COMMITTED_DETAILS_H_ +#endif // IOS_WEB_PUBLIC_LOAD_COMMITTED_DETAILS_H_
diff --git a/ios/web/public/test/mock_image_data_fetcher.h b/ios/web/public/test/mock_image_data_fetcher.h index 196b68f..65e7b40 100644 --- a/ios/web/public/test/mock_image_data_fetcher.h +++ b/ios/web/public/test/mock_image_data_fetcher.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_PUBLIC_IMAGE_FETCHER_MOCK_IMAGE_DATA_FETCHER_H_ -#define IOS_WEB_PUBLIC_IMAGE_FETCHER_MOCK_IMAGE_DATA_FETCHER_H_ +#ifndef IOS_WEB_PUBLIC_TEST_MOCK_IMAGE_DATA_FETCHER_H_ +#define IOS_WEB_PUBLIC_TEST_MOCK_IMAGE_DATA_FETCHER_H_ #import "ios/web/public/image_fetcher/image_data_fetcher.h" @@ -33,4 +33,4 @@ } // namespace web -#endif // IOS_WEB_PUBLIC_IMAGE_FETCHER_MOCK_IMAGE_DATA_FETCHER_H_ +#endif // IOS_WEB_PUBLIC_TEST_MOCK_IMAGE_DATA_FETCHER_H_
diff --git a/ios/web/public/test/response_providers/string_response_provider.h b/ios/web/public/test/response_providers/string_response_provider.h index c3e985c..e5a0f9e 100644 --- a/ios/web/public/test/response_providers/string_response_provider.h +++ b/ios/web/public/test/response_providers/string_response_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_ -#define IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_ +#ifndef IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_H_ +#define IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_H_ #include <string> @@ -33,4 +33,4 @@ } // namespace web -#endif // IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_ +#endif // IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_STRING_RESPONSE_PROVIDER_H_
diff --git a/ios/web/public/test/test_web_client.h b/ios/web/public/test/test_web_client.h index 60d2a23..1514f112 100644 --- a/ios/web/public/test/test_web_client.h +++ b/ios/web/public/test/test_web_client.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef WEB_TEST_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_ -#define WEB_TEST_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_ +#ifndef IOS_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_ +#define IOS_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_ #import <Foundation/Foundation.h> @@ -58,4 +58,4 @@ } // namespace web -#endif // WEB_TEST_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_ +#endif // IOS_WEB_PUBLIC_TEST_TEST_WEB_CLIENT_H_
diff --git a/ios/web/public/test/web_js_test.h b/ios/web/public/test/web_js_test.h index 9bdb0f0..f47ceb49 100644 --- a/ios/web/public/test/web_js_test.h +++ b/ios/web/public/test/web_js_test.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_JS_TEST_H_ -#define IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_JS_TEST_H_ +#ifndef IOS_WEB_PUBLIC_TEST_WEB_JS_TEST_H_ +#define IOS_WEB_PUBLIC_TEST_WEB_JS_TEST_H_ #import <Foundation/Foundation.h> @@ -112,4 +112,4 @@ } // namespace web -#endif // IOS_INTERNAL_CHROME_BROWSER_WEB_WEB_JS_TEST_H_ +#endif // IOS_WEB_PUBLIC_TEST_WEB_JS_TEST_H_
diff --git a/ios/web/public/test/web_view_interaction_test_util.h b/ios/web/public/test/web_view_interaction_test_util.h index 4edc117..a3c54d8 100644 --- a/ios/web/public/test/web_view_interaction_test_util.h +++ b/ios/web/public/test/web_view_interaction_test_util.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef IOS_WEB_PUBLIC_TEST_WEB_VIEW_INTERACTION_TEST_UTIL_H_ +#define IOS_WEB_PUBLIC_TEST_WEB_VIEW_INTERACTION_TEST_UTIL_H_ + #import <UIKit/UIKit.h> #include <string> @@ -43,3 +46,5 @@ const std::string& form_id); } // namespace test } // namespace web + +#endif // IOS_WEB_PUBLIC_TEST_WEB_VIEW_INTERACTION_TEST_UTIL_H_
diff --git a/ios/web/test/web_int_test.h b/ios/web/test/web_int_test.h index cb6b7a2c..e2c10288 100644 --- a/ios/web/test/web_int_test.h +++ b/ios/web/test/web_int_test.h
@@ -31,4 +31,4 @@ } // namespace web -#endif // IOS_WEB_TEST_WEB_TEST_H_ +#endif // IOS_WEB_TEST_WEB_INT_TEST_H_
diff --git a/ios/web/webui/url_data_manager_ios_backend.h b/ios/web/webui/url_data_manager_ios_backend.h index e483c321..48878d6 100644 --- a/ios/web/webui/url_data_manager_ios_backend.h +++ b/ios/web/webui/url_data_manager_ios_backend.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_INTERNAL_WEB_WEBUI_URL_DATA_MANAGER_BACKEND_IOS_H_ -#define IOS_INTERNAL_WEB_WEBUI_URL_DATA_MANAGER_BACKEND_IOS_H_ +#ifndef IOS_WEB_WEBUI_URL_DATA_MANAGER_IOS_BACKEND_H_ +#define IOS_WEB_WEBUI_URL_DATA_MANAGER_IOS_BACKEND_H_ #include <map> #include <memory> @@ -98,4 +98,4 @@ } // namespace web -#endif // IOS_INTERNAL_WEB_WEBUI_URL_DATA_MANAGER_BACKEND_IOS_H_ +#endif // IOS_WEB_WEBUI_URL_DATA_MANAGER_IOS_BACKEND_H_
diff --git a/ios/web/webui/url_data_source_ios_impl.h b/ios/web/webui/url_data_source_ios_impl.h index bb9b2b1..4420489 100644 --- a/ios/web/webui/url_data_source_ios_impl.h +++ b/ios/web/webui/url_data_source_ios_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_INTERNAL_WEB_WEBUI_URL_DATA_SOURCE_IMPL_IOS_H_ -#define IOS_INTERNAL_WEB_WEBUI_URL_DATA_SOURCE_IMPL_IOS_H_ +#ifndef IOS_WEB_WEBUI_URL_DATA_SOURCE_IOS_IMPL_H_ +#define IOS_WEB_WEBUI_URL_DATA_SOURCE_IOS_IMPL_H_ #include <memory> @@ -97,4 +97,4 @@ } // namespace web -#endif // IOS_INTERNAL_WEB_WEBUI_URL_DATA_SOURCE_IMPL_IOS_H_ +#endif // IOS_WEB_WEBUI_URL_DATA_SOURCE_IOS_IMPL_H_
diff --git a/mash/simple_wm/simple_wm.cc b/mash/simple_wm/simple_wm.cc index 1fad35b4..c77d4a7 100644 --- a/mash/simple_wm/simple_wm.cc +++ b/mash/simple_wm/simple_wm.cc
@@ -4,11 +4,14 @@ #include "mash/simple_wm/simple_wm.h" +#include "base/observer_list.h" #include "base/strings/utf_string_conversions.h" #include "ui/aura/client/aura_constants.h" +#include "ui/aura/layout_manager.h" #include "ui/display/screen_base.h" #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/mojo/geometry.mojom.h" +#include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/label.h" #include "ui/views/mus/aura_init.h" #include "ui/views/mus/mus_client.h" @@ -26,6 +29,158 @@ } // namespace +class SimpleWM::WindowListModelObserver { + public: + virtual void OnWindowAddedOrRemoved() = 0; + virtual void OnWindowTitleChanged(size_t index, + const base::string16& title) = 0; +}; + +class SimpleWM::WindowListModel : public aura::WindowObserver { + public: + explicit WindowListModel(aura::Window* window_container) + : window_container_(window_container) { + window_container_->AddObserver(this); + } + ~WindowListModel() override { + window_container_->RemoveObserver(this); + for (auto window : windows_) + window->RemoveObserver(this); + } + + size_t GetSize() const { + return windows_.size(); + } + base::string16 GetTitle(size_t index) const { + return windows_.at(index)->GetTitle(); + } + aura::Window* GetWindow(size_t index) const { + return windows_.at(index); + } + + void AddObserver(WindowListModelObserver* observer) { + observers_.AddObserver(observer); + } + void RemoveObserver(WindowListModelObserver* observer) { + observers_.RemoveObserver(observer); + } + + private: + // aura::WindowObserver: + void OnWindowAdded(aura::Window* window) override { + if (window->parent() == window_container_) + AddWindow(window); + for (auto& observer : observers_) + observer.OnWindowAddedOrRemoved(); + } + void OnWillRemoveWindow(aura::Window* window) override { + window->RemoveObserver(this); + for (auto& observer : observers_) + observer.OnWindowAddedOrRemoved(); + auto it = std::find(windows_.begin(), windows_.end(), window); + DCHECK(it != windows_.end()); + windows_.erase(it); + } + void OnWindowTitleChanged(aura::Window* window) override { + auto it = std::find(windows_.begin(), windows_.end(), window); + size_t index = it - windows_.begin(); + for (auto& observer : observers_) + observer.OnWindowTitleChanged(index, window->GetTitle()); + } + + void AddWindow(aura::Window* window) { + window->AddObserver(this); + auto it = std::find(windows_.begin(), windows_.end(), window); + DCHECK(it == windows_.end()); + windows_.push_back(window); + } + + aura::Window* window_container_; + std::vector<aura::Window*> windows_; + base::ObserverList<WindowListModelObserver> observers_; + + DISALLOW_COPY_AND_ASSIGN(WindowListModel); +}; + +class SimpleWM::WindowListView : public views::WidgetDelegateView, + public views::ButtonListener, + public SimpleWM::WindowListModelObserver { + public: + using ActivateCallback = base::Callback<void(aura::Window*)>; + + WindowListView(WindowListModel* model, ActivateCallback activate_callback) + : model_(model), activate_callback_(activate_callback) { + model_->AddObserver(this); + Rebuild(); + } + ~WindowListView() override { + model_->RemoveObserver(this); + } + + static const int kButtonSpacing = 5; + + // views::View + void Layout() override { + int x_offset = kButtonSpacing; + for (int i = 0; i < child_count(); ++i) { + View* v = child_at(i); + gfx::Size ps = v->GetPreferredSize(); + gfx::Rect bounds(x_offset, kButtonSpacing, ps.width(), ps.height()); + v->SetBoundsRect(bounds); + x_offset = bounds.right() + kButtonSpacing; + } + } + void OnPaint(gfx::Canvas* canvas) override { + canvas->DrawColor(SK_ColorLTGRAY); + } + gfx::Size GetPreferredSize() const override { + std::unique_ptr<views::MdTextButton> measure_button( + views::MdTextButton::Create(nullptr, base::UTF8ToUTF16("Sample"))); + int height = + measure_button->GetPreferredSize().height() + 2 * kButtonSpacing; + return gfx::Size(0, height); + } + + private: + // views::ButtonListener: + void ButtonPressed(views::Button* sender, const ui::Event& event) override { + activate_callback_.Run( + model_->GetWindow(static_cast<size_t>(sender->tag()))); + } + + // WindowListModelObserver: + void OnWindowAddedOrRemoved() override { + Rebuild(); + } + void OnWindowTitleChanged(size_t index, + const base::string16& new_title) override { + views::MdTextButton* label = + static_cast<views::MdTextButton*>(child_at(static_cast<int>(index))); + label->SetText(new_title); + Layout(); + } + + void Rebuild() { + RemoveAllChildViews(true); + + size_t size = model_->GetSize(); + for (size_t i = 0; i < size; ++i) { + base::string16 title = model_->GetTitle(i); + if (title.empty()) + title = base::UTF8ToUTF16("Untitled"); + views::MdTextButton* button = views::MdTextButton::Create(this, title); + button->set_tag(static_cast<int>(i)); + AddChildView(button); + } + Layout(); + } + + WindowListModel* model_; + ActivateCallback activate_callback_; + + DISALLOW_COPY_AND_ASSIGN(WindowListView); +}; + class SimpleWM::FrameView : public views::WidgetDelegateView, public aura::WindowObserver { public: @@ -38,11 +193,14 @@ private: // views::WidgetDelegateView: base::string16 GetWindowTitle() const override { - base::string16* title = + base::string16* title_from_property = client_window_->GetProperty(aura::client::kTitleKey); - if (!title) - return base::UTF8ToUTF16("(Window)"); - return *title; + base::string16 title = title_from_property ? *title_from_property + : base::UTF8ToUTF16("(Window)"); + // TODO(beng): quick hack to cause WindowObserver::OnWindowTitleChanged to + // fire. + GetWidget()->GetNativeWindow()->SetTitle(title); + return title; } void Layout() override { // Client offsets are applied automatically by the window service. @@ -63,6 +221,50 @@ DISALLOW_COPY_AND_ASSIGN(FrameView); }; +class SimpleWM::DisplayLayoutManager : public aura::LayoutManager { + public: + DisplayLayoutManager(aura::Window* display_root, + aura::Window* window_root, + SimpleWM::WindowListView* window_list_view) + : display_root_(display_root), + window_root_(window_root), + window_list_view_(window_list_view) {} + ~DisplayLayoutManager() override {} + + private: + // aura::LayoutManager: + void OnWindowResized() override {} + void OnWindowAddedToLayout(aura::Window* child) override { + Layout(); + } + void OnWillRemoveWindowFromLayout(aura::Window* child) override {} + void OnWindowRemovedFromLayout(aura::Window* child) override {} + void OnChildWindowVisibilityChanged(aura::Window* child, + bool visible) override {} + void SetChildBounds(aura::Window* child, + const gfx::Rect& requested_bounds) override { + SetChildBoundsDirect(child, requested_bounds); + } + + void Layout() { + gfx::Size ps = window_list_view_->GetPreferredSize(); + gfx::Rect bounds = display_root_->bounds(); + gfx::Rect window_root_bounds = bounds; + window_root_bounds.set_height(window_root_bounds.height() - ps.height()); + window_root_->SetBounds(window_root_bounds); + gfx::Rect window_list_view_bounds = bounds; + window_list_view_bounds.set_height(ps.height()); + window_list_view_bounds.set_y(window_root_bounds.bottom()); + window_list_view_->GetWidget()->SetBounds(window_list_view_bounds); + } + + aura::Window* display_root_; + aura::Window* window_root_; + SimpleWM::WindowListView* window_list_view_; + + DISALLOW_COPY_AND_ASSIGN(DisplayLayoutManager); +}; + SimpleWM::SimpleWM() {} SimpleWM::~SimpleWM() { @@ -165,7 +367,7 @@ FrameView* frame_view = new FrameView(client_window); params.delegate = frame_view; params.native_widget = frame_native_widget; - params.parent = root_; + params.parent = window_root_; params.bounds = gfx::Rect(10, 10, 500, 500); frame_widget->Init(params); frame_widget->Show(); @@ -194,11 +396,36 @@ std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, const display::Display& display) { // Only handles a single root. - DCHECK(!root_); + DCHECK(!window_root_); window_tree_host_ = std::move(window_tree_host); - root_ = window_tree_host_->window(); + window_tree_host_->InitHost(); + display_root_ = window_tree_host_->window(); + window_root_ = new aura::Window(nullptr); + window_root_->Init(ui::LAYER_NOT_DRAWN); + display_root_->AddChild(window_root_); + window_root_->Show(); + + window_list_model_ = base::MakeUnique<WindowListModel>(window_root_); + + views::Widget* window_list_widget = new views::Widget; + views::NativeWidgetAura* window_list_widget_native_widget = + new views::NativeWidgetAura(window_list_widget, true); + views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); + WindowListView* window_list_view = + new WindowListView(window_list_model_.get(), + base::Bind(&SimpleWM::OnWindowListViewItemActivated, + base::Unretained(this))); + params.delegate = window_list_view; + params.native_widget = window_list_widget_native_widget; + params.parent = display_root_; + window_list_widget->Init(params); + window_list_widget->Show(); + + display_root_->SetLayoutManager(new DisplayLayoutManager( + display_root_, window_root_, window_list_view)); + DCHECK(window_manager_client_); - window_manager_client_->AddActivationParent(root_); + window_manager_client_->AddActivationParent(window_root_); ui::mojom::FrameDecorationValuesPtr frame_decoration_values = ui::mojom::FrameDecorationValues::New(); frame_decoration_values->normal_client_area_insets.Set( @@ -206,14 +433,14 @@ frame_decoration_values->max_title_bar_button_width = 0; window_manager_client_->SetFrameDecorationValues( std::move(frame_decoration_values)); - new wm::DefaultActivationClient(root_); - aura::client::SetFocusClient(root_, &focus_client_); + new wm::DefaultActivationClient(display_root_); + aura::client::SetFocusClient(display_root_, &focus_client_); } void SimpleWM::OnWmDisplayRemoved( aura::WindowTreeHostMus* window_tree_host) { DCHECK_EQ(window_tree_host, window_tree_host_.get()); - root_ = nullptr; + window_root_ = nullptr; window_tree_host_.reset(); } @@ -240,5 +467,10 @@ return it != client_window_to_frame_view_.end() ? it->second : nullptr; } -} // namespace simple_wm +void SimpleWM::OnWindowListViewItemActivated(aura::Window* window) { + aura::client::ActivationClient* activation_client = + aura::client::GetActivationClient(window->GetRootWindow()); + activation_client->ActivateWindow(window); +} +} // namespace simple_wm
diff --git a/mash/simple_wm/simple_wm.h b/mash/simple_wm/simple_wm.h index f677cc8..d0dc5a0 100644 --- a/mash/simple_wm/simple_wm.h +++ b/mash/simple_wm/simple_wm.h
@@ -47,7 +47,11 @@ ~SimpleWM() override; private: + class DisplayLayoutManager; class FrameView; + class WindowListModel; + class WindowListModelObserver; + class WindowListView; // service_manager::Service: void OnStart() override; @@ -93,18 +97,22 @@ FrameView* GetFrameViewForClientWindow(aura::Window* client_window); + void OnWindowListViewItemActivated(aura::Window* index); + std::unique_ptr<views::AuraInit> aura_init_; ::wm::WMState wm_state_; std::unique_ptr<display::ScreenBase> screen_; aura::PropertyConverter property_converter_; aura::test::TestFocusClient focus_client_; std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_; - aura::Window* root_ = nullptr; + aura::Window* display_root_ = nullptr; + aura::Window* window_root_ = nullptr; aura::WindowManagerClient* window_manager_client_ = nullptr; std::unique_ptr<aura::WindowTreeClient> window_tree_client_; std::unique_ptr<ui::Gpu> gpu_; std::unique_ptr<aura::MusContextFactory> compositor_context_factory_; std::map<aura::Window*, FrameView*> client_window_to_frame_view_; + std::unique_ptr<WindowListModel> window_list_model_; bool started_ = false;
diff --git a/mojo/public/js/bindings.js b/mojo/public/js/bindings.js index 8d8565c..6032dea 100644 --- a/mojo/public/js/bindings.js +++ b/mojo/public/js/bindings.js
@@ -16,7 +16,7 @@ InterfacePtrInfo.prototype.isValid = function() { return core.isHandle(this.handle); - } + }; // --------------------------------------------------------------------------- @@ -26,7 +26,7 @@ InterfaceRequest.prototype.isValid = function() { return core.isHandle(this.handle); - } + }; // --------------------------------------------------------------------------- @@ -42,50 +42,77 @@ // |ptr| field of generated interface pointer classes. function InterfacePtrController(interfaceType) { this.version = 0; - this.connection = null; this.interfaceType_ = interfaceType; + this.connection_ = null; + // |connection_| is lazily initialized. |handle_| is valid between bind() + // and the initialization of |connection_|. + this.handle_ = null; } InterfacePtrController.prototype.bind = function(interfacePtrInfo) { this.reset(); + this.version = interfacePtrInfo.version; - this.connection = new connection.Connection( - interfacePtrInfo.handle, undefined, this.interfaceType_.proxyClass); - } + this.handle_ = interfacePtrInfo.handle; + }; InterfacePtrController.prototype.isBound = function() { - return this.connection !== null; - } + return this.connection_ !== null || this.handle_ !== null; + }; // Although users could just discard the object, reset() closes the pipe // immediately. InterfacePtrController.prototype.reset = function() { - if (!this.isBound()) - return; - this.version = 0; - this.connection.close(); - this.connection = null; - } + if (this.connection_) { + this.connection_.close(); + this.connection_ = null; + } + if (this.handle_) { + core.close(this.handle_); + this.handle_ = null; + } + }; InterfacePtrController.prototype.setConnectionErrorHandler = function(callback) { if (!this.isBound()) throw new Error("Cannot set connection error handler if not bound."); - this.connection.router_.setErrorHandler(callback); - } + + this.configureProxyIfNecessary_(); + this.connection_.router_.setErrorHandler(callback); + }; InterfacePtrController.prototype.passInterface = function() { - if (!this.isBound()) - return new InterfacePtrInfo(null, 0); + var result; + if (this.connection_) { + result = new InterfacePtrInfo( + this.connection_.router_.connector_.handle_, this.version); + this.connection_.router_.connector_.handle_ = null; + } else { + // This also handles the case when this object is not bound. + result = new InterfacePtrInfo(this.handle_, this.version); + this.handle_ = null; + } - var result = new InterfacePtrInfo( - this.connection.router_.connector_.handle_, this.version); - this.connection.router_.connector_.handle_ = null; this.reset(); return result; - } + }; + + InterfacePtrController.prototype.getProxy = function() { + this.configureProxyIfNecessary_(); + return this.connection_.remote; + }; + + InterfacePtrController.prototype.configureProxyIfNecessary_ = function() { + if (!this.handle_) + return; + + this.connection_ = new connection.Connection( + this.handle_, undefined, this.interfaceType_.proxyClass); + this.handle_ = null; + }; // TODO(yzshen): Implement the following methods. // InterfacePtrController.prototype.queryVersion @@ -119,21 +146,23 @@ Binding.prototype.isBound = function() { return this.stub_ !== null; - } + }; Binding.prototype.bind = function(request) { this.close(); - this.stub_ = connection.bindHandleToStub(request.handle, - this.interfaceType_); - connection.StubBindings(this.stub_).delegate = this.impl_; - } + if (request.isValid()) { + this.stub_ = connection.bindHandleToStub(request.handle, + this.interfaceType_); + connection.StubBindings(this.stub_).delegate = this.impl_; + } + }; Binding.prototype.close = function() { if (!this.isBound()) return; connection.StubBindings(this.stub_).close(); this.stub_ = null; - } + }; Binding.prototype.setConnectionErrorHandler = function(callback) { @@ -141,7 +170,7 @@ throw new Error("Cannot set connection error handler if not bound."); connection.StubBindings(this.stub_).connection.router_.setErrorHandler( callback); - } + }; Binding.prototype.unbind = function() { if (!this.isBound()) @@ -154,7 +183,7 @@ null; this.close(); return result; - } + }; var exports = {}; exports.InterfacePtrInfo = InterfacePtrInfo;
diff --git a/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl index c479a8b..96a241c 100644 --- a/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl
@@ -14,7 +14,7 @@ {%- for method in interface.methods %} {{interface.name}}Ptr.prototype.{{method.name|stylize_method}} = function() { return {{interface.name}}Proxy.prototype.{{method.name|stylize_method}} - .apply(this.ptr.connection.remote, arguments); + .apply(this.ptr.getProxy(), arguments); }; {{interface.name}}Proxy.prototype.{{method.name|stylize_method}} = function(
diff --git a/net/cert/cert_verify_proc_blacklist.inc b/net/cert/cert_verify_proc_blacklist.inc index b2bb554..3ca92f14 100644 --- a/net/cert/cert_verify_proc_blacklist.inc +++ b/net/cert/cert_verify_proc_blacklist.inc
@@ -5,7 +5,7 @@ // The certificate(s) that were misissued, and which represent these SPKIs, // are stored within net/data/ssl/blacklist. Further details about the // rationale is documented in net/data/ssl/blacklist/README.md -static const size_t kNumBlacklistedSPKIs = 34u; +static const size_t kNumBlacklistedSPKIs = 36u; static const uint8_t kBlacklistedSPKIs[kNumBlacklistedSPKIs][crypto::kSHA256Length] = { // ead610e6e90b439f2ecb51628b0932620f6ef340bd843fca38d3181b8f4ba197.pem @@ -24,6 +24,10 @@ {0x1a, 0xf5, 0x6c, 0x98, 0xff, 0x04, 0x3e, 0xf9, 0x2b, 0xeb, 0xff, 0x54, 0xce, 0xbb, 0x4d, 0xd6, 0x7a, 0x25, 0xba, 0x95, 0x6c, 0x81, 0x7f, 0x3e, 0x6d, 0xd3, 0xc1, 0xe5, 0x2e, 0xb5, 0x84, 0xc1}, + // e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem + {0x1f, 0x42, 0x24, 0xce, 0xc8, 0x4f, 0xc9, 0x9c, 0xed, 0x88, 0x1f, + 0xf6, 0xfc, 0xfd, 0x3e, 0x21, 0xf8, 0xc5, 0x19, 0xc5, 0x47, 0xaa, + 0x6a, 0x5d, 0xd3, 0xde, 0x24, 0x73, 0x02, 0xce, 0x50, 0xd1}, // 2c998e761160c3b06d82faa9fdc7545d9bda9eb60310f992aa510a6280b74245.pem {0x2c, 0x99, 0x8e, 0x76, 0x11, 0x60, 0xc3, 0xb0, 0x6d, 0x82, 0xfa, 0xa9, 0xfd, 0xc7, 0x54, 0x5d, 0x9b, 0xda, 0x9e, 0xb6, 0x03, 0x10, @@ -78,6 +82,10 @@ {0x9b, 0x8a, 0x93, 0xde, 0xcc, 0xcf, 0xba, 0xfc, 0xf4, 0xd0, 0x4d, 0x34, 0x42, 0x12, 0x8f, 0xb3, 0x52, 0x18, 0xcf, 0xe4, 0x37, 0xa3, 0xd8, 0xd0, 0x32, 0x8c, 0x99, 0xf8, 0x90, 0x89, 0xe4, 0x50}, + // 1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem + {0x9d, 0xd5, 0x5f, 0xc5, 0x73, 0xf5, 0x46, 0xcb, 0x6a, 0x38, 0x31, + 0xd1, 0x11, 0x2d, 0x87, 0x10, 0xa6, 0xf4, 0xf8, 0x2d, 0xc8, 0x7f, + 0x5f, 0xae, 0x9d, 0x3a, 0x1a, 0x02, 0x8d, 0xd3, 0x6e, 0x4b}, // 0d136e439f0ab6e97f3a02a540da9f0641aa554e1d66ea51ae2920d51b2f7217.pem // 4fee0163686ecbd65db968e7494f55d84b25486d438e9de558d629d28cd4d176.pem // 8a1bd21661c60015065212cc98b1abb50dfd14c872a208e66bae890f25c448af.pem
diff --git a/net/cert/cert_verify_proc_whitelist.cc b/net/cert/cert_verify_proc_whitelist.cc index 5c53a77a..53489ff 100644 --- a/net/cert/cert_verify_proc_whitelist.cc +++ b/net/cert/cert_verify_proc_whitelist.cc
@@ -46,1604 +46,7 @@ 0x21, 0x9f, 0xe0, 0xe9, 0xe3, 0xa3, 0x82, 0xa1, 0xb3, 0xcb, 0x66, 0xc9, 0x39, 0x55, 0xde, 0x75 }, }; - -// SHA-256 hashes of the leaf certificates whitelisted as issued by CNNIC's -// DV root. -const uint8_t kCNNICDVWhitelist[][crypto::kSHA256Length] = { - { 0x00, 0xc5, 0x9f, 0x5e, 0xf3, 0xb4, 0x6d, 0xbc, - 0xa0, 0xa8, 0xbb, 0xa5, 0x0a, 0x72, 0xd4, 0xe1, - 0x83, 0x9a, 0x94, 0xfb, 0x1a, 0x58, 0x5a, 0xd7, - 0x2a, 0x7a, 0xac, 0x3c, 0x72, 0x56, 0x1f, 0xc0 }, - { 0x02, 0x01, 0x4e, 0x80, 0xf5, 0xc4, 0xf3, 0x8b, - 0xa9, 0xd9, 0x04, 0x79, 0x1a, 0x63, 0xf6, 0x4d, - 0x05, 0xf9, 0xe2, 0x03, 0xa1, 0xf1, 0x2b, 0x06, - 0xd6, 0x55, 0x94, 0x01, 0x41, 0x0e, 0x73, 0x36 }, - { 0x02, 0x35, 0x38, 0xe2, 0x48, 0x15, 0x28, 0x75, - 0x29, 0x2f, 0x2c, 0x83, 0x9a, 0xb3, 0x2b, 0xc7, - 0x35, 0x1e, 0x2b, 0x29, 0x99, 0x1d, 0x66, 0xae, - 0xa6, 0x16, 0xcb, 0x0b, 0x26, 0xa5, 0xe3, 0x75 }, - { 0x02, 0xec, 0x35, 0xf5, 0x83, 0x4c, 0xd2, 0xc3, - 0x43, 0x33, 0x39, 0x9a, 0xea, 0x6b, 0xda, 0x84, - 0x68, 0xab, 0x8d, 0x74, 0xef, 0x6c, 0xa5, 0x2d, - 0x33, 0x7a, 0x30, 0x69, 0x4c, 0x3f, 0x95, 0xa4 }, - { 0x03, 0xe0, 0x6e, 0x0b, 0x7a, 0x2c, 0xba, 0xe4, - 0xb6, 0x8b, 0xce, 0x5f, 0x83, 0xe7, 0xa9, 0x31, - 0x6e, 0xd7, 0x82, 0x3e, 0x8d, 0x94, 0x85, 0x38, - 0xf1, 0x94, 0x3f, 0xa4, 0x27, 0xd7, 0x91, 0x0e }, - { 0x04, 0x0f, 0x53, 0x7a, 0x51, 0x95, 0x95, 0xcc, - 0xff, 0xde, 0x35, 0xe0, 0xd1, 0x28, 0xb7, 0x99, - 0x92, 0x2b, 0xa9, 0x37, 0xa2, 0xe8, 0x65, 0x84, - 0x36, 0x62, 0xf1, 0xf4, 0x50, 0x02, 0xb8, 0x2d }, - { 0x07, 0x19, 0x4f, 0x47, 0xf4, 0xce, 0xd0, 0x96, - 0xd1, 0x06, 0x8d, 0x34, 0x49, 0x3b, 0x67, 0x37, - 0x14, 0x45, 0x16, 0x93, 0xa6, 0xa2, 0x71, 0x2f, - 0x70, 0x8f, 0x59, 0x36, 0x12, 0x11, 0xc6, 0x21 }, - { 0x07, 0x8f, 0xee, 0x58, 0x8a, 0x2c, 0x55, 0xc8, - 0xe2, 0xc1, 0x78, 0x71, 0xaa, 0xb6, 0xe4, 0x00, - 0xb3, 0xfd, 0xbc, 0xdc, 0xf3, 0x91, 0x46, 0xa0, - 0x89, 0x37, 0xf9, 0xac, 0x06, 0xa1, 0xb8, 0xbd }, - { 0x08, 0x21, 0x0a, 0xc3, 0xa2, 0x95, 0x56, 0xf6, - 0x8d, 0x33, 0xb4, 0x40, 0x87, 0x9c, 0x54, 0x63, - 0x64, 0x04, 0xe9, 0x7c, 0x4d, 0x9f, 0x97, 0x82, - 0x23, 0xd2, 0x42, 0xab, 0xe5, 0x38, 0x5e, 0x4e }, - { 0x08, 0xc2, 0xd3, 0x17, 0xa8, 0x4a, 0x3c, 0xbe, - 0x38, 0xde, 0x64, 0xa2, 0x4d, 0xd4, 0x27, 0x91, - 0x09, 0xe2, 0xbc, 0x02, 0x2b, 0x93, 0xb1, 0x05, - 0xa8, 0x94, 0xa5, 0x1a, 0xdc, 0x3e, 0xe5, 0xcc }, - { 0x09, 0x9f, 0x3e, 0x71, 0xb5, 0x00, 0xd1, 0x5b, - 0x03, 0x7b, 0x93, 0xaa, 0x5f, 0xb4, 0x16, 0x19, - 0x0a, 0xd1, 0xdf, 0x86, 0x73, 0xab, 0x31, 0xa8, - 0xf6, 0xd9, 0x7f, 0x59, 0x5e, 0x8e, 0x16, 0xe9 }, - { 0x09, 0xeb, 0xdd, 0x1b, 0x7f, 0xfa, 0x4e, 0xd7, - 0x4b, 0xeb, 0xae, 0x96, 0xba, 0x10, 0x65, 0xdc, - 0x7d, 0xa1, 0xc5, 0xd3, 0x18, 0x3c, 0xc5, 0x94, - 0x19, 0xe9, 0x78, 0x36, 0xaf, 0x7f, 0x6d, 0x70 }, - { 0x0a, 0x01, 0x88, 0x81, 0x2c, 0x9d, 0xe8, 0x8a, - 0x2f, 0x0a, 0x5c, 0x4c, 0x57, 0xe6, 0xf9, 0xa8, - 0x15, 0x69, 0xe9, 0xc7, 0x09, 0xc0, 0x95, 0x40, - 0x80, 0xe5, 0xe4, 0xe6, 0x62, 0x85, 0x6d, 0xf8 }, - { 0x0a, 0x42, 0x19, 0x7e, 0x48, 0x70, 0xb2, 0x34, - 0x20, 0xf5, 0x51, 0x9f, 0xb8, 0x39, 0xb6, 0xcc, - 0x83, 0x03, 0x52, 0x9a, 0xa9, 0x06, 0x9a, 0xd1, - 0xa0, 0x90, 0x86, 0xcf, 0x6c, 0xba, 0x07, 0xc2 }, - { 0x0b, 0x03, 0xe1, 0x27, 0xc2, 0xe3, 0x3e, 0xad, - 0xbc, 0xb0, 0x99, 0x80, 0x46, 0xcc, 0x9b, 0xa7, - 0x33, 0x46, 0x3e, 0x0c, 0xa6, 0x43, 0x52, 0x27, - 0x81, 0xb0, 0x3d, 0x81, 0x53, 0x97, 0xeb, 0x4f }, - { 0x0b, 0x1e, 0x1e, 0x73, 0x43, 0xa0, 0xe9, 0x1c, - 0x2a, 0x27, 0xdd, 0x2a, 0x4d, 0x7e, 0x6b, 0xf1, - 0xe8, 0x04, 0x4b, 0x58, 0xce, 0x1a, 0xe8, 0x1e, - 0x27, 0xd8, 0x14, 0xfd, 0x2d, 0xc0, 0x18, 0x93 }, - { 0x0b, 0x48, 0xd5, 0x5c, 0xac, 0x84, 0xfd, 0xee, - 0x15, 0xd8, 0x1a, 0xff, 0x99, 0x07, 0xbb, 0x9a, - 0x57, 0x11, 0xa9, 0x5c, 0xe2, 0x3a, 0x8d, 0x4d, - 0x5e, 0x88, 0x62, 0xbf, 0x15, 0xa7, 0x6a, 0x75 }, - { 0x0b, 0xfe, 0xa1, 0x38, 0x31, 0x67, 0x3e, 0xc9, - 0x69, 0xd0, 0x5f, 0xd8, 0x67, 0xb6, 0x69, 0xf2, - 0x71, 0x24, 0xaf, 0xeb, 0x7c, 0x60, 0x8c, 0xfe, - 0x54, 0xcf, 0x46, 0x33, 0x06, 0xcc, 0x99, 0x2e }, - { 0x0c, 0xb9, 0x31, 0x93, 0xf1, 0x65, 0x26, 0xe1, - 0xd1, 0x65, 0x52, 0x11, 0x7b, 0xa2, 0x1a, 0xac, - 0xb9, 0xf1, 0xd7, 0xa8, 0x93, 0x56, 0xa3, 0x5d, - 0xe4, 0xf6, 0x65, 0xe9, 0x39, 0x90, 0x79, 0x38 }, - { 0x0d, 0x16, 0x1b, 0xb9, 0xca, 0x0d, 0x20, 0xe4, - 0x67, 0x35, 0x89, 0x67, 0x22, 0x78, 0xb0, 0xa3, - 0xc5, 0xe2, 0x69, 0x30, 0xa4, 0xdc, 0x3a, 0x82, - 0x16, 0x85, 0x43, 0x24, 0x27, 0xc7, 0x31, 0x5a }, - { 0x0d, 0x71, 0xc8, 0xca, 0x16, 0x56, 0x59, 0xef, - 0xaf, 0x69, 0x65, 0x29, 0x28, 0x9a, 0xae, 0x25, - 0xd9, 0xc4, 0x2a, 0x1b, 0xbb, 0x03, 0x5a, 0x2b, - 0x8c, 0x61, 0x14, 0x7e, 0x1b, 0x8b, 0x90, 0x52 }, - { 0x0e, 0xfd, 0x68, 0x73, 0xd6, 0x0e, 0x77, 0x96, - 0x2d, 0xf6, 0x00, 0x16, 0xdc, 0x3b, 0xaf, 0x9c, - 0xa7, 0x1e, 0x7d, 0x86, 0x19, 0xe7, 0xeb, 0xaa, - 0x3a, 0xf2, 0xdc, 0xb5, 0xba, 0x24, 0xde, 0xc2 }, - { 0x0e, 0xff, 0x3c, 0xff, 0xda, 0x4a, 0x3e, 0x87, - 0x23, 0x4a, 0x86, 0xc7, 0x0d, 0x49, 0x8c, 0x62, - 0x60, 0x7f, 0x37, 0x44, 0xea, 0x71, 0xf1, 0x83, - 0x1d, 0xcf, 0xca, 0xf3, 0xaf, 0x15, 0x56, 0x9c }, - { 0x10, 0x83, 0x6d, 0xa0, 0xcd, 0x6a, 0xc0, 0x95, - 0xdd, 0x7a, 0xc3, 0x4d, 0x99, 0x01, 0x90, 0x9a, - 0x8e, 0xf8, 0x4d, 0x6e, 0xe0, 0x5b, 0x83, 0x43, - 0x03, 0xd4, 0x7f, 0xc0, 0xa5, 0xf9, 0x14, 0xfa }, - { 0x11, 0xa4, 0x02, 0x7b, 0x45, 0xfc, 0x9a, 0x6f, - 0x40, 0x21, 0x25, 0xc3, 0xca, 0x22, 0x68, 0xe0, - 0x15, 0xa3, 0x1b, 0xa4, 0xfd, 0xb0, 0x05, 0x9d, - 0x66, 0x6b, 0x73, 0xc8, 0x51, 0xd5, 0x35, 0x92 }, - { 0x12, 0x6b, 0x1b, 0xa6, 0x38, 0xc7, 0xe6, 0x99, - 0xbc, 0xbc, 0x54, 0xf5, 0x79, 0xac, 0xd3, 0x9f, - 0xe6, 0x1d, 0x08, 0x22, 0x5f, 0xe5, 0xb1, 0xf9, - 0x01, 0x88, 0xb2, 0x3f, 0xd8, 0x43, 0x3e, 0x8e }, - { 0x13, 0x5d, 0x3e, 0xda, 0x6e, 0x55, 0x9b, 0xf5, - 0xee, 0x23, 0x0a, 0xa5, 0xba, 0x59, 0xbb, 0x6a, - 0x2a, 0x0f, 0x07, 0x82, 0x2f, 0xed, 0x38, 0x44, - 0x7e, 0x6a, 0xbc, 0x5c, 0x23, 0xaa, 0xd0, 0x27 }, - { 0x13, 0x6a, 0x40, 0x09, 0x81, 0xb1, 0xa3, 0xe0, - 0x5f, 0xdc, 0xac, 0x20, 0xa2, 0x36, 0xf8, 0x6e, - 0x94, 0xe5, 0xee, 0x58, 0x59, 0xd8, 0xfd, 0x45, - 0xe9, 0xe9, 0xc5, 0xa6, 0xc5, 0xc0, 0xa4, 0x13 }, - { 0x14, 0x21, 0x28, 0xa6, 0x65, 0x1c, 0xdc, 0x18, - 0x70, 0xc2, 0x67, 0x5e, 0xc0, 0xb0, 0xef, 0x32, - 0xb5, 0xd4, 0xc1, 0x55, 0x35, 0x8e, 0x7e, 0xd9, - 0x5a, 0x98, 0xe8, 0x3b, 0x1a, 0xd8, 0xbe, 0x4d }, - { 0x14, 0x47, 0x25, 0xa6, 0x79, 0x1c, 0x60, 0x0c, - 0x4c, 0x2c, 0xf3, 0x94, 0x3f, 0x3e, 0xcf, 0x40, - 0xd6, 0x31, 0xd7, 0x60, 0xe4, 0x51, 0xef, 0x28, - 0x29, 0xaf, 0xfb, 0xee, 0x74, 0x80, 0xad, 0x17 }, - { 0x15, 0x27, 0x2a, 0xbc, 0x1f, 0x0c, 0x4d, 0x1d, - 0x1a, 0x92, 0x08, 0x73, 0x55, 0xa1, 0xe0, 0x42, - 0x6c, 0x2b, 0xb5, 0xb4, 0x37, 0x30, 0x00, 0xb8, - 0x2c, 0x2c, 0xca, 0xb7, 0xfa, 0xd6, 0xfa, 0x20 }, - { 0x15, 0x48, 0x1f, 0xde, 0x4e, 0x3f, 0x72, 0x49, - 0x66, 0x87, 0xdf, 0x57, 0x5f, 0xb5, 0xb1, 0x27, - 0xbd, 0x6d, 0xeb, 0x66, 0x1d, 0xd9, 0x07, 0x71, - 0x8b, 0xa0, 0x65, 0xc7, 0xda, 0x66, 0x76, 0xd1 }, - { 0x15, 0x5a, 0x88, 0x39, 0x60, 0x8b, 0x77, 0x25, - 0x34, 0x6a, 0x72, 0x40, 0xe4, 0xe2, 0x50, 0x3a, - 0xcc, 0x7b, 0x8b, 0xef, 0x0b, 0x1b, 0xe6, 0x15, - 0xb9, 0x02, 0x4a, 0x88, 0xe6, 0x52, 0x11, 0xf9 }, - { 0x15, 0x5d, 0x88, 0x6e, 0x99, 0x1d, 0x40, 0x0a, - 0xbf, 0x2f, 0x83, 0xc2, 0x80, 0xd1, 0x24, 0x6d, - 0xce, 0x02, 0xa6, 0x28, 0x31, 0x26, 0xc6, 0x17, - 0xe4, 0x17, 0xd2, 0xb7, 0xea, 0xc1, 0x19, 0x24 }, - { 0x17, 0x3d, 0xe2, 0x60, 0xe2, 0x2d, 0x76, 0x9d, - 0x2d, 0x54, 0x99, 0xc8, 0x22, 0x0d, 0x86, 0xed, - 0xe3, 0x48, 0xda, 0x1e, 0x57, 0xc1, 0xe7, 0xc8, - 0x15, 0x07, 0xfb, 0x3e, 0x6b, 0xd7, 0x3b, 0x7f }, - { 0x18, 0x1e, 0xbb, 0x29, 0x8d, 0x20, 0x68, 0x5c, - 0x48, 0xf7, 0x53, 0x89, 0x80, 0xc5, 0x63, 0xc8, - 0xf7, 0x48, 0x95, 0x4c, 0xf2, 0x64, 0x41, 0x9a, - 0x72, 0xfc, 0xc6, 0x34, 0x0a, 0x10, 0x23, 0x80 }, - { 0x19, 0xff, 0xe6, 0xc6, 0x7a, 0x35, 0x86, 0xfc, - 0x48, 0x6c, 0xe2, 0x07, 0xfa, 0x2a, 0xf6, 0x62, - 0xf5, 0x50, 0xfc, 0x51, 0x2f, 0xdd, 0x78, 0x17, - 0xe3, 0x86, 0xc9, 0x4a, 0x7b, 0xde, 0x37, 0xa9 }, - { 0x1a, 0x9e, 0xc6, 0x8c, 0xed, 0xb6, 0xbd, 0x94, - 0x0c, 0x95, 0x34, 0xe6, 0x84, 0xbb, 0x04, 0x9f, - 0xf1, 0xe2, 0x3b, 0x66, 0xa1, 0x33, 0x01, 0x2f, - 0xc3, 0x99, 0xeb, 0x4f, 0xb5, 0xd3, 0xaa, 0x35 }, - { 0x1b, 0x7b, 0xf8, 0xd9, 0xe8, 0x29, 0x3c, 0x53, - 0xdd, 0x59, 0xec, 0x97, 0xfe, 0x16, 0xf0, 0xea, - 0xb4, 0x68, 0x5b, 0x95, 0xce, 0x14, 0xd2, 0x62, - 0x3e, 0x70, 0x94, 0x2c, 0xff, 0x25, 0xe7, 0x30 }, - { 0x1b, 0xd7, 0xb3, 0x62, 0xbc, 0x14, 0x66, 0xfa, - 0xc0, 0x5e, 0xc5, 0x9e, 0x12, 0xe8, 0x1b, 0xe7, - 0x35, 0x38, 0xc4, 0x97, 0x28, 0xf5, 0xad, 0xba, - 0x2d, 0x81, 0xfc, 0xdb, 0xc4, 0x65, 0x7c, 0x1b }, - { 0x1b, 0xec, 0xfe, 0x78, 0xce, 0x5e, 0x77, 0xa9, - 0x77, 0xbb, 0x5f, 0xe3, 0x49, 0x91, 0x06, 0xc6, - 0x4c, 0xf2, 0xb0, 0x76, 0x16, 0x59, 0x49, 0x04, - 0x11, 0x17, 0xcd, 0x8a, 0xbc, 0xd9, 0x05, 0xd4 }, - { 0x1b, 0xf4, 0x8a, 0x83, 0x3c, 0xe4, 0x05, 0x64, - 0x8c, 0xc0, 0xbd, 0xd3, 0xb5, 0xb8, 0xc1, 0x8e, - 0xb5, 0x13, 0x15, 0x34, 0x29, 0x3a, 0xb2, 0x63, - 0x44, 0xb5, 0x00, 0x76, 0x48, 0x11, 0x41, 0xed }, - { 0x1c, 0x04, 0x82, 0x0f, 0x7b, 0x4a, 0x2f, 0x1e, - 0x38, 0x5d, 0xe1, 0xde, 0x16, 0xb2, 0x22, 0x6e, - 0x88, 0x3d, 0x9c, 0x34, 0x66, 0x3e, 0x1b, 0x64, - 0xe8, 0x5b, 0x98, 0x0e, 0xaf, 0xf0, 0xb9, 0xd3 }, - { 0x1d, 0x9e, 0xc0, 0x06, 0xa5, 0x26, 0xfa, 0xb5, - 0xce, 0x2e, 0x71, 0xfd, 0xfc, 0x07, 0xc0, 0x11, - 0xf7, 0x65, 0x7b, 0xf8, 0x5f, 0x5d, 0x03, 0x52, - 0xb8, 0xcb, 0x21, 0x8d, 0x4f, 0xcb, 0xc4, 0x43 }, - { 0x1e, 0x78, 0xf8, 0x08, 0x84, 0xe3, 0x2a, 0x2e, - 0xa5, 0xad, 0x1e, 0xe8, 0x35, 0x88, 0xac, 0xdb, - 0x18, 0x4a, 0x4a, 0x6e, 0x87, 0x56, 0x5b, 0xf5, - 0x03, 0xb5, 0x69, 0x7a, 0xbf, 0xae, 0x64, 0xa4 }, - { 0x1f, 0x11, 0x85, 0xa5, 0x21, 0xe2, 0x8e, 0x95, - 0x17, 0x1c, 0xf3, 0x86, 0x07, 0x8a, 0x76, 0x4a, - 0x9a, 0x3e, 0x71, 0xc2, 0x59, 0xbc, 0xdc, 0x5f, - 0x8e, 0x66, 0xe1, 0xb5, 0x20, 0x55, 0xa2, 0x6d }, - { 0x1f, 0x23, 0xd7, 0xa6, 0x38, 0x17, 0x1f, 0x6d, - 0x09, 0x99, 0x64, 0xe0, 0xfa, 0x01, 0x72, 0x1c, - 0x06, 0xcc, 0xeb, 0x8e, 0xa2, 0x98, 0xbf, 0xd0, - 0x04, 0x8e, 0x13, 0x8d, 0x98, 0xfc, 0x36, 0x24 }, - { 0x1f, 0xc7, 0xf8, 0x10, 0x4e, 0x27, 0xff, 0x2a, - 0x45, 0x56, 0xf9, 0x1e, 0x05, 0x42, 0x17, 0xc5, - 0x8f, 0x69, 0x3f, 0x70, 0x36, 0x25, 0x9e, 0x39, - 0x80, 0xb5, 0x59, 0x5b, 0x04, 0x3d, 0x11, 0x92 }, - { 0x20, 0x0b, 0x49, 0xbd, 0xd6, 0x35, 0x02, 0x57, - 0xcc, 0xd4, 0xe6, 0xad, 0xe1, 0xcb, 0x75, 0x13, - 0x8d, 0xd6, 0xd9, 0x06, 0xfe, 0xf3, 0x49, 0xc0, - 0xc9, 0x86, 0xa5, 0x1b, 0x29, 0xb9, 0xe5, 0x2d }, - { 0x21, 0x78, 0xe8, 0x28, 0x3a, 0x73, 0x39, 0x6e, - 0x08, 0xc0, 0xa1, 0x1a, 0x88, 0x72, 0xfa, 0x4a, - 0x9f, 0xcc, 0x05, 0x67, 0x0c, 0xee, 0xff, 0xb8, - 0x95, 0x83, 0x8e, 0xb6, 0x59, 0xde, 0x38, 0xdb }, - { 0x22, 0x01, 0x71, 0xf7, 0x0e, 0x1f, 0xc3, 0xc4, - 0xf7, 0x8d, 0xa6, 0xc8, 0xb1, 0xd7, 0x2c, 0x3b, - 0xa8, 0x31, 0x9a, 0x46, 0xf8, 0x19, 0x2d, 0x1e, - 0x19, 0xb9, 0xe2, 0x9a, 0xba, 0x18, 0xee, 0x87 }, - { 0x23, 0x19, 0xcb, 0x3d, 0x58, 0xc6, 0xd5, 0x53, - 0x62, 0x5d, 0xe5, 0xf4, 0x25, 0x2b, 0xf0, 0x29, - 0xab, 0x83, 0x05, 0xeb, 0xf2, 0x2f, 0xa2, 0x3e, - 0x99, 0x73, 0x04, 0x66, 0xde, 0x24, 0xd6, 0xc3 }, - { 0x23, 0x8a, 0x80, 0xcc, 0x9b, 0x58, 0x9a, 0xdc, - 0x89, 0xb7, 0xa8, 0xf3, 0x4d, 0xdf, 0x12, 0x48, - 0x73, 0x4b, 0x9f, 0x7f, 0x78, 0x20, 0xb6, 0x04, - 0x07, 0x66, 0xc5, 0x41, 0x3a, 0xd2, 0xbd, 0xef }, - { 0x23, 0x9c, 0x79, 0x5f, 0x0c, 0x55, 0xa5, 0x53, - 0x16, 0x2a, 0x9c, 0xa0, 0x6e, 0x88, 0x01, 0xe1, - 0x19, 0xbd, 0xff, 0x54, 0x35, 0x4a, 0x3f, 0x68, - 0x43, 0xcf, 0x2a, 0x2f, 0xa6, 0x01, 0x75, 0x8e }, - { 0x24, 0x62, 0x52, 0x48, 0x32, 0xc1, 0x54, 0xd8, - 0x4d, 0xf5, 0x8e, 0xd7, 0x75, 0x22, 0x3b, 0xbe, - 0x25, 0x7d, 0xea, 0xf7, 0x0e, 0xf9, 0xd2, 0x08, - 0x61, 0x4e, 0xc0, 0xf5, 0x97, 0x7f, 0x6d, 0x58 }, - { 0x24, 0x6d, 0x0c, 0x31, 0x48, 0x72, 0x75, 0x59, - 0xf9, 0x9a, 0xd0, 0xc1, 0x50, 0x37, 0x70, 0x06, - 0xb7, 0xa1, 0x7a, 0x60, 0x3a, 0x47, 0x3b, 0x6a, - 0xac, 0xd2, 0x4e, 0x16, 0xc6, 0xc5, 0x1b, 0x42 }, - { 0x25, 0x1b, 0xb7, 0xc5, 0x42, 0x33, 0xda, 0x44, - 0xbf, 0x53, 0xb5, 0x8a, 0xf2, 0x9a, 0xe1, 0x74, - 0xb9, 0x78, 0xba, 0xdb, 0x89, 0xa9, 0x50, 0xab, - 0x3e, 0x5f, 0x9b, 0x4d, 0x0d, 0xcd, 0xbc, 0x62 }, - { 0x26, 0x03, 0xcb, 0xdf, 0x69, 0x75, 0xe3, 0x68, - 0x83, 0x7f, 0x95, 0x1a, 0x00, 0x49, 0xfd, 0xc3, - 0xc4, 0xb2, 0x39, 0xf0, 0x82, 0xf6, 0xbf, 0x89, - 0x5d, 0xb8, 0xf3, 0x27, 0x05, 0xe6, 0x9c, 0xf3 }, - { 0x27, 0x50, 0x11, 0x93, 0xe4, 0x61, 0xca, 0xce, - 0x55, 0x32, 0xfa, 0xd5, 0xd5, 0xb2, 0x7e, 0x01, - 0x16, 0x57, 0x92, 0xe0, 0x4f, 0x24, 0x21, 0x93, - 0x2f, 0x39, 0x28, 0xaf, 0x9f, 0xcd, 0xa4, 0xf3 }, - { 0x27, 0xa8, 0x41, 0xae, 0xcf, 0xe0, 0xa1, 0x39, - 0x37, 0x51, 0xc2, 0x55, 0xf9, 0x06, 0xdb, 0x9e, - 0x88, 0x6b, 0xba, 0x4d, 0x7c, 0x44, 0xec, 0x63, - 0xce, 0x7d, 0xc6, 0xde, 0xc1, 0x8b, 0xb9, 0x20 }, - { 0x28, 0x07, 0x10, 0x60, 0x44, 0x03, 0x45, 0xd0, - 0x0e, 0x80, 0xb9, 0xd7, 0xcb, 0xe1, 0x87, 0xc1, - 0xd8, 0xb0, 0xf2, 0xef, 0x5d, 0x0a, 0xac, 0x9c, - 0xce, 0xef, 0x9a, 0x8c, 0x5a, 0x06, 0xf3, 0x02 }, - { 0x28, 0xd9, 0x51, 0x84, 0xb5, 0xea, 0x14, 0x0f, - 0x47, 0x4f, 0x3a, 0xf6, 0xce, 0x70, 0x52, 0xe8, - 0x59, 0x3c, 0xf3, 0xa5, 0x01, 0x0f, 0x52, 0x24, - 0x1a, 0x1e, 0x36, 0x64, 0x60, 0xe5, 0x91, 0x9e }, - { 0x29, 0x01, 0x93, 0xe3, 0x7a, 0x38, 0x87, 0xfd, - 0x36, 0x15, 0xdf, 0x12, 0x2e, 0x95, 0x21, 0x17, - 0x42, 0x15, 0xee, 0x68, 0xf7, 0x44, 0xb2, 0xfa, - 0x35, 0xd2, 0x9c, 0x5d, 0xf1, 0x08, 0xf5, 0x5b }, - { 0x2a, 0x0f, 0x70, 0x67, 0x6e, 0x18, 0x4d, 0x49, - 0x39, 0xa4, 0x04, 0xde, 0x35, 0xac, 0x84, 0xab, - 0x81, 0xaf, 0xec, 0x36, 0x17, 0xe7, 0xe1, 0xbf, - 0x34, 0x67, 0xd4, 0x19, 0x25, 0x5d, 0xd8, 0x17 }, - { 0x2a, 0xa6, 0x47, 0x8c, 0xc7, 0x5d, 0x67, 0xa8, - 0xca, 0x55, 0xb2, 0xe1, 0x63, 0xfd, 0xbb, 0xbc, - 0x9d, 0x74, 0xb4, 0xe5, 0xf3, 0x7b, 0x7d, 0xbd, - 0x13, 0xc9, 0x4e, 0x85, 0x8d, 0x40, 0xda, 0xd0 }, - { 0x2c, 0x82, 0x47, 0x4f, 0x0e, 0xf6, 0xcb, 0x65, - 0x0a, 0x13, 0xef, 0x20, 0x99, 0x6e, 0x65, 0x7b, - 0x67, 0x24, 0xf0, 0xa0, 0xd5, 0xee, 0x24, 0x6d, - 0x26, 0xbb, 0xfa, 0x0a, 0xbb, 0x2c, 0x22, 0xe1 }, - { 0x2c, 0x9b, 0xe1, 0x2d, 0xa4, 0x99, 0xea, 0xbb, - 0x2f, 0xfd, 0xf9, 0x91, 0x6f, 0x2b, 0x27, 0x18, - 0x81, 0x19, 0x5b, 0x74, 0x19, 0xbd, 0x1e, 0xef, - 0x8d, 0x50, 0x77, 0x2a, 0xb9, 0x46, 0x4a, 0xa8 }, - { 0x2c, 0xbd, 0xd5, 0x6c, 0xe4, 0xb4, 0x06, 0x09, - 0xe9, 0xaa, 0x52, 0x1e, 0xaa, 0x76, 0xac, 0x7e, - 0x55, 0x73, 0x7b, 0xf4, 0x3e, 0x2b, 0x0c, 0x30, - 0xdd, 0xcf, 0x59, 0x87, 0x2e, 0xab, 0xe7, 0x7b }, - { 0x2d, 0xde, 0xe4, 0x5f, 0x72, 0x78, 0x38, 0xde, - 0xad, 0xe6, 0x7e, 0x9c, 0xa7, 0x05, 0xeb, 0xb4, - 0xc2, 0xe9, 0x40, 0xae, 0x1b, 0x9d, 0x62, 0x35, - 0x72, 0x18, 0x04, 0x58, 0x31, 0xe9, 0x8f, 0xde }, - { 0x2e, 0x5d, 0xd2, 0x55, 0x09, 0x6d, 0x64, 0x83, - 0x10, 0x5c, 0xb6, 0x03, 0x6c, 0x59, 0x17, 0x57, - 0xfd, 0x98, 0x49, 0x70, 0x66, 0x05, 0x3f, 0x83, - 0x39, 0xe4, 0xd8, 0xd0, 0xc3, 0x75, 0x49, 0x03 }, - { 0x2e, 0xd2, 0x05, 0x8f, 0x39, 0xea, 0xba, 0x5c, - 0xb3, 0xd7, 0xdf, 0x24, 0xca, 0x74, 0xa7, 0x7d, - 0xdc, 0x12, 0x06, 0x01, 0x52, 0x7b, 0x0f, 0x51, - 0x06, 0x91, 0x05, 0xca, 0x88, 0x37, 0x6e, 0x20 }, - { 0x30, 0x7b, 0x09, 0x34, 0xef, 0x97, 0x85, 0xe7, - 0x08, 0xed, 0x48, 0x1a, 0x99, 0x7a, 0x8a, 0x88, - 0xb7, 0xbf, 0x22, 0xdd, 0x26, 0xaa, 0x17, 0x17, - 0x31, 0xb8, 0xf7, 0xe0, 0xd5, 0x97, 0xb7, 0x08 }, - { 0x30, 0xe0, 0x69, 0x80, 0x9c, 0x79, 0x90, 0xf0, - 0xb5, 0xf2, 0x66, 0xe8, 0x94, 0x59, 0x96, 0x42, - 0xe8, 0x53, 0x50, 0xab, 0x82, 0x81, 0x05, 0x34, - 0xc7, 0xf3, 0xfd, 0x67, 0x0c, 0x1b, 0xeb, 0x18 }, - { 0x31, 0x53, 0x47, 0x52, 0xb6, 0xf5, 0x48, 0x20, - 0x91, 0x5c, 0x39, 0x5b, 0xee, 0x97, 0x5b, 0xc5, - 0x4e, 0x3f, 0x07, 0xc0, 0x8c, 0xd3, 0x4c, 0x5a, - 0x51, 0x15, 0xde, 0xf0, 0x17, 0xdb, 0x2b, 0x54 }, - { 0x31, 0xb8, 0x3e, 0x01, 0x90, 0x98, 0x95, 0xbc, - 0x74, 0x2d, 0x6b, 0xe8, 0x40, 0x0a, 0xde, 0x51, - 0xb2, 0x09, 0x83, 0xf6, 0x83, 0xa2, 0xaa, 0xee, - 0xb2, 0x5f, 0x58, 0xdf, 0x98, 0x1b, 0xde, 0x0d }, - { 0x32, 0xef, 0x13, 0x33, 0x86, 0xbf, 0x0c, 0x63, - 0xcf, 0x29, 0xd6, 0x2b, 0x0d, 0x76, 0x88, 0x9e, - 0x9d, 0x9d, 0x53, 0x2e, 0xe4, 0x90, 0x38, 0x94, - 0x4d, 0xbc, 0x21, 0x49, 0xd8, 0xca, 0xa5, 0xd1 }, - { 0x33, 0xd1, 0x6c, 0xd9, 0xe8, 0x2e, 0xdf, 0xfd, - 0x0b, 0x3a, 0xfb, 0x46, 0xa6, 0x84, 0xc5, 0xa0, - 0xd1, 0x2f, 0x2b, 0x40, 0x58, 0x6d, 0x53, 0x2f, - 0x6a, 0xab, 0x54, 0xce, 0xbc, 0x42, 0x33, 0xd3 }, - { 0x34, 0x06, 0x4f, 0xf9, 0x3b, 0x27, 0x4c, 0xf5, - 0xa7, 0x24, 0xec, 0x19, 0x64, 0x50, 0x4a, 0x71, - 0x0a, 0xb9, 0x7b, 0xa1, 0x10, 0x3c, 0xd9, 0xb9, - 0x8c, 0x81, 0xd0, 0xab, 0xcf, 0x3b, 0x19, 0xbd }, - { 0x34, 0x65, 0xc2, 0xf9, 0xa0, 0xcf, 0x36, 0xe5, - 0xee, 0xf0, 0x27, 0x1c, 0x52, 0x91, 0x2d, 0x58, - 0x6f, 0xb2, 0x0b, 0x94, 0x43, 0xe7, 0xd5, 0x82, - 0xa3, 0xe2, 0x23, 0x93, 0xfa, 0xc8, 0x1b, 0xb4 }, - { 0x34, 0x87, 0x46, 0xbf, 0xd4, 0x98, 0xc3, 0xf5, - 0xc8, 0x68, 0x5e, 0xea, 0xac, 0x57, 0x87, 0x2d, - 0x3b, 0x47, 0xe6, 0x02, 0xf4, 0x97, 0xe9, 0xf0, - 0x28, 0x54, 0x12, 0x32, 0x59, 0xfb, 0xe1, 0x69 }, - { 0x36, 0x45, 0xef, 0x7f, 0x5d, 0x15, 0xa5, 0x46, - 0x7e, 0x85, 0x30, 0x7d, 0xda, 0x15, 0xcb, 0xbb, - 0x55, 0xb7, 0x30, 0xae, 0xf8, 0xef, 0x9c, 0x71, - 0x5d, 0x7d, 0x9f, 0xb4, 0x7f, 0xdf, 0x33, 0xad }, - { 0x36, 0xb4, 0xfe, 0x74, 0x3b, 0x6d, 0xf4, 0x4a, - 0x71, 0x3e, 0x91, 0x4c, 0xab, 0xfb, 0xf2, 0xbe, - 0x60, 0x24, 0x9b, 0x46, 0x43, 0x4d, 0x04, 0x43, - 0x59, 0x12, 0x5a, 0x10, 0x6a, 0x37, 0xeb, 0x1c }, - { 0x36, 0xf5, 0xa9, 0x7d, 0x79, 0x3f, 0x84, 0x97, - 0x44, 0xd6, 0xab, 0x39, 0xb7, 0xa8, 0x18, 0xf8, - 0x17, 0x6e, 0x65, 0x20, 0xdc, 0x86, 0x3d, 0xce, - 0x43, 0xb3, 0x98, 0xc3, 0x0b, 0x5e, 0xdb, 0x09 }, - { 0x38, 0x23, 0x4e, 0x55, 0x9d, 0x30, 0x27, 0xd1, - 0x61, 0xda, 0x8c, 0x98, 0x88, 0x04, 0x9a, 0x4d, - 0x20, 0xac, 0xf2, 0x00, 0x90, 0xad, 0x1a, 0x22, - 0x2b, 0x73, 0x9a, 0xc8, 0x6e, 0xb7, 0x6f, 0x06 }, - { 0x39, 0x02, 0x27, 0xce, 0x88, 0x1c, 0x71, 0x8b, - 0x59, 0xa6, 0xbc, 0x31, 0x90, 0xd5, 0x17, 0xe7, - 0x1e, 0x1e, 0x58, 0x66, 0x93, 0xc8, 0xbf, 0x8a, - 0x30, 0x27, 0x26, 0x20, 0x13, 0xfe, 0x16, 0x63 }, - { 0x39, 0x21, 0x5c, 0xaa, 0x37, 0x1a, 0xbe, 0x57, - 0x6a, 0xb9, 0x3b, 0x18, 0xc2, 0xf3, 0x75, 0x5e, - 0xe2, 0x6f, 0x8c, 0x3a, 0xdb, 0x75, 0x9b, 0x6f, - 0x34, 0x78, 0x9f, 0xb8, 0xec, 0xf0, 0x54, 0x28 }, - { 0x39, 0x7d, 0x00, 0x6e, 0xf8, 0xaf, 0xb2, 0x0f, - 0x43, 0x61, 0xa6, 0xc9, 0x72, 0xf0, 0xc5, 0x7c, - 0xc0, 0x87, 0x74, 0x01, 0x06, 0x12, 0x78, 0x3f, - 0xba, 0xbc, 0xb8, 0xd6, 0xf6, 0x03, 0x9e, 0x2c }, - { 0x3a, 0xcf, 0x85, 0x3c, 0x4e, 0x45, 0x02, 0xbd, - 0x82, 0xd5, 0x85, 0xd5, 0xe0, 0x82, 0xc4, 0xb3, - 0xad, 0x03, 0xcd, 0xb6, 0xb5, 0x05, 0xca, 0x80, - 0x47, 0x19, 0x88, 0xec, 0x4c, 0x58, 0x99, 0x9e }, - { 0x3a, 0xea, 0x2c, 0xef, 0xae, 0x63, 0x44, 0xff, - 0xae, 0x67, 0x49, 0x4c, 0x68, 0x4e, 0x1e, 0xbf, - 0x87, 0x95, 0x40, 0xb5, 0x3d, 0x40, 0xf5, 0x16, - 0x9f, 0x78, 0x89, 0x7f, 0x1b, 0x38, 0xab, 0x66 }, - { 0x3b, 0x47, 0x85, 0x0b, 0xf8, 0x4c, 0x4c, 0xf2, - 0xca, 0x6c, 0x31, 0xb3, 0x78, 0x39, 0xc9, 0x50, - 0x76, 0x63, 0x70, 0xd7, 0xf4, 0xb6, 0x4a, 0xd0, - 0x18, 0x55, 0xca, 0xcf, 0xe3, 0x51, 0x2f, 0xc3 }, - { 0x3b, 0xaa, 0x31, 0x31, 0x70, 0x68, 0xac, 0xe0, - 0x89, 0xae, 0xb4, 0xa8, 0x8d, 0x7e, 0xde, 0xbe, - 0x94, 0xab, 0x4a, 0xce, 0x46, 0xbb, 0xd2, 0x68, - 0x3e, 0x3f, 0xdf, 0xf5, 0x59, 0x30, 0x0f, 0x93 }, - { 0x3c, 0x38, 0x36, 0x2e, 0x16, 0x8b, 0xb4, 0xa7, - 0x59, 0xc4, 0x80, 0x55, 0x1c, 0xb1, 0x65, 0x6f, - 0x6a, 0x96, 0x8b, 0x9b, 0x43, 0xcb, 0xe0, 0xd7, - 0x39, 0x75, 0x4a, 0xb7, 0x8a, 0x28, 0x87, 0x0e }, - { 0x3c, 0x84, 0xa8, 0xb3, 0x4d, 0x0f, 0x95, 0xca, - 0xc6, 0xfa, 0xaa, 0xb6, 0x22, 0xc2, 0x74, 0x46, - 0xb4, 0xc4, 0x72, 0xdf, 0x34, 0x53, 0xd7, 0x54, - 0x64, 0xc0, 0x96, 0x23, 0x86, 0x56, 0xb9, 0xd4 }, - { 0x3d, 0x14, 0x47, 0x2d, 0xce, 0x4a, 0xfd, 0xc2, - 0x27, 0x6c, 0x81, 0x47, 0x97, 0xc7, 0xbc, 0x7a, - 0x6c, 0x14, 0xf7, 0x95, 0x3e, 0x7e, 0x9f, 0xea, - 0x69, 0x51, 0x04, 0x0f, 0x2d, 0xaf, 0xbe, 0x9a }, - { 0x3e, 0x8e, 0x9b, 0xad, 0x8e, 0xd9, 0xb5, 0x72, - 0x38, 0x2e, 0x59, 0x8d, 0x2d, 0x73, 0x67, 0xe1, - 0xfd, 0x6a, 0xf6, 0x95, 0x25, 0x00, 0x9d, 0x67, - 0xb4, 0xe8, 0xaf, 0x80, 0xd9, 0x15, 0x85, 0x49 }, - { 0x3f, 0x27, 0xbd, 0xca, 0x9b, 0x0e, 0x42, 0xf3, - 0xf6, 0xd0, 0x91, 0x2c, 0x92, 0xe2, 0xda, 0x65, - 0xcb, 0x35, 0x8f, 0x0b, 0x8f, 0x80, 0x5b, 0xec, - 0x5d, 0xe9, 0x32, 0x51, 0xd9, 0xc4, 0xb1, 0x99 }, - { 0x3f, 0x2e, 0xa6, 0x4e, 0xfb, 0xd6, 0xbf, 0xc4, - 0x0a, 0xf0, 0xad, 0x46, 0xa4, 0xa2, 0x57, 0x84, - 0x19, 0xd8, 0x68, 0x6e, 0x38, 0x98, 0x8b, 0x91, - 0x47, 0x01, 0x8c, 0x36, 0x29, 0x31, 0xe4, 0xf9 }, - { 0x3f, 0x4f, 0x28, 0x8b, 0xaf, 0x5b, 0xde, 0x86, - 0x72, 0xd6, 0xad, 0xd1, 0x50, 0xe3, 0x23, 0x79, - 0x49, 0x9a, 0x16, 0xc5, 0x81, 0xfb, 0x77, 0x37, - 0xec, 0x49, 0x80, 0xe4, 0xf9, 0xc3, 0x3d, 0x4d }, - { 0x3f, 0x92, 0x54, 0x89, 0x64, 0xcc, 0xde, 0xfb, - 0x29, 0x96, 0x5a, 0x27, 0xc1, 0x6c, 0x2f, 0xed, - 0x28, 0xd9, 0xb9, 0x14, 0x0e, 0x4f, 0xb5, 0x5b, - 0x37, 0x22, 0x4c, 0x67, 0xb2, 0xa0, 0x55, 0x1f }, - { 0x40, 0x58, 0xec, 0x4a, 0x7a, 0x7b, 0xa0, 0xb8, - 0x65, 0xa7, 0x39, 0xa0, 0x0c, 0x85, 0xf3, 0x44, - 0x58, 0x79, 0xd6, 0x5e, 0x1d, 0x42, 0x2e, 0xed, - 0x07, 0x65, 0x5a, 0x8e, 0x3e, 0xc3, 0x18, 0xcf }, - { 0x41, 0x29, 0x6b, 0x9f, 0xaa, 0xd6, 0x41, 0x33, - 0xfc, 0xcb, 0xa6, 0xba, 0x74, 0x54, 0x11, 0xec, - 0xc9, 0x11, 0xfd, 0x8e, 0xd5, 0x41, 0x90, 0x0f, - 0x9e, 0x20, 0x36, 0x08, 0xee, 0xa3, 0x59, 0x2d }, - { 0x41, 0x88, 0x71, 0x80, 0x7e, 0xdc, 0xed, 0xa8, - 0x57, 0xd7, 0xe8, 0x48, 0x31, 0x71, 0x81, 0xe1, - 0xe8, 0x33, 0xf5, 0x4c, 0x89, 0xa6, 0x11, 0xa2, - 0x30, 0xad, 0x99, 0x06, 0x5d, 0x45, 0x86, 0x95 }, - { 0x41, 0xa6, 0x8d, 0xfd, 0x90, 0xda, 0x6d, 0x12, - 0x09, 0x84, 0x85, 0xbf, 0x6f, 0x87, 0x24, 0x5f, - 0x4e, 0xc0, 0x54, 0x71, 0xda, 0x59, 0xd0, 0x81, - 0x06, 0x01, 0x53, 0xa2, 0x22, 0x25, 0x23, 0x7f }, - { 0x42, 0x08, 0x71, 0xd8, 0xac, 0x49, 0x3c, 0xf9, - 0x46, 0x8b, 0xb3, 0x76, 0x97, 0x6d, 0x65, 0x5e, - 0xf0, 0xaf, 0xaa, 0xc2, 0x3d, 0x77, 0x00, 0x92, - 0x20, 0xc3, 0xaf, 0x8b, 0xdd, 0x37, 0x5a, 0x24 }, - { 0x42, 0x5d, 0x4e, 0xbf, 0x1b, 0xde, 0x0b, 0xf8, - 0xd1, 0xdb, 0xd3, 0x3d, 0x8d, 0x16, 0x34, 0xc4, - 0xfa, 0xfe, 0xb6, 0xf8, 0x05, 0xf1, 0xcc, 0xb5, - 0x34, 0xac, 0xb7, 0x2a, 0xed, 0xa2, 0xcd, 0x0a }, - { 0x44, 0x12, 0x63, 0x80, 0xa0, 0x73, 0xfe, 0xa1, - 0xa2, 0x00, 0x4f, 0x71, 0x1d, 0xf2, 0xca, 0x47, - 0xc2, 0xc4, 0xb4, 0xff, 0x64, 0x4e, 0x76, 0xaf, - 0xbe, 0x27, 0x97, 0xc9, 0x63, 0x7c, 0x6a, 0xf9 }, - { 0x44, 0x25, 0xdd, 0xfb, 0xba, 0xfb, 0xe1, 0xaa, - 0xce, 0x25, 0x85, 0x70, 0x48, 0x96, 0x9d, 0xc8, - 0x9d, 0xf5, 0x97, 0x7b, 0xb2, 0xe3, 0x34, 0x7c, - 0x9c, 0xeb, 0x0e, 0x5a, 0x7b, 0x68, 0xc5, 0x31 }, - { 0x45, 0x63, 0xcf, 0x13, 0xc2, 0x49, 0x2c, 0xaa, - 0x92, 0xf5, 0x5b, 0x17, 0x26, 0x3a, 0xdd, 0x72, - 0x04, 0xa8, 0x0f, 0xe6, 0x24, 0x0c, 0x4d, 0x63, - 0xe8, 0x39, 0x59, 0x58, 0xf6, 0x94, 0xcd, 0x33 }, - { 0x45, 0xcb, 0x86, 0xca, 0x97, 0x52, 0x29, 0xb7, - 0xd5, 0xda, 0xfc, 0x05, 0xeb, 0x0c, 0x53, 0x65, - 0x82, 0x3a, 0x91, 0xa9, 0x8b, 0x7d, 0xbe, 0x81, - 0xab, 0x5f, 0x17, 0x8b, 0x2d, 0xa4, 0xad, 0x9e }, - { 0x46, 0x9b, 0xd8, 0x04, 0xe9, 0x98, 0xae, 0x27, - 0x9a, 0xc3, 0xfe, 0x1b, 0x52, 0x88, 0x46, 0xe7, - 0xae, 0xc7, 0x6c, 0x56, 0xb8, 0x0b, 0x40, 0xf3, - 0x24, 0x20, 0x8f, 0x5a, 0x9f, 0x64, 0x5c, 0xb5 }, - { 0x46, 0xcd, 0x08, 0x08, 0x8d, 0x36, 0x06, 0x2c, - 0x56, 0x71, 0x09, 0x2c, 0x02, 0x76, 0x7a, 0x25, - 0x0d, 0xe7, 0x0b, 0xf3, 0xe1, 0x53, 0x63, 0x69, - 0x66, 0xe6, 0x6e, 0xc5, 0x7e, 0x8e, 0xe9, 0xf5 }, - { 0x47, 0x84, 0xf6, 0xcd, 0x59, 0x3d, 0x7b, 0x31, - 0x2e, 0xb1, 0xf6, 0x19, 0xe1, 0x11, 0xdf, 0x3b, - 0x48, 0x6d, 0x1b, 0xf8, 0x37, 0x15, 0xad, 0x8d, - 0xab, 0xa5, 0x72, 0xaf, 0xb2, 0x61, 0xd5, 0xbe }, - { 0x47, 0x8c, 0xdd, 0x82, 0x3f, 0x81, 0x7d, 0x21, - 0x8b, 0xf5, 0xdd, 0xa4, 0xc3, 0xe9, 0x9e, 0x7f, - 0xa3, 0x10, 0x9b, 0x67, 0xbd, 0x0c, 0x9b, 0x1f, - 0x40, 0x75, 0x96, 0x65, 0xb9, 0xec, 0x3f, 0xf2 }, - { 0x48, 0xc5, 0xd4, 0xff, 0x5d, 0x08, 0x4a, 0xc1, - 0x95, 0xb1, 0xa6, 0xa2, 0x19, 0xf8, 0x1b, 0xbd, - 0xf9, 0xd2, 0xe5, 0xc0, 0x70, 0xec, 0x97, 0xdf, - 0x3c, 0xb0, 0xb7, 0x3e, 0xf4, 0x70, 0xdc, 0xe9 }, - { 0x49, 0xdc, 0xf8, 0xfa, 0x68, 0xe9, 0x2b, 0x5c, - 0x21, 0xfe, 0xf9, 0x3d, 0x26, 0x0c, 0x24, 0x8c, - 0xe3, 0xbe, 0x98, 0x62, 0x68, 0x68, 0xe7, 0x5a, - 0x3f, 0x63, 0x34, 0xbb, 0x7d, 0xc1, 0x81, 0xec }, - { 0x4b, 0x1f, 0xc8, 0x2d, 0x24, 0x72, 0x92, 0x7a, - 0xc1, 0x7c, 0x58, 0x43, 0x07, 0xcb, 0x96, 0xd6, - 0xfd, 0xdb, 0x8d, 0x50, 0xa5, 0x29, 0x53, 0x07, - 0xd3, 0x0c, 0x75, 0x88, 0x59, 0x6a, 0xd4, 0x0b }, - { 0x4b, 0x51, 0xfc, 0x11, 0x4b, 0xac, 0x8e, 0x2d, - 0x2a, 0xf2, 0xae, 0x56, 0x84, 0x42, 0x9c, 0xca, - 0xab, 0x21, 0x39, 0xc9, 0xb3, 0x51, 0xbf, 0x7e, - 0x1b, 0x03, 0x0a, 0xe8, 0x62, 0x4a, 0xc1, 0x72 }, - { 0x4c, 0xd0, 0xd6, 0x7e, 0xcc, 0x3b, 0x01, 0xc8, - 0xc2, 0x63, 0x4e, 0x7a, 0x73, 0x76, 0x12, 0xf6, - 0x3a, 0x17, 0xff, 0x51, 0x0a, 0x77, 0xa8, 0x04, - 0xbb, 0x33, 0x1b, 0x2b, 0xe5, 0x8d, 0xfe, 0x0c }, - { 0x4d, 0xcf, 0xeb, 0xdc, 0x15, 0x4b, 0x0c, 0x85, - 0x46, 0x7f, 0x6f, 0x52, 0xad, 0x80, 0x4e, 0x19, - 0x1d, 0x5b, 0xc8, 0x13, 0x51, 0x72, 0x0e, 0xc0, - 0xd1, 0x9b, 0xd2, 0x5b, 0xf8, 0xf0, 0xa5, 0x53 }, - { 0x4f, 0x19, 0xdd, 0x12, 0x92, 0x4c, 0xe0, 0xc1, - 0x4f, 0x82, 0xc0, 0x56, 0xc7, 0xd4, 0x2b, 0xac, - 0x43, 0xd0, 0x13, 0x3a, 0xaf, 0x89, 0xc1, 0xef, - 0xdc, 0xfa, 0x3c, 0x3e, 0x47, 0x09, 0x7d, 0x59 }, - { 0x4f, 0xfb, 0x59, 0x19, 0xbc, 0x38, 0x5c, 0x8c, - 0x58, 0xe4, 0x62, 0xbf, 0x13, 0x22, 0x10, 0xd8, - 0xb7, 0x86, 0x12, 0xd0, 0xc2, 0x2a, 0x6b, 0x6a, - 0x68, 0x2e, 0x0b, 0x9e, 0x9c, 0x9f, 0x9a, 0x44 }, - { 0x50, 0xf4, 0x78, 0x1e, 0xb1, 0xc1, 0x46, 0x70, - 0xd9, 0xa5, 0x52, 0xc3, 0x49, 0x5f, 0xb9, 0xf6, - 0xae, 0x86, 0x8a, 0xb1, 0xc9, 0xd9, 0x83, 0xe0, - 0x82, 0x68, 0x65, 0xa1, 0x02, 0xec, 0xa6, 0xd3 }, - { 0x51, 0x6a, 0x2f, 0x33, 0x60, 0xc7, 0x6f, 0xc4, - 0x6a, 0xb2, 0x88, 0x7f, 0x88, 0xe8, 0xd0, 0x8e, - 0xfb, 0xd8, 0x44, 0x5a, 0xa7, 0xbb, 0xd2, 0x29, - 0xdf, 0xc7, 0x1a, 0x90, 0x4f, 0x55, 0xae, 0xb4 }, - { 0x52, 0x1f, 0x6c, 0x6a, 0x84, 0x36, 0x65, 0x79, - 0xca, 0x2d, 0xea, 0xeb, 0x23, 0x15, 0xbf, 0x8e, - 0x53, 0x1c, 0x9f, 0xa4, 0x7b, 0x89, 0x9d, 0xa2, - 0x72, 0x16, 0xa9, 0x98, 0x82, 0x86, 0xaf, 0xe5 }, - { 0x52, 0xff, 0x8b, 0x6e, 0x98, 0xb0, 0x96, 0x19, - 0x90, 0x03, 0xde, 0x97, 0xbc, 0xcf, 0xd2, 0xa7, - 0xf1, 0xac, 0x57, 0xa8, 0x31, 0x35, 0xb9, 0x55, - 0xff, 0x68, 0x63, 0x36, 0xa6, 0x91, 0xd5, 0xca }, - { 0x53, 0x79, 0x64, 0x58, 0xda, 0x97, 0xce, 0x36, - 0x78, 0xf2, 0xd1, 0xd9, 0xb2, 0xa5, 0xb2, 0xfb, - 0x30, 0x75, 0xea, 0xfa, 0xf6, 0xff, 0x04, 0x78, - 0xb5, 0x72, 0xdd, 0xfd, 0x70, 0x99, 0xae, 0xe2 }, - { 0x53, 0x82, 0xd6, 0xba, 0xb5, 0x78, 0x51, 0xd9, - 0xb5, 0x8c, 0x17, 0x54, 0x46, 0xbf, 0x2d, 0x1b, - 0xb7, 0x86, 0xa5, 0x30, 0xfb, 0xf0, 0xae, 0xcd, - 0x12, 0xea, 0xb8, 0xa9, 0xa5, 0xb4, 0x96, 0x60 }, - { 0x53, 0x9c, 0xa9, 0xe1, 0xf0, 0x6a, 0xf2, 0x10, - 0x7f, 0x96, 0xbf, 0x4b, 0x7d, 0xd4, 0xce, 0xcd, - 0x9e, 0xd1, 0x1a, 0x38, 0xd6, 0x70, 0x91, 0x69, - 0x9c, 0x56, 0x26, 0xe2, 0x7a, 0x1f, 0x54, 0xa5 }, - { 0x55, 0x21, 0xf9, 0x63, 0x57, 0x81, 0x58, 0xb8, - 0xd0, 0xe7, 0xc4, 0x91, 0xcd, 0xb8, 0x5c, 0x3d, - 0xe9, 0xd5, 0x2e, 0xa5, 0x1f, 0xfc, 0xb0, 0x93, - 0xd3, 0x12, 0x28, 0x11, 0x13, 0x14, 0x97, 0xeb }, - { 0x55, 0xd0, 0xeb, 0xe3, 0x2c, 0xba, 0x09, 0xf6, - 0x58, 0x4d, 0x9e, 0x7b, 0x57, 0x92, 0xa4, 0x03, - 0xc2, 0x1d, 0x39, 0xd6, 0xe1, 0xf5, 0xe8, 0xed, - 0x37, 0xb9, 0x3f, 0xa6, 0x1d, 0x88, 0x35, 0x16 }, - { 0x58, 0x1a, 0xde, 0x64, 0x84, 0x95, 0xb4, 0xb1, - 0x62, 0x9c, 0x3c, 0x7c, 0x78, 0xef, 0xbe, 0xf2, - 0x75, 0x06, 0x56, 0x65, 0xb2, 0x41, 0x1c, 0x0e, - 0x5f, 0xcf, 0xbc, 0x7e, 0xb4, 0xbe, 0x34, 0x0b }, - { 0x59, 0xc9, 0xe8, 0xdf, 0x03, 0x0b, 0x1c, 0xd5, - 0x89, 0xa8, 0xb3, 0x4f, 0xe7, 0x42, 0x51, 0xea, - 0xd5, 0xa5, 0xfb, 0xe9, 0xe6, 0x13, 0x67, 0xca, - 0x76, 0xaf, 0xd9, 0xdd, 0xd9, 0xc6, 0xf1, 0x6f }, - { 0x59, 0xe9, 0xfa, 0x2f, 0xf0, 0x76, 0x89, 0x33, - 0x28, 0x33, 0xc6, 0x40, 0xf5, 0x05, 0xfa, 0x24, - 0x09, 0xeb, 0x88, 0x93, 0x32, 0x57, 0xc1, 0x93, - 0xb0, 0x07, 0xd3, 0xa2, 0x89, 0x6a, 0x98, 0x50 }, - { 0x59, 0xee, 0x9b, 0x36, 0x80, 0xae, 0x20, 0x56, - 0x83, 0x9c, 0x0b, 0xf6, 0x9e, 0xe6, 0x63, 0x26, - 0x57, 0x16, 0xa8, 0xe2, 0x4c, 0xc6, 0x49, 0x95, - 0xfb, 0xa6, 0xcb, 0x6f, 0x0c, 0x12, 0x39, 0xdc }, - { 0x5a, 0x84, 0xaf, 0xe6, 0x74, 0x05, 0xab, 0xe8, - 0x4a, 0x0c, 0xd4, 0x2c, 0x2b, 0xa2, 0xe4, 0xc8, - 0x8f, 0x35, 0xe0, 0xa5, 0x95, 0xe5, 0x69, 0xa3, - 0xe1, 0x86, 0x69, 0x44, 0x40, 0x5b, 0xe7, 0x36 }, - { 0x5a, 0x8e, 0x86, 0x21, 0x2c, 0x06, 0x33, 0x94, - 0x94, 0xf8, 0x5b, 0x5f, 0x85, 0x11, 0xdf, 0x00, - 0x00, 0x23, 0x94, 0x07, 0x8f, 0xfc, 0x77, 0x4d, - 0x43, 0x6f, 0x0d, 0x63, 0x86, 0xd7, 0xa6, 0xf7 }, - { 0x5a, 0xc0, 0x98, 0x2d, 0xa0, 0xc8, 0x3d, 0x0b, - 0xa9, 0x38, 0x1a, 0x5c, 0xd8, 0x7b, 0x80, 0xd1, - 0x10, 0xf2, 0x6e, 0xe8, 0x39, 0x27, 0x1b, 0xc2, - 0x70, 0x60, 0x8f, 0xd1, 0x43, 0x7f, 0x55, 0xb0 }, - { 0x5c, 0x7f, 0xf0, 0x55, 0xc2, 0xfd, 0x03, 0x3f, - 0x34, 0xc4, 0xc4, 0xf7, 0xc4, 0xfb, 0x7d, 0xda, - 0xaa, 0xfb, 0x43, 0x56, 0xc5, 0x60, 0xc9, 0x9e, - 0xdf, 0xf0, 0x74, 0xda, 0x04, 0xaf, 0x65, 0x7c }, - { 0x5c, 0xd2, 0x44, 0x6a, 0x8e, 0x4a, 0x0f, 0xa7, - 0xe3, 0xcd, 0xf8, 0x00, 0x5d, 0xed, 0xce, 0xba, - 0xe9, 0xe6, 0x81, 0x9a, 0x8a, 0x69, 0x87, 0x31, - 0x55, 0x5b, 0x7d, 0xc9, 0xd0, 0xa2, 0x3f, 0xc0 }, - { 0x5c, 0xeb, 0xeb, 0xd8, 0x34, 0x01, 0xb7, 0x0b, - 0xac, 0xb5, 0x4f, 0x66, 0xa9, 0xb7, 0x78, 0x55, - 0x69, 0x6e, 0xce, 0x16, 0x7f, 0xe6, 0xc6, 0x0a, - 0x05, 0x16, 0x8b, 0xe4, 0x39, 0x19, 0xc8, 0x0f }, - { 0x5f, 0x8b, 0x88, 0x8e, 0xe9, 0x6c, 0x0c, 0x0f, - 0x5a, 0x91, 0x72, 0x90, 0xac, 0xa6, 0x5a, 0xfd, - 0x6e, 0xbd, 0xae, 0x05, 0xa0, 0x2a, 0xaf, 0x04, - 0x29, 0xe9, 0x72, 0xec, 0x01, 0x90, 0xec, 0xfc }, - { 0x62, 0x2e, 0xc3, 0xbe, 0x7c, 0xf5, 0xe4, 0xe6, - 0x3f, 0x74, 0x18, 0x69, 0x28, 0x74, 0x40, 0x05, - 0xcb, 0xb7, 0x8d, 0xf3, 0x06, 0xb8, 0x67, 0xc3, - 0xfc, 0xad, 0x5e, 0x2b, 0xa7, 0x53, 0x96, 0x83 }, - { 0x62, 0x6f, 0x7e, 0xb4, 0xfd, 0x9b, 0x71, 0xff, - 0xaa, 0x0c, 0x8e, 0xc9, 0x65, 0x54, 0x64, 0xe6, - 0x5e, 0x7f, 0x96, 0xcf, 0xa3, 0x82, 0x73, 0x97, - 0x41, 0x35, 0x66, 0xaa, 0x2c, 0xc1, 0xe5, 0x72 }, - { 0x63, 0x64, 0x15, 0x61, 0x77, 0xdc, 0xdf, 0x60, - 0x4d, 0xf9, 0x1e, 0x31, 0x32, 0x2e, 0x57, 0x74, - 0x69, 0x1e, 0x0c, 0x41, 0xfa, 0x0d, 0x2f, 0x25, - 0x7a, 0xd7, 0xf9, 0xf0, 0x25, 0x98, 0x14, 0x45 }, - { 0x65, 0x66, 0x00, 0xa4, 0x5e, 0x45, 0x6a, 0xba, - 0x5b, 0x00, 0x8d, 0x87, 0x91, 0x54, 0xb7, 0x69, - 0x0d, 0x7f, 0x27, 0x31, 0x02, 0x09, 0x7d, 0x8f, - 0xd8, 0xc3, 0xde, 0xab, 0x30, 0xd8, 0x4a, 0xb2 }, - { 0x65, 0xed, 0x61, 0xa8, 0x8c, 0x55, 0xef, 0xb0, - 0x38, 0x07, 0x1a, 0xee, 0xde, 0xf8, 0xe1, 0x83, - 0xe2, 0x37, 0x38, 0x46, 0x97, 0x26, 0xeb, 0x99, - 0x68, 0x0c, 0xd2, 0x44, 0x72, 0x73, 0x6b, 0xec }, - { 0x66, 0x50, 0xb2, 0xea, 0x64, 0x4c, 0x3f, 0x4e, - 0x8c, 0x9e, 0x3c, 0x46, 0xac, 0xea, 0xc4, 0x52, - 0x33, 0xd8, 0x66, 0xe3, 0x98, 0xff, 0x90, 0xeb, - 0x59, 0xb2, 0xc6, 0x25, 0x20, 0x82, 0xac, 0x04 }, - { 0x66, 0xbe, 0x7e, 0xa1, 0x13, 0x8b, 0xcb, 0xa4, - 0xde, 0x0b, 0x41, 0x28, 0x5d, 0x9a, 0x13, 0x3f, - 0xa7, 0xf5, 0x70, 0xa3, 0xc8, 0x13, 0x55, 0x79, - 0xb8, 0x60, 0x19, 0x9d, 0x0a, 0x51, 0x45, 0x7c }, - { 0x69, 0x01, 0x4b, 0xbc, 0x84, 0x29, 0xd8, 0x5f, - 0x41, 0xc2, 0x22, 0xd9, 0x7f, 0x7e, 0xd5, 0x35, - 0xcf, 0x81, 0x23, 0x9a, 0xf2, 0x7a, 0xcc, 0x88, - 0x70, 0xdc, 0xd4, 0x08, 0x34, 0x8b, 0x48, 0xba }, - { 0x69, 0x21, 0x1f, 0x36, 0x3a, 0x2d, 0xbe, 0x01, - 0x5b, 0x31, 0xcb, 0xd9, 0xfc, 0x5e, 0x94, 0xc2, - 0xf6, 0xf4, 0x3c, 0x58, 0xdb, 0xde, 0xe9, 0xe3, - 0xe4, 0x6b, 0x19, 0xd7, 0x59, 0xbb, 0xb8, 0x81 }, - { 0x69, 0x75, 0x67, 0xbb, 0xac, 0x94, 0xee, 0xc3, - 0xe6, 0xfa, 0x4a, 0x4e, 0x46, 0xfa, 0x51, 0x74, - 0x05, 0xf3, 0x77, 0xc0, 0xde, 0xe3, 0xd4, 0x29, - 0x91, 0x4e, 0x6b, 0x7e, 0xa0, 0x8c, 0xb1, 0xa6 }, - { 0x6a, 0xac, 0xc5, 0x09, 0x2f, 0x12, 0xbc, 0x94, - 0xa0, 0xad, 0x0e, 0x9e, 0xf6, 0x36, 0x43, 0x7d, - 0x36, 0x0d, 0xc7, 0xc9, 0xf1, 0x40, 0x44, 0x17, - 0xa3, 0x36, 0x91, 0x94, 0x4e, 0x76, 0x31, 0x36 }, - { 0x6b, 0x4a, 0x8c, 0xb6, 0x07, 0xf5, 0x1c, 0x83, - 0x0d, 0xe7, 0x20, 0xf4, 0xbb, 0xde, 0xdf, 0x49, - 0x10, 0x15, 0x13, 0xdf, 0xd1, 0xdb, 0x0b, 0x0a, - 0x97, 0xcc, 0x3f, 0xdd, 0x9a, 0x39, 0xc6, 0xe7 }, - { 0x6c, 0x8f, 0xd1, 0xe6, 0xe1, 0x1b, 0xaf, 0xa6, - 0x17, 0x78, 0x13, 0xa0, 0x44, 0x40, 0xb1, 0xb9, - 0x6a, 0x1c, 0xdb, 0x7c, 0x2d, 0x70, 0x3f, 0x55, - 0xde, 0x85, 0x7c, 0x80, 0xa8, 0x9e, 0x73, 0x25 }, - { 0x6c, 0xc6, 0xdc, 0xda, 0x58, 0xc6, 0x1f, 0xb2, - 0x86, 0x70, 0xd1, 0xc2, 0x01, 0x76, 0x57, 0xb0, - 0xc5, 0xd6, 0x1a, 0x26, 0xc9, 0xcb, 0xd1, 0xea, - 0x75, 0x5c, 0x68, 0x20, 0xb5, 0xf6, 0xd6, 0x7d }, - { 0x6d, 0x32, 0xf4, 0x93, 0x40, 0x56, 0xee, 0x17, - 0x14, 0xca, 0x72, 0x70, 0x3f, 0x64, 0x46, 0x9b, - 0x98, 0x58, 0xfc, 0x39, 0x96, 0x4b, 0x4c, 0x03, - 0x93, 0xb3, 0x7d, 0xde, 0xab, 0x8b, 0x19, 0x75 }, - { 0x6e, 0x1a, 0x88, 0x63, 0xf2, 0x93, 0x4b, 0x39, - 0x01, 0x23, 0x7e, 0x84, 0xd0, 0x76, 0x27, 0x04, - 0x23, 0x06, 0x78, 0x7f, 0x2d, 0xe0, 0x66, 0x30, - 0xbd, 0x37, 0xd8, 0x03, 0x94, 0x35, 0xbf, 0xca }, - { 0x6e, 0x99, 0x8d, 0xdd, 0xf2, 0x93, 0x9b, 0xfe, - 0x8c, 0xc5, 0x2a, 0x48, 0x0a, 0xc0, 0x6d, 0x69, - 0x71, 0xc5, 0xa3, 0xda, 0x97, 0xcf, 0x3e, 0xf0, - 0x1a, 0xf2, 0x9d, 0x74, 0x72, 0x62, 0x31, 0xe2 }, - { 0x6f, 0x3b, 0xb3, 0x4b, 0x5d, 0x32, 0x91, 0xdf, - 0xb3, 0xe4, 0x12, 0x71, 0xa1, 0xd7, 0x30, 0xcd, - 0xbc, 0xff, 0xc1, 0x0b, 0x68, 0x05, 0x9d, 0xcc, - 0xd3, 0x1c, 0x47, 0x4b, 0xb7, 0x44, 0x16, 0xe5 }, - { 0x6f, 0xbd, 0xcd, 0xf1, 0xb4, 0x37, 0x9f, 0xc4, - 0x73, 0xab, 0x5e, 0xea, 0x4e, 0xc2, 0xf4, 0x84, - 0xce, 0x91, 0xd1, 0x0e, 0x31, 0x34, 0x5f, 0x15, - 0xa7, 0x6a, 0x84, 0x85, 0xb8, 0xff, 0xfb, 0x7e }, - { 0x70, 0xb8, 0xec, 0xd5, 0x62, 0xec, 0x3d, 0x9f, - 0x48, 0x64, 0x75, 0x2a, 0x3a, 0x8c, 0x54, 0x39, - 0x93, 0xb4, 0x38, 0x72, 0x8f, 0xe2, 0x71, 0x81, - 0xf4, 0xc0, 0x8d, 0xe6, 0xa0, 0xd8, 0xb7, 0x9a }, - { 0x72, 0x1b, 0x1f, 0x92, 0x9d, 0xa7, 0xea, 0xf8, - 0x96, 0x24, 0x64, 0x7b, 0xa3, 0xcc, 0x4e, 0x1e, - 0xd1, 0x57, 0x54, 0xab, 0x83, 0x6e, 0x33, 0x58, - 0xb0, 0x35, 0xa1, 0xf2, 0x27, 0x4a, 0x43, 0xbe }, - { 0x72, 0x81, 0xda, 0x0d, 0x8c, 0xe9, 0xd5, 0x3e, - 0xa3, 0xd1, 0xf5, 0x93, 0x5c, 0x58, 0x21, 0xea, - 0x8d, 0x9a, 0xf1, 0xce, 0x0b, 0xca, 0xf8, 0x82, - 0x5d, 0x78, 0x3f, 0x37, 0xea, 0xc3, 0x4f, 0x40 }, - { 0x72, 0xe7, 0x49, 0x87, 0x21, 0x0c, 0x7e, 0xf6, - 0x67, 0x46, 0xe4, 0x9a, 0x96, 0xdf, 0x55, 0xcc, - 0x6f, 0xad, 0xf7, 0xa6, 0x31, 0xc7, 0xae, 0x3f, - 0x3e, 0x9e, 0x18, 0x72, 0x3d, 0xe5, 0x2a, 0x6e }, - { 0x73, 0x3b, 0x42, 0x24, 0x25, 0x8d, 0xee, 0x07, - 0x0e, 0xdf, 0xa3, 0x41, 0x1f, 0xbc, 0x9b, 0xad, - 0x31, 0x65, 0xbe, 0x66, 0x0f, 0x34, 0x0a, 0xa2, - 0x30, 0x8a, 0x5a, 0x33, 0x23, 0xfa, 0xbf, 0xa7 }, - { 0x74, 0x8e, 0xbb, 0x72, 0xd1, 0x02, 0x04, 0xf4, - 0x04, 0x10, 0xbe, 0x70, 0x80, 0xbf, 0xe7, 0xee, - 0x63, 0x1f, 0xc0, 0x4d, 0x1f, 0xdb, 0x50, 0x72, - 0x04, 0x4b, 0xfa, 0x55, 0x7a, 0xdf, 0x6e, 0x5a }, - { 0x74, 0xe2, 0xcc, 0xcf, 0x62, 0xd5, 0xb9, 0xf9, - 0x00, 0xb4, 0x14, 0x73, 0xca, 0x44, 0xe6, 0x87, - 0x96, 0x38, 0x74, 0x3d, 0x8f, 0xee, 0x66, 0xee, - 0x71, 0x8c, 0x18, 0xd8, 0xf1, 0x12, 0x15, 0xd1 }, - { 0x76, 0x98, 0x67, 0x60, 0xac, 0xfe, 0x55, 0x59, - 0xa2, 0xa2, 0xab, 0x2a, 0x4e, 0x85, 0x49, 0x83, - 0xc5, 0xfd, 0xe6, 0x73, 0xce, 0x8e, 0xb1, 0x71, - 0x23, 0x49, 0x48, 0x64, 0x86, 0x7a, 0x98, 0xb1 }, - { 0x78, 0x0c, 0x33, 0xfe, 0x95, 0x4c, 0xc4, 0xdb, - 0x39, 0x04, 0xd7, 0x6a, 0x68, 0x58, 0xbc, 0xd1, - 0x01, 0x7f, 0x52, 0xda, 0x59, 0x9d, 0x36, 0xda, - 0xe6, 0x66, 0xc0, 0x4e, 0x41, 0xaf, 0x8d, 0xcd }, - { 0x78, 0xc9, 0x30, 0x40, 0x5a, 0x72, 0x0d, 0x9f, - 0x00, 0x66, 0xdd, 0x88, 0xa2, 0xa8, 0xda, 0xfb, - 0xbe, 0x6c, 0xd6, 0x5d, 0x54, 0xb7, 0x76, 0x06, - 0x42, 0x1b, 0x45, 0x43, 0x8c, 0x65, 0x8a, 0xd4 }, - { 0x79, 0x8f, 0x83, 0xb1, 0xc4, 0xc6, 0x5c, 0x4d, - 0x5d, 0xea, 0x13, 0x03, 0x53, 0x53, 0xd8, 0xed, - 0xe5, 0xd7, 0x1d, 0x99, 0x47, 0xf4, 0x34, 0xfd, - 0xea, 0x0d, 0xbc, 0x1e, 0xc8, 0x2f, 0x45, 0x35 }, - { 0x7b, 0xfe, 0x47, 0xae, 0xba, 0x8b, 0x0a, 0x3a, - 0x94, 0x5a, 0x88, 0xd8, 0xef, 0x18, 0x91, 0xc9, - 0x89, 0x97, 0x8a, 0xbf, 0x12, 0x2e, 0xc5, 0xe0, - 0x51, 0x4b, 0xe3, 0x6c, 0x3a, 0x7f, 0x22, 0x9b }, - { 0x7d, 0x20, 0xc7, 0xa9, 0x27, 0x26, 0x2b, 0xe7, - 0x38, 0xd2, 0x58, 0xd0, 0xfd, 0x97, 0x6e, 0x9a, - 0xf3, 0x6e, 0xf7, 0x99, 0x5f, 0x05, 0xe2, 0x87, - 0x6a, 0x29, 0xae, 0xbc, 0x3a, 0x24, 0xaa, 0xce }, - { 0x7e, 0x2e, 0xdb, 0x9d, 0x38, 0xf9, 0x29, 0x3c, - 0xdd, 0xd6, 0x03, 0xb1, 0x75, 0xc9, 0xb2, 0x05, - 0xac, 0x0b, 0x55, 0x3a, 0x4b, 0xf5, 0xfb, 0x08, - 0xc2, 0x46, 0xec, 0xf9, 0xc8, 0x49, 0xdb, 0x28 }, - { 0x7f, 0x95, 0x9b, 0x06, 0x34, 0xda, 0x94, 0xfa, - 0xca, 0xda, 0xb0, 0x21, 0xcf, 0x94, 0x20, 0x78, - 0x16, 0x00, 0x36, 0x13, 0xef, 0x09, 0xeb, 0x54, - 0xf6, 0x48, 0x60, 0x50, 0x08, 0x19, 0x02, 0x75 }, - { 0x7f, 0x9a, 0x69, 0xcf, 0xa2, 0xf5, 0x0c, 0x13, - 0xe1, 0xb7, 0x11, 0xdd, 0x6b, 0x14, 0x69, 0x2b, - 0xdb, 0x77, 0xd9, 0xff, 0xd8, 0xc1, 0x10, 0xae, - 0x5d, 0x05, 0xa4, 0xcb, 0x73, 0x12, 0x37, 0x48 }, - { 0x7f, 0xcc, 0xa8, 0xb5, 0xf5, 0xe3, 0x3b, 0xca, - 0x6d, 0xe0, 0x9c, 0x14, 0xaf, 0xbb, 0xe0, 0xc3, - 0x41, 0x21, 0xac, 0xbb, 0x22, 0x22, 0x9f, 0x44, - 0xee, 0x5c, 0x3f, 0x4d, 0xde, 0x73, 0x50, 0x55 }, - { 0x80, 0x20, 0x56, 0xe1, 0xdb, 0x9d, 0x9b, 0x73, - 0x21, 0xd1, 0xff, 0xbb, 0xe1, 0x2f, 0x5c, 0xbe, - 0xde, 0xc3, 0x6d, 0x0b, 0x5e, 0xc2, 0xa4, 0xe1, - 0x8d, 0x99, 0x54, 0x36, 0x4c, 0xec, 0x81, 0x29 }, - { 0x80, 0x97, 0x63, 0x4c, 0xe3, 0x3d, 0x41, 0x53, - 0x3d, 0x41, 0x5d, 0xaf, 0xdb, 0x8b, 0xa1, 0x91, - 0xc0, 0x30, 0x52, 0xac, 0x8b, 0xaa, 0x25, 0x54, - 0x34, 0x77, 0x3a, 0x16, 0x4b, 0x91, 0x1d, 0x6e }, - { 0x80, 0xd0, 0x17, 0x09, 0x34, 0xd2, 0x2a, 0xea, - 0x73, 0x3f, 0x11, 0x5e, 0x52, 0x42, 0xc6, 0xb8, - 0x6d, 0x7f, 0xcf, 0xb4, 0x90, 0x4e, 0x65, 0xb7, - 0xb7, 0xb9, 0x07, 0xf2, 0xca, 0x94, 0xed, 0x71 }, - { 0x81, 0x1d, 0xf2, 0xf4, 0x73, 0x6f, 0x85, 0x62, - 0xe2, 0x02, 0xfd, 0x00, 0x75, 0x32, 0xf1, 0xde, - 0x40, 0x17, 0x86, 0x1e, 0xfa, 0xbe, 0x67, 0x34, - 0x20, 0xc2, 0x7f, 0x2e, 0x2a, 0x33, 0xfa, 0xc1 }, - { 0x81, 0x1e, 0x37, 0x86, 0x37, 0xb1, 0xd2, 0xcb, - 0xb1, 0x89, 0xaf, 0xd6, 0x74, 0x95, 0xfe, 0x8a, - 0xb9, 0xd8, 0x3a, 0x74, 0x2e, 0x35, 0x8c, 0xbb, - 0xdb, 0xd1, 0x54, 0x98, 0xbf, 0x9c, 0x7b, 0x56 }, - { 0x81, 0xa0, 0xf1, 0xd0, 0x29, 0x46, 0x8e, 0xe8, - 0x66, 0x36, 0x4a, 0x19, 0x8a, 0x26, 0x08, 0x58, - 0x30, 0xc2, 0xa4, 0x16, 0xe4, 0x9e, 0x22, 0x4c, - 0xe8, 0x09, 0x66, 0xfc, 0xc4, 0x99, 0xd6, 0x36 }, - { 0x82, 0x56, 0x8b, 0x3b, 0xb3, 0xc6, 0x55, 0xd7, - 0xf2, 0x2d, 0x8c, 0x97, 0xa5, 0x66, 0x9c, 0xc8, - 0x34, 0xa2, 0xdd, 0x7c, 0xda, 0xe7, 0x5a, 0x26, - 0x45, 0x59, 0x55, 0x16, 0x46, 0x55, 0x8e, 0x14 }, - { 0x82, 0x7c, 0x8c, 0x80, 0x11, 0x1f, 0xf2, 0x21, - 0xc3, 0xeb, 0x1e, 0xf5, 0xc0, 0xd5, 0xd4, 0x34, - 0x48, 0x31, 0x86, 0xe2, 0x09, 0x00, 0x75, 0x63, - 0x15, 0x8e, 0x9e, 0x76, 0xd2, 0x79, 0x0f, 0x1c }, - { 0x82, 0x92, 0x67, 0xc5, 0xad, 0x70, 0xe5, 0x45, - 0x18, 0x02, 0x3a, 0xb7, 0x85, 0xfa, 0x3c, 0xde, - 0xd6, 0x6f, 0x42, 0x5d, 0xe1, 0xf3, 0x2f, 0xcd, - 0x72, 0x1b, 0x49, 0x46, 0x3a, 0x5a, 0x5f, 0x5b }, - { 0x83, 0x34, 0xea, 0xb8, 0x1c, 0x60, 0x4e, 0x99, - 0xd5, 0x40, 0x51, 0x3e, 0xf2, 0xe3, 0x7a, 0xba, - 0x71, 0x4f, 0x07, 0xb2, 0xba, 0x01, 0x0a, 0xd7, - 0x1d, 0xc4, 0xe1, 0x1a, 0x92, 0x18, 0xc1, 0x8c }, - { 0x83, 0x54, 0x7a, 0xca, 0x3c, 0xed, 0x73, 0xdf, - 0x99, 0x14, 0xf3, 0x15, 0x60, 0x74, 0x63, 0x79, - 0x29, 0x4c, 0x76, 0x0e, 0xf9, 0xa8, 0xb7, 0x6e, - 0x00, 0x06, 0x46, 0xc7, 0x39, 0x07, 0x21, 0x65 }, - { 0x83, 0x89, 0xc8, 0x79, 0xb6, 0x3b, 0x82, 0x9d, - 0x2d, 0x39, 0xa8, 0xcf, 0xb7, 0x87, 0xe7, 0x72, - 0x77, 0xd5, 0xcf, 0xa3, 0xe3, 0x6f, 0xda, 0xcb, - 0xab, 0x4d, 0x18, 0xb2, 0xb0, 0x4e, 0x32, 0x94 }, - { 0x84, 0x23, 0xb3, 0xf1, 0xcc, 0x85, 0x2b, 0x49, - 0xcf, 0x81, 0xb7, 0xd5, 0xff, 0x51, 0xa7, 0xa5, - 0x6a, 0x84, 0x78, 0x3a, 0x2d, 0xf7, 0x43, 0x61, - 0xff, 0x2e, 0xee, 0x0f, 0x92, 0x12, 0xc1, 0x59 }, - { 0x84, 0x7b, 0x5f, 0x1e, 0xeb, 0x2a, 0x44, 0x13, - 0xc8, 0xfa, 0x37, 0x98, 0x21, 0x97, 0x37, 0xe1, - 0x92, 0xba, 0x72, 0x72, 0xa1, 0x08, 0xb7, 0x17, - 0x28, 0xa8, 0xd1, 0x65, 0x17, 0xf6, 0x1e, 0x9d }, - { 0x85, 0x31, 0xb2, 0xbf, 0xc5, 0x45, 0x79, 0xe8, - 0xf1, 0x8f, 0x27, 0xb2, 0xe6, 0xec, 0xc0, 0xf8, - 0x90, 0x64, 0xee, 0x86, 0x87, 0x0e, 0xcc, 0x8b, - 0xbe, 0x0c, 0xe6, 0x86, 0xec, 0xda, 0x2c, 0x17 }, - { 0x85, 0x76, 0x0f, 0x59, 0x51, 0x90, 0xe9, 0xb4, - 0x67, 0x8b, 0xbf, 0x44, 0xef, 0xb5, 0xcf, 0x8f, - 0x6b, 0x19, 0x37, 0xa9, 0xb8, 0x6b, 0x31, 0xb7, - 0x51, 0xbe, 0xcf, 0x72, 0x18, 0x03, 0xb0, 0x1c }, - { 0x85, 0xf0, 0x79, 0x36, 0xb4, 0x29, 0x1f, 0x36, - 0xd9, 0xb7, 0x5f, 0x42, 0xe8, 0xb7, 0xee, 0x8a, - 0x64, 0xe6, 0x32, 0xa1, 0x18, 0x11, 0x65, 0xfe, - 0x72, 0xb4, 0x88, 0x23, 0xc3, 0xd9, 0x9d, 0x9d }, - { 0x86, 0x12, 0x9f, 0xe7, 0x61, 0x99, 0x4d, 0x7b, - 0x64, 0xe4, 0x02, 0x85, 0x8f, 0x88, 0xc5, 0x2b, - 0x3e, 0xb9, 0xc0, 0x71, 0xff, 0xbe, 0x80, 0x02, - 0x80, 0xac, 0x8c, 0x0c, 0x6f, 0x79, 0xe7, 0xa6 }, - { 0x86, 0x19, 0x6b, 0x0f, 0xd3, 0x0f, 0x8f, 0x57, - 0x56, 0x98, 0xb5, 0xee, 0xf2, 0x69, 0xd0, 0x69, - 0x2f, 0x88, 0xad, 0xea, 0xc4, 0x83, 0x6a, 0x62, - 0x67, 0xab, 0xc8, 0x36, 0x23, 0x34, 0x00, 0x86 }, - { 0x86, 0xcf, 0xec, 0xbe, 0x82, 0xba, 0xdb, 0x93, - 0x14, 0x75, 0xf1, 0x9e, 0xcd, 0x6e, 0xa6, 0x7d, - 0x59, 0xc2, 0xc7, 0x00, 0x78, 0xb6, 0xcc, 0x56, - 0xbf, 0xdc, 0x27, 0x55, 0x47, 0x67, 0xf2, 0x3f }, - { 0x86, 0xd1, 0x8b, 0xcd, 0xde, 0x16, 0x45, 0x42, - 0x48, 0x6e, 0x56, 0x44, 0x2c, 0xe1, 0xb8, 0x8b, - 0x1a, 0x10, 0x73, 0x7c, 0xbd, 0x5e, 0xa4, 0xaa, - 0xb8, 0xd5, 0xb8, 0xaf, 0x51, 0xf5, 0x29, 0x09 }, - { 0x87, 0x5f, 0x57, 0x42, 0x4c, 0x90, 0x2b, 0x24, - 0xe8, 0x1c, 0x27, 0xd1, 0xca, 0xf2, 0x74, 0xb1, - 0x7d, 0x72, 0x0d, 0xf8, 0x07, 0x8b, 0x6f, 0x2a, - 0x5c, 0x3b, 0xb8, 0xd8, 0xdf, 0xf0, 0x55, 0x00 }, - { 0x88, 0x8d, 0x6d, 0x77, 0xd8, 0x1c, 0x62, 0x91, - 0xcb, 0x84, 0xd9, 0xd6, 0x56, 0x27, 0x82, 0xfd, - 0x2e, 0xb3, 0x42, 0x5d, 0x49, 0x1e, 0x68, 0x74, - 0x20, 0x28, 0x4b, 0x76, 0xa1, 0xde, 0xbf, 0xab }, - { 0x89, 0xaf, 0x0e, 0x54, 0xc7, 0x62, 0x77, 0x86, - 0x93, 0x52, 0x9d, 0x0a, 0x95, 0x0b, 0x78, 0x33, - 0xf5, 0xea, 0xba, 0xf3, 0x42, 0x79, 0x72, 0x60, - 0x7f, 0xb2, 0xc7, 0x0c, 0x96, 0xa3, 0x21, 0x61 }, - { 0x89, 0xda, 0xc7, 0x89, 0x6b, 0x46, 0xf2, 0xfc, - 0x8b, 0xea, 0x62, 0x11, 0xff, 0x98, 0xb6, 0x1f, - 0xaa, 0x15, 0x7b, 0xa8, 0xc4, 0xad, 0x6f, 0xd1, - 0x75, 0x92, 0x75, 0xce, 0x39, 0x41, 0xc3, 0x28 }, - { 0x8a, 0x09, 0x85, 0xbf, 0x86, 0xe8, 0xc9, 0xb9, - 0x17, 0xec, 0x84, 0xda, 0x2a, 0x56, 0x73, 0x1e, - 0x75, 0x2a, 0xa0, 0xdc, 0x52, 0x87, 0xc2, 0xbf, - 0x39, 0x51, 0x0b, 0xb3, 0xf0, 0xf2, 0x0a, 0xd1 }, - { 0x8a, 0xaf, 0x36, 0x3c, 0xc9, 0xd8, 0x44, 0x15, - 0xa7, 0xeb, 0x0d, 0x72, 0xda, 0x08, 0xb3, 0x58, - 0x80, 0x68, 0x55, 0x9c, 0xb0, 0xa9, 0xae, 0x92, - 0xb8, 0xf4, 0x60, 0x2e, 0xda, 0x23, 0x82, 0xaa }, - { 0x8a, 0xb2, 0x77, 0x62, 0xf4, 0xa2, 0xe3, 0x11, - 0x22, 0x04, 0x96, 0x98, 0x39, 0x99, 0xc8, 0xc4, - 0x60, 0x96, 0x3d, 0xfc, 0x1b, 0x88, 0x51, 0x11, - 0x1d, 0xa4, 0x1d, 0x3f, 0x3b, 0x0a, 0x6e, 0x94 }, - { 0x8a, 0xd1, 0xd5, 0x48, 0x95, 0x27, 0xb5, 0x28, - 0xe5, 0xb5, 0xd6, 0xa5, 0x95, 0x78, 0x87, 0x08, - 0x88, 0x8a, 0x3f, 0xb1, 0x9f, 0x2c, 0x7c, 0x8b, - 0x38, 0x07, 0x0e, 0x1f, 0x38, 0x98, 0x96, 0x8b }, - { 0x8a, 0xdb, 0x49, 0xd4, 0x15, 0x53, 0x56, 0x70, - 0x5b, 0x64, 0x42, 0x6a, 0x99, 0x0f, 0x58, 0xb3, - 0xa0, 0x71, 0xef, 0x78, 0x2e, 0x6c, 0x09, 0x53, - 0x07, 0xd7, 0x74, 0x74, 0xd5, 0xb5, 0x7a, 0x62 }, - { 0x8b, 0x3a, 0x10, 0x35, 0xc3, 0xfd, 0xf3, 0x45, - 0xfb, 0x70, 0x80, 0x44, 0x83, 0xa5, 0x04, 0x49, - 0xa3, 0xd7, 0x60, 0xc6, 0xba, 0x48, 0xf5, 0xb8, - 0x2d, 0x6b, 0xb2, 0x62, 0xed, 0x9d, 0xe3, 0x73 }, - { 0x8b, 0x3a, 0x75, 0xcb, 0xc3, 0x62, 0xd2, 0x35, - 0x57, 0x0e, 0x5d, 0xe7, 0x04, 0x29, 0x38, 0x70, - 0x8a, 0x1b, 0x0f, 0xce, 0xb4, 0x59, 0x86, 0x2a, - 0x38, 0x67, 0xb7, 0x34, 0xcd, 0xcb, 0x97, 0x94 }, - { 0x8c, 0x3e, 0x7c, 0x1d, 0xcc, 0x7d, 0xd8, 0xe7, - 0xd8, 0xbf, 0x7b, 0x5b, 0x3a, 0xe5, 0xe0, 0x27, - 0x2e, 0x81, 0x1a, 0xb9, 0xf3, 0xc3, 0xc5, 0x38, - 0xe5, 0x74, 0x71, 0x77, 0xe6, 0x2d, 0x62, 0x92 }, - { 0x8c, 0x7c, 0x65, 0x7b, 0xda, 0x13, 0xca, 0x62, - 0xf2, 0x9a, 0x65, 0xc6, 0xd5, 0x19, 0x3a, 0x93, - 0xcf, 0x6c, 0x58, 0x77, 0x18, 0xad, 0xca, 0x67, - 0x15, 0x8e, 0x97, 0xd3, 0x6a, 0x62, 0x3e, 0xca }, - { 0x8c, 0xa6, 0x79, 0x62, 0xc4, 0xa8, 0x09, 0x13, - 0x33, 0xf2, 0x4e, 0xfd, 0x60, 0xee, 0x70, 0xcf, - 0xed, 0xdb, 0xd6, 0x41, 0x59, 0x04, 0x70, 0x9e, - 0x78, 0x5c, 0x33, 0x1b, 0x1e, 0xf5, 0x8f, 0x8e }, - { 0x8e, 0x18, 0xfd, 0xbd, 0xb0, 0x08, 0x16, 0x00, - 0x35, 0xfa, 0xf5, 0x01, 0x5b, 0xe7, 0xda, 0xf4, - 0x63, 0xb5, 0xc4, 0x14, 0xea, 0xbc, 0x8b, 0x89, - 0xf3, 0xdb, 0xa2, 0x05, 0xab, 0x09, 0xa6, 0x43 }, - { 0x8f, 0x10, 0x10, 0x47, 0x93, 0xe8, 0x55, 0x42, - 0xbc, 0x06, 0x04, 0xd6, 0xcf, 0x21, 0x5f, 0x78, - 0x80, 0xbd, 0x6a, 0x4d, 0xd0, 0xfd, 0xf1, 0xe7, - 0xa5, 0xb9, 0xca, 0x12, 0x46, 0xf5, 0xc4, 0x09 }, - { 0x8f, 0x71, 0x27, 0x76, 0x2e, 0xe7, 0x51, 0x69, - 0xbd, 0xc3, 0x5b, 0x04, 0xa7, 0x28, 0xe9, 0xd3, - 0x1b, 0x7e, 0x4d, 0x37, 0x89, 0xaa, 0x2c, 0x46, - 0xd8, 0xa3, 0x1b, 0x3d, 0xfa, 0x81, 0xa9, 0x7e }, - { 0x8f, 0x94, 0x15, 0x92, 0x6f, 0x40, 0x49, 0xea, - 0x41, 0x8a, 0x30, 0x7c, 0x76, 0x36, 0xe4, 0x9b, - 0x14, 0x4f, 0xa5, 0x3e, 0x52, 0xe1, 0x04, 0x15, - 0x5f, 0x58, 0x03, 0x5e, 0x45, 0x41, 0xcd, 0x6e }, - { 0x90, 0xe2, 0x51, 0x86, 0x7f, 0x6b, 0x0c, 0x14, - 0xbd, 0x9b, 0x51, 0x0c, 0xfd, 0xa8, 0x48, 0x49, - 0x72, 0xfd, 0xf0, 0xe0, 0x6d, 0xc1, 0x1f, 0x5d, - 0x1d, 0x59, 0x0b, 0xe3, 0xfc, 0x38, 0xdf, 0xf0 }, - { 0x91, 0x90, 0xf8, 0x25, 0x51, 0x0c, 0x65, 0x98, - 0xe1, 0x9d, 0x17, 0xdb, 0xbe, 0x6e, 0x7c, 0x82, - 0x31, 0x86, 0x9c, 0xa7, 0xf6, 0xe3, 0x07, 0xa2, - 0xc2, 0xcc, 0x54, 0x77, 0x8d, 0x4a, 0x89, 0xb3 }, - { 0x92, 0x3f, 0x0f, 0x8c, 0x40, 0x5a, 0x02, 0xe6, - 0x82, 0xc4, 0xb4, 0x66, 0x5a, 0x7e, 0xe7, 0x16, - 0xaa, 0x57, 0xe0, 0xa5, 0x86, 0xc2, 0x4a, 0x16, - 0x5a, 0xad, 0x7e, 0x5b, 0xda, 0x22, 0x78, 0x24 }, - { 0x92, 0x71, 0x44, 0x12, 0x1c, 0x23, 0x63, 0x57, - 0x07, 0xe9, 0x40, 0x7f, 0x7f, 0xff, 0x6a, 0x64, - 0x63, 0x5d, 0x7c, 0xe9, 0x06, 0x66, 0xd4, 0x29, - 0x94, 0x09, 0x7a, 0xf4, 0x0c, 0x31, 0x36, 0xfb }, - { 0x94, 0xdc, 0x80, 0x07, 0x49, 0x1d, 0xa8, 0xbf, - 0xb7, 0x39, 0x14, 0xad, 0xce, 0xf7, 0x1a, 0x12, - 0x41, 0x58, 0xba, 0xd1, 0x7b, 0xa8, 0x8f, 0xa9, - 0x46, 0x57, 0x9b, 0xbc, 0x2d, 0x64, 0x97, 0x8d }, - { 0x95, 0x68, 0x33, 0xae, 0xe6, 0x61, 0x19, 0x26, - 0xe9, 0x52, 0x72, 0xa1, 0xf5, 0x88, 0xf9, 0x2a, - 0xf5, 0x2c, 0xae, 0x70, 0x7a, 0xcd, 0xcc, 0x82, - 0x63, 0x99, 0x7b, 0xfa, 0x8c, 0x71, 0x9c, 0xa8 }, - { 0x95, 0x89, 0xda, 0xc9, 0xec, 0xe7, 0x6d, 0xf5, - 0x72, 0x01, 0x96, 0xdc, 0x58, 0x6d, 0x17, 0x9d, - 0x73, 0x5d, 0xf7, 0x17, 0x92, 0x6c, 0x06, 0x1e, - 0xa7, 0x0c, 0x40, 0x85, 0x64, 0x8f, 0xf3, 0x12 }, - { 0x96, 0xa4, 0x59, 0x90, 0xfc, 0xd0, 0x1c, 0x9c, - 0x2a, 0xf0, 0x64, 0x5f, 0x87, 0xb9, 0x69, 0x8b, - 0x05, 0xaf, 0xe6, 0x94, 0x32, 0xeb, 0x57, 0x01, - 0x08, 0x20, 0x13, 0xba, 0xc5, 0xb0, 0x55, 0x60 }, - { 0x96, 0xeb, 0x44, 0xaa, 0x6a, 0x20, 0x49, 0xe6, - 0xba, 0xff, 0xe6, 0xb5, 0x21, 0xc4, 0xad, 0x8c, - 0x58, 0x77, 0x26, 0xca, 0xa0, 0x12, 0xe8, 0xfb, - 0x8e, 0x8e, 0x21, 0x89, 0x77, 0xbf, 0x1d, 0xf6 }, - { 0x97, 0x4f, 0x51, 0xa6, 0x04, 0x68, 0x48, 0xfa, - 0xa7, 0xb3, 0x3f, 0xd2, 0x39, 0x13, 0x86, 0x42, - 0x8b, 0xd5, 0x24, 0xea, 0xeb, 0xa8, 0x01, 0x4e, - 0x6d, 0x1f, 0xe2, 0x54, 0x38, 0x3f, 0x41, 0x79 }, - { 0x97, 0x8d, 0x6f, 0x1e, 0x9a, 0xa3, 0xa3, 0xce, - 0xb1, 0xad, 0xa6, 0x09, 0xe2, 0x00, 0x95, 0xfb, - 0xc3, 0x3a, 0x6b, 0xbc, 0x6a, 0x21, 0xd8, 0x0a, - 0x4e, 0xcb, 0x27, 0x3c, 0x60, 0xac, 0x2a, 0xc7 }, - { 0x99, 0xa5, 0x5f, 0x76, 0xcb, 0xea, 0x0f, 0x3e, - 0x60, 0x71, 0xd3, 0x82, 0x18, 0x1a, 0xf6, 0xcb, - 0x25, 0xbd, 0xc5, 0x87, 0x5e, 0x29, 0xf0, 0xf4, - 0xd7, 0x19, 0xa9, 0xd3, 0x5b, 0x5b, 0xd6, 0xbf }, - { 0x9a, 0x4b, 0x49, 0x93, 0xb4, 0xed, 0x8c, 0x27, - 0xe7, 0x7f, 0x3c, 0x8a, 0xaf, 0xdb, 0xdc, 0x11, - 0x1a, 0x36, 0xb7, 0x3c, 0xca, 0xdb, 0x87, 0x04, - 0x98, 0x25, 0x00, 0xd1, 0xb0, 0xf1, 0x09, 0xf2 }, - { 0x9a, 0xae, 0x9d, 0x45, 0xaa, 0x04, 0x03, 0x06, - 0x4b, 0xc5, 0xa7, 0x4d, 0xd0, 0x32, 0x5d, 0xa4, - 0x1e, 0x12, 0xcf, 0x58, 0x6c, 0x46, 0x2e, 0xe0, - 0x6c, 0x2b, 0xb4, 0x56, 0xf8, 0x44, 0x1c, 0x4f }, - { 0x9b, 0x8f, 0x9f, 0xc4, 0xaf, 0xa7, 0x04, 0x0d, - 0x4e, 0x59, 0x4d, 0x66, 0x7c, 0x44, 0x44, 0xb5, - 0x25, 0x88, 0x20, 0xc0, 0x8f, 0x89, 0x91, 0x0e, - 0xd3, 0x42, 0x1c, 0xb4, 0xa9, 0x7b, 0xb7, 0x9e }, - { 0x9c, 0x70, 0x8d, 0x5b, 0xab, 0x37, 0xf5, 0xb6, - 0xbc, 0x8a, 0x77, 0x53, 0x12, 0x57, 0x2a, 0xb2, - 0x79, 0x21, 0x6d, 0x55, 0x6d, 0xa7, 0x4a, 0xc2, - 0xa7, 0xc0, 0x41, 0xe8, 0xce, 0xb0, 0xbe, 0x0a }, - { 0x9d, 0x6b, 0xdf, 0xcf, 0x0c, 0xbf, 0xfe, 0xea, - 0x3b, 0x1a, 0xc7, 0xe9, 0x63, 0xcb, 0xb5, 0xf2, - 0x7f, 0xbd, 0xa8, 0x9d, 0x27, 0x77, 0xf6, 0x0e, - 0x56, 0x5b, 0x27, 0x78, 0x54, 0xef, 0xb0, 0x19 }, - { 0x9d, 0xac, 0x33, 0x14, 0xb2, 0x5b, 0xb7, 0x9a, - 0x39, 0xcd, 0x01, 0xec, 0x4b, 0x33, 0xa1, 0x2f, - 0x47, 0x51, 0x2f, 0x54, 0x09, 0xff, 0x09, 0x5d, - 0x40, 0xaa, 0xd6, 0x20, 0x84, 0xef, 0x15, 0xbe }, - { 0x9f, 0x24, 0x5c, 0x0a, 0x0e, 0xc6, 0x3a, 0xaa, - 0xcb, 0xf9, 0x69, 0xc6, 0xfc, 0x24, 0xa1, 0x07, - 0x15, 0x83, 0xb7, 0x79, 0xa5, 0x8a, 0xb6, 0x23, - 0xdd, 0x15, 0x31, 0xa2, 0xca, 0x9f, 0x87, 0x51 }, - { 0x9f, 0xaf, 0x1c, 0x11, 0xa3, 0xc7, 0xe2, 0x41, - 0xf8, 0x63, 0x71, 0x97, 0xe8, 0x99, 0x68, 0xdb, - 0x86, 0x6a, 0xd0, 0x1a, 0x5d, 0x4e, 0xd5, 0x34, - 0x59, 0x48, 0x65, 0xb9, 0x70, 0x75, 0xf2, 0x60 }, - { 0xa0, 0x05, 0x20, 0xb9, 0x68, 0xbf, 0xcb, 0x63, - 0x40, 0x87, 0x9f, 0xa8, 0x43, 0x82, 0x0c, 0xec, - 0x95, 0x45, 0x86, 0x0f, 0xe2, 0x9e, 0x2f, 0x8f, - 0xee, 0x00, 0xb0, 0x0f, 0xf8, 0x43, 0x42, 0x74 }, - { 0xa0, 0xc2, 0xd2, 0x07, 0xa4, 0x7e, 0x18, 0xd0, - 0x37, 0x14, 0xd5, 0xb3, 0x44, 0x5d, 0x88, 0xbe, - 0x81, 0xff, 0x5e, 0x1d, 0x16, 0x07, 0x3d, 0xc1, - 0x16, 0x6b, 0xb5, 0x44, 0x8f, 0xf6, 0x52, 0xdf }, - { 0xa1, 0x50, 0x03, 0x2f, 0x4e, 0xf5, 0xd4, 0xfe, - 0xb0, 0xae, 0x4a, 0xe1, 0xcd, 0x54, 0x35, 0xba, - 0x04, 0xa9, 0xb6, 0xa0, 0xf9, 0x0e, 0x2f, 0x3c, - 0x4b, 0x8a, 0x7b, 0x69, 0xe7, 0xc8, 0x7e, 0x43 }, - { 0xa1, 0x97, 0x7d, 0x0c, 0x92, 0x7c, 0x21, 0xeb, - 0x47, 0x6f, 0x67, 0xbe, 0xfe, 0xd6, 0xcf, 0x2c, - 0x61, 0xb7, 0x45, 0xf0, 0xce, 0x8d, 0x26, 0x58, - 0x3d, 0x03, 0xb2, 0x70, 0x02, 0xd5, 0xcd, 0xaf }, - { 0xa2, 0x6c, 0x37, 0x5e, 0xb3, 0x19, 0x6e, 0x28, - 0x3b, 0xec, 0x60, 0x3d, 0xb6, 0xbb, 0xda, 0xe2, - 0x49, 0x55, 0xe4, 0xba, 0x91, 0x0c, 0xd4, 0x2d, - 0x9e, 0xac, 0x55, 0xca, 0xc6, 0x10, 0x3a, 0xb9 }, - { 0xa3, 0xa4, 0xfc, 0x03, 0xe1, 0x75, 0xf2, 0x68, - 0x02, 0x57, 0x46, 0x34, 0xde, 0x70, 0x7d, 0x2f, - 0x92, 0xf4, 0xd0, 0xcb, 0x90, 0xcd, 0xb6, 0x1d, - 0xd1, 0x95, 0x8b, 0xcf, 0x0c, 0x55, 0x20, 0x86 }, - { 0xa6, 0x62, 0xfc, 0x81, 0xc9, 0x09, 0x34, 0xb9, - 0xb4, 0xd6, 0x30, 0xb5, 0xd8, 0x2e, 0x86, 0xf2, - 0x36, 0x3e, 0xc1, 0x5c, 0xcf, 0xcd, 0xaf, 0xa7, - 0xa2, 0x0c, 0x9b, 0x4e, 0x3a, 0x90, 0x0d, 0xd1 }, - { 0xa6, 0xa4, 0xa3, 0xf6, 0x1f, 0xa5, 0x8c, 0xe9, - 0x70, 0xb4, 0x58, 0xb7, 0xc3, 0x7c, 0x05, 0x2e, - 0xad, 0x1e, 0xb2, 0x0b, 0x85, 0x67, 0xe3, 0x51, - 0xad, 0x8e, 0x6f, 0xba, 0x49, 0xc2, 0x69, 0x2c }, - { 0xa6, 0xde, 0x6c, 0x3b, 0x8c, 0x14, 0x05, 0xcb, - 0xe1, 0x2d, 0xb4, 0x09, 0x97, 0x61, 0x71, 0xac, - 0xb5, 0x1f, 0xb3, 0xdc, 0xfb, 0xb7, 0x6e, 0xe3, - 0x84, 0x95, 0x39, 0xcd, 0x8a, 0xb0, 0x66, 0xdf }, - { 0xa8, 0x53, 0xad, 0xc1, 0xc2, 0x18, 0x59, 0xaf, - 0x7c, 0x46, 0x2b, 0x4a, 0xa0, 0xa5, 0x74, 0xca, - 0x9f, 0xee, 0xfb, 0x18, 0x5a, 0x1f, 0xdb, 0xb6, - 0xc1, 0x0e, 0x17, 0xd6, 0x01, 0xb7, 0x09, 0x8f }, - { 0xa8, 0xdf, 0xf0, 0x6a, 0x17, 0x35, 0xb4, 0x6d, - 0x17, 0xda, 0xeb, 0xc3, 0x43, 0x43, 0x18, 0x31, - 0x3b, 0x2d, 0x9e, 0x7c, 0x3e, 0xf4, 0x8f, 0x28, - 0x53, 0x75, 0x35, 0x13, 0xe1, 0xb2, 0x53, 0xa8 }, - { 0xa8, 0xe3, 0x8c, 0x6e, 0xc0, 0x93, 0xf5, 0xaf, - 0x53, 0x88, 0xf1, 0xe7, 0x66, 0xd7, 0x5f, 0xfb, - 0x57, 0xdd, 0xbe, 0x3e, 0x9d, 0xc2, 0xe0, 0xbe, - 0x57, 0xbb, 0x88, 0x36, 0x46, 0xc5, 0xc0, 0x32 }, - { 0xa9, 0x0b, 0x8d, 0xe1, 0x7f, 0x6b, 0x68, 0x37, - 0x56, 0x21, 0x2d, 0xb3, 0xab, 0x34, 0x89, 0x6e, - 0x91, 0x70, 0x93, 0x11, 0x3e, 0x47, 0xca, 0x35, - 0x96, 0x2e, 0xac, 0xca, 0x9c, 0xb3, 0x86, 0xf0 }, - { 0xaa, 0x4b, 0xb3, 0x6f, 0x51, 0xd3, 0xc5, 0x33, - 0xb5, 0x27, 0x23, 0xcf, 0x66, 0xa5, 0xa9, 0x9f, - 0xc1, 0x2f, 0x11, 0xd4, 0xcc, 0x12, 0x87, 0x56, - 0xa5, 0xa3, 0xe8, 0x9c, 0x57, 0xbb, 0x97, 0x51 }, - { 0xaa, 0xeb, 0xfe, 0x2d, 0x21, 0xb7, 0xe5, 0x35, - 0x1b, 0xb9, 0x99, 0x69, 0x44, 0x44, 0x19, 0xef, - 0x21, 0xc9, 0x68, 0x8c, 0xe0, 0x53, 0x24, 0x88, - 0x84, 0xca, 0xb0, 0xb8, 0x95, 0x10, 0x30, 0xff }, - { 0xab, 0x41, 0x28, 0x10, 0x9c, 0xab, 0x8a, 0x58, - 0x7c, 0x8f, 0xf4, 0xc7, 0xf6, 0x87, 0x34, 0x49, - 0x98, 0x18, 0xd1, 0x3f, 0x52, 0x26, 0x76, 0xd0, - 0x66, 0xb3, 0x52, 0x17, 0x6f, 0xd2, 0x35, 0x96 }, - { 0xab, 0x80, 0xd9, 0xba, 0x0a, 0xef, 0xad, 0x7b, - 0xec, 0xce, 0x7f, 0x5e, 0x61, 0x59, 0x9a, 0xf5, - 0x26, 0x69, 0xbf, 0x59, 0x50, 0x7f, 0x8e, 0xf1, - 0x99, 0x13, 0xc4, 0x2e, 0xe1, 0x29, 0xda, 0xf0 }, - { 0xab, 0xeb, 0x6a, 0xa0, 0xd1, 0xb0, 0xe0, 0x49, - 0xd6, 0x9d, 0xf8, 0x3a, 0xdd, 0x19, 0xf7, 0x26, - 0x8a, 0x38, 0xde, 0x6c, 0x00, 0x72, 0x60, 0x68, - 0xc2, 0xee, 0xe4, 0x55, 0x44, 0xf6, 0xd6, 0x7a }, - { 0xac, 0x1b, 0x4c, 0x64, 0x6c, 0xae, 0xfb, 0x10, - 0x8a, 0x54, 0xca, 0xb5, 0x4a, 0x96, 0xe9, 0x66, - 0x6e, 0x72, 0xa8, 0x20, 0x22, 0x44, 0xef, 0x3d, - 0x7c, 0xa9, 0x34, 0xdf, 0xcc, 0x24, 0xfc, 0xa7 }, - { 0xad, 0x69, 0x54, 0x5f, 0x9f, 0x85, 0x25, 0x5f, - 0xe4, 0x16, 0x51, 0x3d, 0x94, 0xdb, 0x31, 0x50, - 0x5f, 0x38, 0x4b, 0x52, 0x3c, 0x2c, 0xa2, 0x6e, - 0xdc, 0x0a, 0x54, 0x9a, 0x8f, 0x16, 0x26, 0xf9 }, - { 0xae, 0x03, 0x19, 0xfe, 0xa6, 0xa6, 0x5e, 0x84, - 0xe8, 0x54, 0xb5, 0x15, 0x50, 0xea, 0x44, 0x4f, - 0xa3, 0xb8, 0xbb, 0x50, 0xae, 0x93, 0x74, 0x01, - 0x3c, 0xfe, 0xf3, 0x88, 0x73, 0x5d, 0x0b, 0xd3 }, - { 0xaf, 0x1f, 0x37, 0x1f, 0x34, 0x84, 0x57, 0x51, - 0x65, 0x2d, 0xc7, 0x48, 0x23, 0xf3, 0x01, 0x5c, - 0x5a, 0x11, 0xca, 0x65, 0x3f, 0x28, 0x70, 0x1e, - 0xdd, 0x4a, 0x7e, 0x0d, 0x23, 0x17, 0x1b, 0xbb }, - { 0xaf, 0x6b, 0x80, 0x51, 0x47, 0x14, 0x0a, 0x0e, - 0x41, 0x81, 0xd8, 0x6a, 0x7e, 0x8f, 0x07, 0x69, - 0xb6, 0x1d, 0x46, 0xd7, 0xb6, 0xfa, 0xc6, 0xe6, - 0xf9, 0x59, 0x6d, 0xe9, 0x4a, 0xa8, 0xe2, 0xe8 }, - { 0xb0, 0x5c, 0x14, 0x33, 0x61, 0x75, 0x9b, 0xe1, - 0x52, 0xfd, 0x76, 0xa5, 0xff, 0xa4, 0x87, 0x2d, - 0xd4, 0x2e, 0xa0, 0x60, 0xae, 0x40, 0xa3, 0x83, - 0x13, 0xb7, 0xb5, 0x4a, 0xec, 0x06, 0x73, 0xc2 }, - { 0xb0, 0xe0, 0xe1, 0x6c, 0x5f, 0x69, 0x1f, 0x66, - 0xa9, 0x57, 0x3b, 0xd3, 0xcf, 0x43, 0xf9, 0xdf, - 0xd2, 0xad, 0x3e, 0x56, 0x15, 0x54, 0x63, 0x7f, - 0x1e, 0x7b, 0x71, 0x91, 0x4d, 0x62, 0x73, 0x38 }, - { 0xb2, 0xdc, 0x86, 0x25, 0x6c, 0xcf, 0xf4, 0xbb, - 0x14, 0xfd, 0x70, 0x27, 0x9f, 0xcc, 0x3c, 0xe9, - 0x25, 0xc5, 0x1f, 0xb7, 0x17, 0xe5, 0x87, 0x6f, - 0x29, 0x1b, 0xa1, 0x70, 0x73, 0x43, 0x85, 0x68 }, - { 0xb3, 0x0d, 0x88, 0x44, 0x30, 0x43, 0xf5, 0xf3, - 0x72, 0x32, 0xbb, 0x9b, 0xac, 0xb9, 0x94, 0xc5, - 0xba, 0xe9, 0x3a, 0x46, 0xfc, 0x87, 0xf1, 0x51, - 0x29, 0xc9, 0x74, 0x69, 0xa5, 0x81, 0x4e, 0xca }, - { 0xb3, 0x1a, 0xf0, 0xc2, 0xe5, 0x1e, 0xa2, 0x1c, - 0x91, 0x04, 0xf9, 0x4f, 0xaa, 0x66, 0xe0, 0xcc, - 0xc0, 0x41, 0x34, 0xd5, 0x80, 0x9a, 0x2a, 0x26, - 0x70, 0xa3, 0xb7, 0xbc, 0x7d, 0xd9, 0x64, 0xf8 }, - { 0xb3, 0xf4, 0xb1, 0x6f, 0x8e, 0xce, 0xbb, 0x41, - 0x47, 0x4f, 0x92, 0x4f, 0xee, 0xf9, 0xb0, 0xbd, - 0x97, 0x9b, 0x36, 0x36, 0xc3, 0x4f, 0xf2, 0x72, - 0x3f, 0x67, 0x3c, 0x8e, 0xee, 0x2a, 0xf1, 0x52 }, - { 0xb5, 0xe5, 0xdc, 0xde, 0xcb, 0x8d, 0xeb, 0x27, - 0x13, 0x4f, 0x02, 0xa5, 0x18, 0x79, 0x43, 0x16, - 0xf0, 0x8f, 0xaf, 0x9c, 0x2b, 0x1f, 0xda, 0xd6, - 0xd4, 0x86, 0x61, 0xf5, 0x7e, 0xa6, 0x45, 0xd9 }, - { 0xb7, 0x06, 0xde, 0x1b, 0xd1, 0xee, 0x2f, 0x4c, - 0xec, 0x6c, 0xe0, 0x92, 0x02, 0x2b, 0x49, 0x32, - 0x81, 0xe2, 0x9a, 0x21, 0x73, 0x50, 0x8c, 0x9b, - 0xd0, 0xfb, 0xc2, 0xc3, 0xd9, 0x68, 0xe3, 0xe7 }, - { 0xb7, 0xa2, 0xae, 0x06, 0x06, 0xaa, 0x2c, 0xfb, - 0x27, 0x01, 0xb3, 0xb2, 0x77, 0xf4, 0xd7, 0x12, - 0x54, 0x70, 0x48, 0x7e, 0xfd, 0x94, 0x05, 0x85, - 0x7f, 0xfc, 0xe4, 0xbf, 0x29, 0x10, 0x5e, 0x68 }, - { 0xb8, 0x74, 0x36, 0x95, 0x1c, 0xec, 0x37, 0x7e, - 0xef, 0x73, 0xde, 0x4b, 0x74, 0xf2, 0x83, 0xc4, - 0x2b, 0x2c, 0xcb, 0x1c, 0xa3, 0x7c, 0x5b, 0x30, - 0xaa, 0xd6, 0x55, 0xa7, 0x40, 0x1a, 0x3d, 0x2f }, - { 0xb9, 0x8d, 0x83, 0x38, 0x55, 0xc3, 0x67, 0x88, - 0x62, 0xb6, 0x2f, 0x36, 0x50, 0xdb, 0x00, 0xa3, - 0x45, 0xf4, 0x6a, 0x0e, 0x8e, 0x01, 0x1a, 0x20, - 0x01, 0x3f, 0xd8, 0xed, 0xce, 0x25, 0x27, 0x0d }, - { 0xba, 0x51, 0xaf, 0xf5, 0xd5, 0xd3, 0x10, 0x5f, - 0x34, 0xa2, 0xb3, 0x3a, 0x83, 0xe3, 0xad, 0xfd, - 0x12, 0xd7, 0x9c, 0xa6, 0x05, 0x90, 0x9d, 0x96, - 0x03, 0x3e, 0x32, 0xa5, 0xcf, 0x2f, 0x71, 0xf6 }, - { 0xbb, 0x5c, 0xb3, 0x78, 0xb7, 0xb9, 0x48, 0x7f, - 0xa6, 0x1b, 0xc0, 0x91, 0x3d, 0xa1, 0xdf, 0x26, - 0xa1, 0xcf, 0xef, 0xf7, 0x45, 0x2d, 0x9b, 0xa3, - 0x6c, 0xac, 0x47, 0xa8, 0x5c, 0x7f, 0xf3, 0x48 }, - { 0xbc, 0x14, 0x2e, 0xba, 0xc2, 0x78, 0xa8, 0xfe, - 0x8c, 0xa8, 0xbc, 0x2c, 0x62, 0xfb, 0xcc, 0x40, - 0x17, 0xff, 0x24, 0x96, 0x98, 0xbe, 0xed, 0xfb, - 0x1e, 0xf3, 0x6f, 0x37, 0x5f, 0xb3, 0x9f, 0x72 }, - { 0xbd, 0x2e, 0x2f, 0x37, 0xc9, 0x66, 0xc3, 0x86, - 0xd9, 0x70, 0x44, 0xfd, 0xe3, 0xe3, 0xf9, 0x00, - 0xfb, 0x1a, 0x0b, 0x04, 0x03, 0xb5, 0x81, 0x72, - 0x5f, 0x34, 0xe3, 0xc1, 0x90, 0x05, 0x60, 0x56 }, - { 0xbe, 0xb9, 0x09, 0x0c, 0x92, 0xd1, 0x6b, 0xd0, - 0x5a, 0xf3, 0x91, 0x5a, 0x39, 0xcc, 0x2a, 0xfa, - 0x9f, 0x6a, 0x8a, 0x6f, 0xbe, 0xd4, 0xfe, 0x54, - 0xd9, 0xde, 0x32, 0x49, 0x23, 0xb3, 0x93, 0x5a }, - { 0xbf, 0x38, 0xe6, 0xae, 0x32, 0x0f, 0x69, 0x16, - 0x16, 0x0d, 0xa6, 0x06, 0x86, 0x83, 0xbf, 0x49, - 0xf2, 0xb2, 0x2b, 0x25, 0x24, 0x84, 0x63, 0x68, - 0xf5, 0x04, 0x51, 0x81, 0x52, 0x40, 0x25, 0x9a }, - { 0xbf, 0x60, 0xae, 0xb3, 0x91, 0xc0, 0xfb, 0xd0, - 0x49, 0x53, 0x52, 0x6d, 0xa9, 0xfd, 0x59, 0x96, - 0x9a, 0x82, 0xf1, 0xee, 0x81, 0xa7, 0x97, 0x98, - 0xa4, 0x17, 0x1e, 0x14, 0x59, 0x39, 0x19, 0x67 }, - { 0xbf, 0xf4, 0x3a, 0x97, 0x20, 0x48, 0x2d, 0x13, - 0x4c, 0xd5, 0xee, 0x8a, 0x88, 0x99, 0xe1, 0xa7, - 0x36, 0xbf, 0x54, 0xa2, 0xb7, 0x86, 0x26, 0x9c, - 0x0d, 0xcb, 0x8b, 0xa1, 0x92, 0xa8, 0x1f, 0xa4 }, - { 0xc0, 0x09, 0xa1, 0xbe, 0x5b, 0xe8, 0xaf, 0xb5, - 0x25, 0x8e, 0x12, 0x85, 0x5c, 0x64, 0xd0, 0x4d, - 0x13, 0xe8, 0xcc, 0xc4, 0x7b, 0x02, 0xbf, 0x3b, - 0x51, 0xc6, 0xe1, 0x18, 0x05, 0xae, 0xec, 0xeb }, - { 0xc0, 0x9f, 0xfa, 0x0e, 0xdd, 0x16, 0xba, 0x55, - 0xf2, 0x3c, 0xea, 0xf7, 0x2b, 0x11, 0x34, 0xe9, - 0x28, 0xdb, 0xa1, 0xc2, 0x34, 0x5a, 0x5a, 0xb5, - 0x63, 0x1e, 0x25, 0x41, 0x24, 0x05, 0x4a, 0xdb }, - { 0xc0, 0xab, 0xd1, 0xc3, 0x56, 0x2f, 0xbc, 0x7f, - 0xf7, 0xbd, 0x38, 0x95, 0x54, 0x60, 0xc3, 0xfc, - 0x43, 0x55, 0x0d, 0x97, 0x7f, 0x25, 0xe3, 0x43, - 0xd4, 0x9c, 0xd4, 0xaf, 0xad, 0xf2, 0x09, 0x3c }, - { 0xc0, 0xfe, 0xb7, 0x2a, 0x5f, 0x33, 0x16, 0x5c, - 0x0d, 0xc7, 0xc4, 0x24, 0x7e, 0x23, 0xf3, 0x8c, - 0xc6, 0x1f, 0x25, 0x24, 0x42, 0xb2, 0xf6, 0x13, - 0x40, 0x92, 0xde, 0x3b, 0xad, 0x7e, 0x45, 0x0d }, - { 0xc1, 0x77, 0x12, 0x97, 0xa4, 0xe8, 0xdc, 0x53, - 0x75, 0x19, 0x5e, 0x1b, 0x63, 0x04, 0x2b, 0x59, - 0x19, 0x09, 0xf1, 0xd7, 0xeb, 0x5d, 0x25, 0xf2, - 0x97, 0xae, 0x7a, 0x61, 0xc1, 0x53, 0x8f, 0x9e }, - { 0xc1, 0x86, 0xbe, 0x26, 0xe4, 0x47, 0x89, 0x7c, - 0x48, 0x3c, 0x43, 0xfd, 0xc0, 0x86, 0xe2, 0x60, - 0x74, 0x17, 0xeb, 0x3e, 0xa7, 0x88, 0xec, 0x03, - 0x10, 0xa7, 0x9d, 0xa9, 0x24, 0x1d, 0x16, 0xde }, - { 0xc1, 0xde, 0x5f, 0xa3, 0x92, 0x13, 0x68, 0x58, - 0x11, 0xa5, 0xba, 0x93, 0x12, 0x1d, 0xe7, 0xa3, - 0x95, 0x98, 0x4e, 0x84, 0x44, 0x4e, 0x58, 0xf1, - 0x63, 0xb7, 0xa6, 0x20, 0xae, 0x3b, 0xbf, 0xa8 }, - { 0xc2, 0xad, 0xdf, 0x99, 0xcf, 0xc4, 0x2c, 0xe0, - 0xe5, 0xa0, 0x93, 0xbc, 0xbf, 0x87, 0x40, 0x7c, - 0x61, 0x1f, 0x9d, 0x0a, 0xbf, 0x2a, 0x35, 0xd6, - 0xe8, 0x03, 0xa3, 0x8e, 0xcb, 0x92, 0xc7, 0xb3 }, - { 0xc2, 0xe7, 0x92, 0x11, 0x6a, 0x05, 0x00, 0x00, - 0xbd, 0x47, 0x59, 0x1d, 0x93, 0x04, 0x71, 0xe6, - 0x17, 0x4c, 0x93, 0x85, 0xf5, 0xdc, 0x32, 0xb7, - 0x62, 0x31, 0x65, 0x5f, 0xc8, 0x5e, 0x22, 0xe2 }, - { 0xc3, 0x79, 0x03, 0xc5, 0x3a, 0xe6, 0x02, 0xec, - 0x96, 0x9e, 0xc3, 0x3f, 0x63, 0xfe, 0x9a, 0xb2, - 0x0c, 0x39, 0x5f, 0x83, 0x0d, 0x30, 0xe4, 0xee, - 0x9d, 0x8d, 0xd9, 0x05, 0x92, 0x1e, 0xc1, 0xa0 }, - { 0xc3, 0xcf, 0x54, 0x16, 0xa5, 0x31, 0xaf, 0x4b, - 0xfa, 0xe8, 0x9c, 0x45, 0x14, 0x3f, 0x20, 0xcc, - 0x1b, 0x3e, 0x18, 0x1d, 0x29, 0xc2, 0xd0, 0xe8, - 0xff, 0x7d, 0x3f, 0x2a, 0x66, 0xb1, 0x82, 0xfe }, - { 0xc4, 0x98, 0xa1, 0xb6, 0x9f, 0x54, 0x40, 0x86, - 0x17, 0x47, 0x47, 0x71, 0x5a, 0x27, 0x4d, 0x3f, - 0xb5, 0x90, 0x19, 0xbe, 0x09, 0x21, 0x31, 0xbc, - 0xfa, 0xa8, 0x3a, 0x39, 0x5f, 0x7e, 0x57, 0x3c }, - { 0xc4, 0xe2, 0x8d, 0xd8, 0x3f, 0xe3, 0x0c, 0x96, - 0x33, 0x8c, 0xef, 0x77, 0x73, 0xc6, 0xdf, 0xca, - 0x6c, 0xe4, 0xfa, 0x96, 0x41, 0xbe, 0xab, 0x38, - 0x05, 0xa8, 0xef, 0xb6, 0xcd, 0xc3, 0xcf, 0x0a }, - { 0xc5, 0x00, 0xb8, 0x3f, 0x3e, 0x06, 0x6c, 0xd1, - 0xdd, 0x0e, 0xbc, 0xd7, 0x3d, 0xd4, 0x01, 0x61, - 0xb9, 0x25, 0x9a, 0xa7, 0x7a, 0xb8, 0xa6, 0x47, - 0xe8, 0x57, 0x1f, 0xf3, 0x37, 0xcf, 0x94, 0x6d }, - { 0xc5, 0x29, 0x5b, 0xa6, 0xe2, 0x7e, 0x72, 0x10, - 0x22, 0xfe, 0xb2, 0x1e, 0x78, 0xeb, 0x7b, 0x03, - 0x57, 0xc9, 0xcd, 0x56, 0x5b, 0xd0, 0xe5, 0x96, - 0x72, 0xf6, 0x66, 0x34, 0x2b, 0x79, 0x94, 0x9d }, - { 0xc6, 0x12, 0x75, 0x6b, 0xa5, 0x42, 0x34, 0x4a, - 0xdc, 0x1b, 0x80, 0xe9, 0x38, 0x84, 0x5a, 0x1e, - 0xd6, 0xe9, 0x38, 0xfe, 0xf4, 0x0d, 0x04, 0xec, - 0x86, 0x55, 0x8f, 0x4b, 0x21, 0x05, 0x2f, 0xd2 }, - { 0xc6, 0x17, 0xe0, 0x85, 0x5b, 0xf1, 0x4f, 0xbf, - 0x21, 0xaf, 0x00, 0x82, 0x25, 0xca, 0xbe, 0x40, - 0x4f, 0x73, 0x8c, 0x27, 0x8a, 0x4a, 0x42, 0x87, - 0xf1, 0xee, 0x38, 0x01, 0x27, 0xc5, 0x61, 0xfa }, - { 0xc6, 0xa4, 0x24, 0xbf, 0x7c, 0xfe, 0x31, 0x72, - 0x74, 0x7a, 0x47, 0x14, 0xa0, 0xef, 0xb9, 0x17, - 0x93, 0x8c, 0x5e, 0xbd, 0x59, 0x12, 0x9d, 0xed, - 0x7a, 0x81, 0x18, 0xc7, 0xf6, 0x59, 0xd1, 0x33 }, - { 0xc6, 0xad, 0x1d, 0x7a, 0x14, 0x1a, 0x91, 0x75, - 0x2d, 0x31, 0xfb, 0xc1, 0x06, 0x16, 0xbf, 0x1c, - 0xa2, 0xfb, 0x5b, 0x02, 0xe8, 0x46, 0xb5, 0x9e, - 0x63, 0x34, 0x6b, 0x31, 0x92, 0xa7, 0x52, 0x92 }, - { 0xc7, 0x01, 0x83, 0x64, 0x38, 0xf3, 0x7b, 0xea, - 0x8a, 0x88, 0x16, 0x10, 0x63, 0x70, 0x86, 0xf8, - 0x8d, 0x9a, 0x11, 0x5e, 0x00, 0x92, 0x46, 0xd2, - 0x7f, 0x48, 0x9f, 0xa7, 0x18, 0x51, 0x88, 0xa8 }, - { 0xc7, 0xff, 0x8e, 0xfd, 0xec, 0xdf, 0x00, 0xd1, - 0xfc, 0x8d, 0x55, 0x2d, 0x2a, 0x70, 0x70, 0xe5, - 0xe3, 0x3d, 0x42, 0xe5, 0x90, 0xf5, 0x86, 0xc6, - 0xae, 0xde, 0x03, 0x2b, 0x2d, 0x86, 0x7b, 0xd5 }, - { 0xc7, 0xff, 0xb4, 0x9f, 0xbc, 0x94, 0x72, 0x24, - 0x5c, 0x8e, 0x95, 0xde, 0x62, 0x9a, 0xf5, 0xc1, - 0xbf, 0xea, 0xc5, 0x50, 0x04, 0xc1, 0x54, 0x82, - 0x3a, 0x58, 0xba, 0xe8, 0x05, 0x6e, 0x3c, 0x64 }, - { 0xc8, 0x37, 0xd6, 0xf2, 0xab, 0x14, 0x79, 0x91, - 0x42, 0xed, 0x3c, 0x79, 0xbe, 0xd9, 0x44, 0x1e, - 0x92, 0x50, 0xbd, 0x05, 0x20, 0x25, 0xad, 0x8a, - 0xf4, 0x40, 0x41, 0xac, 0x19, 0xef, 0xbb, 0x4c }, - { 0xc9, 0x72, 0xf4, 0xf9, 0x6e, 0x71, 0x33, 0xe1, - 0x6e, 0x55, 0x57, 0xa0, 0x57, 0xb1, 0xd4, 0x2b, - 0xa9, 0x2d, 0x98, 0x5c, 0xae, 0xe7, 0x3c, 0xaf, - 0xda, 0xeb, 0x55, 0xec, 0xa2, 0xe4, 0xab, 0xb0 }, - { 0xc9, 0x78, 0x37, 0x2c, 0x9e, 0x11, 0x60, 0x71, - 0xb6, 0x1b, 0x90, 0x92, 0xa9, 0xaa, 0x96, 0x81, - 0x62, 0x36, 0x55, 0xa6, 0x6f, 0x4f, 0xcb, 0xc4, - 0xd3, 0xa6, 0x7e, 0xfd, 0x56, 0x72, 0x48, 0x30 }, - { 0xca, 0x55, 0x6f, 0x82, 0xc9, 0x68, 0x4c, 0x9a, - 0xf3, 0x55, 0x7d, 0x3e, 0x2d, 0x88, 0xaf, 0x92, - 0xed, 0x25, 0x9c, 0x20, 0xff, 0xd1, 0xdd, 0xe9, - 0xf7, 0x9d, 0x6b, 0x92, 0xc6, 0x1e, 0xe1, 0xb9 }, - { 0xca, 0xbe, 0x25, 0x56, 0xf1, 0xbb, 0x56, 0x57, - 0x0c, 0xef, 0x3a, 0x87, 0x03, 0x32, 0x71, 0xa1, - 0xf2, 0x1d, 0x09, 0xb7, 0xfd, 0x04, 0x12, 0x83, - 0x18, 0xe5, 0xe7, 0xbc, 0xe3, 0xa2, 0x01, 0xe2 }, - { 0xca, 0xdc, 0xd5, 0xae, 0x1b, 0x75, 0x6a, 0xb7, - 0x41, 0xb3, 0x56, 0x9c, 0x42, 0xa5, 0x41, 0x1f, - 0x09, 0x3e, 0x4e, 0x1f, 0x01, 0x2e, 0xc5, 0x79, - 0x91, 0xcb, 0xd6, 0xdb, 0xe0, 0x8f, 0xaa, 0xc1 }, - { 0xcb, 0x7a, 0x43, 0x8d, 0x16, 0xe4, 0xa5, 0xf3, - 0xc5, 0x6f, 0xdf, 0x19, 0x1e, 0x1d, 0xaf, 0x9f, - 0x32, 0x5c, 0x65, 0x0b, 0xd6, 0x2f, 0x07, 0xc4, - 0x67, 0x71, 0x72, 0x07, 0x35, 0x1a, 0xe3, 0x29 }, - { 0xcc, 0x30, 0xd8, 0x19, 0xde, 0x54, 0x05, 0xf6, - 0x49, 0xc8, 0xb7, 0xa8, 0x14, 0x8f, 0x26, 0xd7, - 0x71, 0x08, 0x3e, 0xc5, 0x18, 0xf9, 0xb6, 0x6f, - 0xf5, 0x47, 0xf2, 0x82, 0x2d, 0x11, 0x93, 0x6d }, - { 0xcc, 0x65, 0xcd, 0xc5, 0x33, 0x62, 0xd4, 0x21, - 0x62, 0x7e, 0xae, 0xf5, 0xd0, 0xc8, 0xe4, 0xc4, - 0xe2, 0x40, 0xad, 0xe0, 0xc9, 0xd4, 0x20, 0xbe, - 0x67, 0x1e, 0x70, 0xf0, 0xfb, 0xac, 0x8d, 0x0a }, - { 0xcd, 0xb1, 0x62, 0x53, 0xd2, 0x2e, 0xd5, 0xd4, - 0x26, 0xcf, 0xa1, 0xb0, 0x5c, 0xec, 0xd8, 0x6e, - 0xf1, 0xb7, 0xde, 0xaa, 0x07, 0xc5, 0x70, 0x5e, - 0xbb, 0xaf, 0x7d, 0x9a, 0x80, 0x7d, 0x56, 0x16 }, - { 0xcd, 0xc0, 0x39, 0xf3, 0xa2, 0xd1, 0xbb, 0xa5, - 0xe8, 0x09, 0x4e, 0x55, 0x23, 0xcf, 0x60, 0x47, - 0x09, 0x7d, 0x4b, 0x3c, 0xd4, 0xec, 0x4e, 0xd6, - 0xaa, 0x8e, 0xb7, 0xb4, 0xd8, 0xb5, 0x77, 0x7d }, - { 0xcd, 0xc4, 0xea, 0x92, 0x02, 0xe3, 0x3e, 0xdd, - 0x0f, 0x2d, 0x3a, 0xe8, 0x6a, 0xca, 0xc7, 0xfb, - 0x25, 0x35, 0x4b, 0x02, 0x23, 0x5b, 0x09, 0x33, - 0xaa, 0x81, 0xa3, 0x13, 0xb5, 0xfd, 0xfe, 0xec }, - { 0xce, 0x4c, 0x2f, 0x8f, 0x16, 0x46, 0x8a, 0x58, - 0x88, 0xe9, 0x0f, 0x73, 0x4e, 0x4d, 0x22, 0x02, - 0xdf, 0xad, 0xbf, 0xa6, 0x6f, 0x5b, 0x35, 0x75, - 0x2b, 0xaa, 0x76, 0x21, 0xa7, 0x60, 0xb0, 0x88 }, - { 0xce, 0x81, 0x44, 0x58, 0x54, 0x03, 0x1f, 0x3d, - 0x0f, 0x5c, 0x88, 0x75, 0x46, 0x4d, 0xcd, 0x5b, - 0xa6, 0xc8, 0x90, 0xf4, 0x49, 0xb3, 0x20, 0x7b, - 0xca, 0x2b, 0xc9, 0x61, 0x82, 0x2d, 0x27, 0xc4 }, - { 0xcf, 0xa0, 0xc0, 0x0c, 0xb2, 0xfb, 0x4b, 0x85, - 0x7a, 0xad, 0x22, 0xb1, 0x3a, 0x90, 0xe3, 0x46, - 0xa0, 0x3e, 0x6b, 0x79, 0xab, 0xd5, 0xd2, 0x75, - 0xb5, 0x43, 0x24, 0x68, 0x17, 0x92, 0xd6, 0xd1 }, - { 0xd0, 0xf5, 0x93, 0xc1, 0xa8, 0x1b, 0x1e, 0xf8, - 0x51, 0x69, 0x81, 0xee, 0x56, 0xf1, 0xd5, 0x98, - 0xa2, 0xa6, 0x03, 0x48, 0x8c, 0x67, 0x8c, 0x1b, - 0x7b, 0xbe, 0xa6, 0x44, 0x6b, 0x00, 0x83, 0xad }, - { 0xd2, 0x90, 0x3c, 0xa2, 0x55, 0x17, 0x27, 0xed, - 0x01, 0x71, 0xcc, 0x4a, 0x43, 0xb3, 0xca, 0xe0, - 0x09, 0xb7, 0x47, 0xb9, 0xf4, 0xf8, 0x48, 0x72, - 0x92, 0x27, 0xbf, 0x59, 0x02, 0xf2, 0x3e, 0x47 }, - { 0xd2, 0xe8, 0xa1, 0x23, 0x7a, 0x93, 0xf5, 0x78, - 0xd1, 0xba, 0x8f, 0x09, 0xe4, 0xff, 0x10, 0x7b, - 0x62, 0x35, 0x78, 0x85, 0x42, 0xaa, 0x61, 0x83, - 0xd1, 0x76, 0xdb, 0xf1, 0xc8, 0x8d, 0xcf, 0xb6 }, - { 0xd5, 0x04, 0x88, 0x96, 0x86, 0x07, 0x29, 0xa8, - 0xfa, 0x5d, 0x23, 0x57, 0x81, 0x2b, 0xa5, 0x6c, - 0xbe, 0x84, 0xc9, 0xab, 0x7d, 0x14, 0xdf, 0x47, - 0x64, 0xe0, 0xb6, 0x62, 0x0f, 0xa3, 0x20, 0x10 }, - { 0xd5, 0x41, 0xa7, 0x7e, 0x13, 0x6e, 0x9e, 0x70, - 0x3b, 0xb9, 0x9f, 0x80, 0x68, 0xcf, 0xee, 0x86, - 0xa4, 0xb9, 0xf0, 0x89, 0xe0, 0x2d, 0x0c, 0x6c, - 0xb6, 0xd4, 0xa3, 0x94, 0x6c, 0x6b, 0x16, 0x7a }, - { 0xd5, 0x83, 0x94, 0x96, 0xcd, 0xc8, 0x5b, 0xe3, - 0xd1, 0xf1, 0xac, 0x65, 0x2e, 0xfa, 0x92, 0xbe, - 0xa3, 0xb0, 0x61, 0xc1, 0x3d, 0xad, 0x5a, 0x82, - 0x11, 0x22, 0xcf, 0xe9, 0xc7, 0x1a, 0x5a, 0x32 }, - { 0xd5, 0xa4, 0xee, 0x46, 0x95, 0xb5, 0x65, 0xa6, - 0x7e, 0x50, 0x48, 0x66, 0xfe, 0x5b, 0xa3, 0xc0, - 0xed, 0xca, 0xee, 0xd5, 0x2a, 0xd0, 0xaf, 0x07, - 0xe6, 0x79, 0x17, 0x73, 0x85, 0x12, 0xc8, 0xf5 }, - { 0xd6, 0x25, 0xc0, 0x59, 0x2b, 0x25, 0xdc, 0x03, - 0xaa, 0x7e, 0x87, 0x8e, 0x6a, 0x85, 0x09, 0x1b, - 0xaa, 0x07, 0x8d, 0x26, 0x8b, 0xbd, 0xb4, 0x9f, - 0x09, 0x67, 0x94, 0x08, 0x61, 0x2d, 0x1e, 0xfe }, - { 0xd6, 0xd1, 0xb3, 0x5c, 0xbc, 0x12, 0xfb, 0x1c, - 0x70, 0xa0, 0xb4, 0x3b, 0xa5, 0x9a, 0xb3, 0xd3, - 0x22, 0x5f, 0x37, 0x32, 0x64, 0xdd, 0x87, 0xfb, - 0xca, 0x00, 0x61, 0xec, 0x1c, 0x4d, 0xa1, 0x1a }, - { 0xd7, 0x32, 0x49, 0x74, 0xb5, 0x60, 0x09, 0x62, - 0x17, 0x61, 0xf7, 0xc0, 0xff, 0x68, 0x9d, 0xde, - 0x47, 0x74, 0x99, 0x85, 0xe1, 0xee, 0x8b, 0x5c, - 0x89, 0x61, 0xdd, 0x8f, 0x6a, 0x78, 0xbb, 0xf5 }, - { 0xd9, 0x2e, 0x3e, 0xe3, 0x82, 0xc8, 0xdc, 0xaf, - 0xa0, 0x39, 0x3d, 0x9f, 0x9a, 0x00, 0xbf, 0x4c, - 0xd9, 0xd5, 0x64, 0x26, 0x2b, 0x18, 0x0f, 0x68, - 0x16, 0x0b, 0x20, 0x34, 0xc5, 0x44, 0xd1, 0x0a }, - { 0xd9, 0x65, 0xf7, 0x41, 0x62, 0x04, 0xda, 0x83, - 0x1a, 0xf6, 0x6b, 0xfa, 0x8f, 0x90, 0xd1, 0x41, - 0xe9, 0x93, 0xf0, 0x00, 0x21, 0x33, 0xf2, 0x8d, - 0xe9, 0x7f, 0x56, 0x4a, 0x1d, 0x60, 0x4e, 0xcc }, - { 0xda, 0xdf, 0x97, 0x13, 0x34, 0x14, 0xad, 0x51, - 0x3f, 0xc7, 0x50, 0x14, 0xe9, 0x56, 0x65, 0xda, - 0xd7, 0x76, 0xb1, 0x50, 0x4b, 0x15, 0x67, 0x43, - 0x4f, 0xd8, 0x2a, 0x79, 0xa2, 0x20, 0xe9, 0xa1 }, - { 0xda, 0xff, 0xd4, 0x05, 0x6f, 0xc3, 0x68, 0xfa, - 0x64, 0x8d, 0x0e, 0xd8, 0x9b, 0x5d, 0xe0, 0xee, - 0x93, 0x1f, 0x1b, 0x33, 0x84, 0x78, 0xab, 0xf5, - 0x69, 0x29, 0xa9, 0x4d, 0x3b, 0xd6, 0x1d, 0x46 }, - { 0xde, 0xcd, 0xb9, 0xfc, 0x1d, 0xde, 0xc9, 0x7e, - 0x09, 0xc3, 0x02, 0x6a, 0xce, 0xb7, 0x6b, 0xda, - 0xe9, 0xde, 0xb6, 0x62, 0x75, 0x1d, 0xda, 0x34, - 0x9d, 0x2f, 0xa6, 0xbd, 0x75, 0xca, 0x59, 0x14 }, - { 0xde, 0xd1, 0x9a, 0xd5, 0xde, 0x99, 0x65, 0xd9, - 0x22, 0x5c, 0x1b, 0xba, 0x5f, 0xb4, 0xd8, 0x90, - 0xc8, 0xe5, 0xc0, 0x35, 0xe4, 0x85, 0x27, 0x52, - 0xb6, 0x69, 0xb0, 0x40, 0x0f, 0x24, 0xf1, 0x74 }, - { 0xdf, 0x30, 0xbf, 0x8d, 0x1b, 0xf9, 0x37, 0x8e, - 0x43, 0x3e, 0xf9, 0xe1, 0xb3, 0xa2, 0x28, 0xa0, - 0x7e, 0x36, 0x58, 0xa5, 0xbc, 0x43, 0x88, 0x23, - 0x45, 0x4d, 0xb0, 0x6a, 0x67, 0x94, 0x4c, 0x6e }, - { 0xe0, 0x0b, 0xd7, 0x86, 0xd1, 0xf2, 0xf4, 0x46, - 0xc4, 0xba, 0x83, 0x99, 0xd4, 0xd8, 0xd5, 0xa0, - 0xd1, 0x98, 0x57, 0x8f, 0x42, 0x99, 0xfd, 0xfd, - 0xaf, 0xf7, 0x8c, 0x3f, 0x67, 0x71, 0xf3, 0x94 }, - { 0xe0, 0x8b, 0x2c, 0xc2, 0x7a, 0xe8, 0xe2, 0xef, - 0x1a, 0x33, 0x01, 0x7a, 0x9a, 0xc2, 0x5d, 0xda, - 0xfb, 0x5e, 0xa1, 0x12, 0xc9, 0x56, 0xb0, 0x02, - 0xfe, 0x6c, 0x79, 0x80, 0x14, 0xaa, 0x90, 0x65 }, - { 0xe1, 0xb2, 0xe8, 0x6b, 0x0d, 0xa8, 0x69, 0xe9, - 0x25, 0x26, 0x6c, 0x1b, 0x56, 0x88, 0x34, 0x5a, - 0x17, 0xb0, 0xf6, 0xe2, 0xa2, 0x14, 0x94, 0x54, - 0x7e, 0xac, 0x09, 0x7c, 0x8b, 0xf5, 0x3c, 0x5a }, - { 0xe1, 0xd6, 0x44, 0xa0, 0x96, 0xbd, 0x8a, 0x6c, - 0xac, 0xbb, 0xda, 0x3e, 0x7f, 0xc3, 0x38, 0xea, - 0xdd, 0xc1, 0x2f, 0x23, 0x6c, 0x72, 0x61, 0xe4, - 0x5f, 0x8a, 0xd2, 0xd8, 0x42, 0x42, 0x4f, 0x72 }, - { 0xe2, 0x24, 0x10, 0xb5, 0xa6, 0x7f, 0xed, 0xc2, - 0x64, 0x69, 0x4c, 0x44, 0x9d, 0x84, 0xfa, 0x1a, - 0x02, 0xbc, 0x8b, 0x21, 0x28, 0xc1, 0x25, 0x60, - 0x71, 0x58, 0xc9, 0x1b, 0x05, 0x38, 0x6c, 0x6a }, - { 0xe2, 0xa8, 0x47, 0xc3, 0xf0, 0x9b, 0xeb, 0x6f, - 0x05, 0x68, 0x6f, 0x17, 0x79, 0x1b, 0x05, 0xf1, - 0xfe, 0x25, 0xf7, 0x71, 0x86, 0x9c, 0x42, 0x63, - 0xa5, 0x5b, 0x94, 0x18, 0x77, 0xe4, 0x79, 0x04 }, - { 0xe2, 0xf3, 0x9a, 0x9d, 0x48, 0xa3, 0x22, 0x10, - 0x55, 0xb3, 0xc8, 0xa3, 0xeb, 0x14, 0x39, 0xd6, - 0xb8, 0x73, 0x01, 0x3e, 0xe4, 0xd0, 0x97, 0x12, - 0x20, 0x64, 0xf2, 0x7e, 0xc0, 0x3d, 0xd4, 0xda }, - { 0xe2, 0xf5, 0xde, 0x57, 0xcd, 0x67, 0x24, 0x9a, - 0x7e, 0x1f, 0x45, 0x5b, 0x85, 0xc0, 0x6f, 0x0d, - 0x80, 0x9e, 0x75, 0xa5, 0x5c, 0x6b, 0x05, 0x48, - 0x16, 0xe0, 0x19, 0x89, 0x9a, 0x3a, 0x02, 0xff }, - { 0xe4, 0xf1, 0xde, 0x31, 0xcd, 0xaa, 0x6d, 0x9e, - 0xb1, 0xaa, 0xfd, 0x10, 0x81, 0x27, 0xa2, 0xf0, - 0xa8, 0xfb, 0x6d, 0xa8, 0x5a, 0x04, 0x14, 0xad, - 0x24, 0x99, 0x47, 0xc4, 0x8d, 0x24, 0x92, 0xc5 }, - { 0xe6, 0x44, 0xd1, 0x1c, 0x37, 0x07, 0x0f, 0x89, - 0x69, 0x33, 0x08, 0x17, 0x8d, 0x6b, 0xe4, 0x95, - 0x94, 0x96, 0x92, 0xc1, 0xfb, 0xeb, 0x30, 0xed, - 0x32, 0x9b, 0x74, 0x02, 0x7f, 0xcf, 0xfd, 0x48 }, - { 0xe6, 0xb0, 0xf2, 0xe2, 0x5b, 0xd5, 0x16, 0xe4, - 0xbb, 0xa3, 0x7a, 0x2b, 0xf2, 0xe2, 0xc7, 0x2a, - 0x1e, 0x53, 0x9c, 0x60, 0x30, 0xf3, 0xcf, 0x9b, - 0xbe, 0x5e, 0x79, 0x72, 0x8d, 0x68, 0x64, 0x78 }, - { 0xe6, 0xe5, 0x4d, 0xe7, 0xb4, 0x97, 0x54, 0xd3, - 0x57, 0xb0, 0xa8, 0xd9, 0x4a, 0x4d, 0x4f, 0x80, - 0xac, 0xd1, 0x99, 0x4c, 0xcc, 0x1c, 0x99, 0x08, - 0xe9, 0xf0, 0xd9, 0x21, 0xe4, 0x28, 0xb8, 0x38 }, - { 0xe7, 0x0c, 0xbb, 0x7a, 0xf7, 0xaa, 0x20, 0xb9, - 0x89, 0x0b, 0xc1, 0xf9, 0xfa, 0x00, 0xd8, 0x09, - 0x0b, 0x5a, 0xc9, 0x82, 0x5e, 0xa9, 0xd2, 0xfd, - 0xf7, 0x7c, 0xa4, 0xda, 0xe9, 0x44, 0x51, 0xb2 }, - { 0xe8, 0x16, 0xf9, 0x92, 0x94, 0xa1, 0x3a, 0xc2, - 0xfa, 0x2b, 0xfb, 0x76, 0xc2, 0x2d, 0xfa, 0x71, - 0xbc, 0x3d, 0xa4, 0x8f, 0x67, 0x1e, 0xf7, 0x7c, - 0x00, 0xaa, 0x8e, 0x45, 0x9b, 0x7c, 0xc8, 0x2a }, - { 0xe9, 0xd4, 0x98, 0x51, 0xbf, 0x78, 0x37, 0x6d, - 0x54, 0x08, 0x2d, 0x1e, 0xb8, 0x2b, 0xd2, 0xdc, - 0x96, 0x82, 0x07, 0x09, 0xb7, 0x77, 0x2d, 0x3f, - 0xbc, 0xa3, 0x90, 0x08, 0x8b, 0x54, 0xc4, 0x53 }, - { 0xe9, 0xf5, 0x71, 0xc7, 0x71, 0x64, 0xab, 0xea, - 0xe1, 0x85, 0x28, 0x37, 0x5c, 0xfd, 0xc7, 0x21, - 0x9a, 0x6b, 0xde, 0x46, 0x1b, 0x19, 0x73, 0xbe, - 0x2b, 0xb8, 0xbd, 0xf0, 0xda, 0x78, 0xb2, 0xb4 }, - { 0xeb, 0x11, 0x63, 0xaa, 0xef, 0xe8, 0xfd, 0x88, - 0xe1, 0x32, 0x7b, 0x48, 0xa9, 0xc0, 0x06, 0x2e, - 0x06, 0xf0, 0xa6, 0xea, 0xa0, 0xa0, 0x18, 0x24, - 0x7f, 0x9f, 0xa4, 0xe3, 0x4e, 0x3a, 0x47, 0x4c }, - { 0xec, 0x4b, 0xbd, 0xeb, 0x15, 0x12, 0x1d, 0x96, - 0x76, 0x4d, 0x6c, 0x01, 0xb2, 0x7e, 0xd5, 0xae, - 0x86, 0x46, 0x5c, 0x46, 0xd5, 0xa4, 0x0e, 0x34, - 0xae, 0xfc, 0x09, 0x2d, 0x3e, 0x8b, 0xb1, 0x76 }, - { 0xec, 0x5f, 0xa4, 0x73, 0x12, 0x1e, 0x3f, 0x49, - 0xf0, 0x95, 0x3a, 0x2a, 0x91, 0x83, 0x39, 0xe3, - 0x6f, 0x3c, 0xb6, 0xb8, 0xd8, 0xb8, 0x9e, 0x91, - 0x74, 0x23, 0xda, 0xce, 0xac, 0xe6, 0xd5, 0x8a }, - { 0xec, 0xce, 0x4e, 0x52, 0x82, 0xfd, 0x2e, 0xe0, - 0x03, 0xa4, 0x03, 0x2c, 0x80, 0xd3, 0x32, 0x1a, - 0x69, 0x47, 0x25, 0x98, 0x94, 0x59, 0x09, 0xcb, - 0x25, 0x55, 0x7a, 0xa8, 0x47, 0x74, 0x2d, 0xdf }, - { 0xed, 0x5b, 0xb8, 0x6a, 0x95, 0xa5, 0xfe, 0x2b, - 0x17, 0x08, 0xf2, 0x56, 0x75, 0x4a, 0x89, 0xc4, - 0x29, 0x67, 0x9b, 0x30, 0x75, 0x8e, 0xe0, 0x12, - 0x2b, 0x9e, 0x50, 0x85, 0x8d, 0xe2, 0x10, 0x4b }, - { 0xed, 0xc1, 0xbf, 0x3e, 0xfb, 0xf7, 0xe1, 0xd9, - 0x5e, 0x19, 0xc5, 0x5e, 0xca, 0xe7, 0x7e, 0x83, - 0x69, 0x46, 0xab, 0x0a, 0x26, 0xa7, 0x8e, 0x32, - 0xa4, 0x72, 0xc9, 0xd3, 0x6c, 0x69, 0xce, 0xcd }, - { 0xed, 0xf4, 0xdf, 0x97, 0x2c, 0xad, 0x6c, 0x47, - 0x0b, 0xab, 0x5d, 0x66, 0x42, 0xf6, 0x60, 0xb8, - 0x42, 0xd6, 0xc9, 0x73, 0x07, 0x44, 0x93, 0xe4, - 0xef, 0x1b, 0xbf, 0x31, 0x1a, 0x92, 0x79, 0x95 }, - { 0xee, 0x34, 0xe1, 0xa1, 0x9b, 0xc8, 0x89, 0xf8, - 0x5f, 0x7f, 0x0f, 0x5b, 0xf8, 0x72, 0xb1, 0xac, - 0x56, 0x5e, 0xc6, 0xf1, 0x9d, 0xb5, 0x17, 0xba, - 0x4e, 0xd7, 0x55, 0xc4, 0x18, 0x5f, 0x69, 0xe8 }, - { 0xef, 0x36, 0xa2, 0x29, 0x89, 0x65, 0xe4, 0x98, - 0x84, 0x59, 0xb9, 0x21, 0x6a, 0xb3, 0x3c, 0x3c, - 0xa8, 0x42, 0xd2, 0x16, 0x83, 0xb6, 0x2a, 0x2b, - 0xf1, 0x53, 0x0d, 0x30, 0xb0, 0xae, 0x78, 0x25 }, - { 0xef, 0xaf, 0xca, 0x84, 0x90, 0x30, 0x7b, 0x0f, - 0x62, 0x2b, 0xf4, 0x3a, 0x0e, 0xb3, 0xc5, 0x1a, - 0xcb, 0xdd, 0xde, 0xdc, 0x23, 0x92, 0xf1, 0x61, - 0xac, 0xed, 0x16, 0x71, 0xa6, 0x53, 0x60, 0x7e }, - { 0xef, 0xd1, 0xe0, 0xe7, 0x3f, 0xa8, 0x71, 0x00, - 0xb7, 0x6a, 0x93, 0x23, 0x49, 0xc4, 0x5d, 0x09, - 0xb2, 0x8b, 0x2d, 0x8a, 0x00, 0x17, 0x19, 0xa5, - 0x8d, 0xfa, 0xcc, 0x74, 0x84, 0xc7, 0xcf, 0x42 }, - { 0xf0, 0x6b, 0x35, 0x95, 0x36, 0xd1, 0x34, 0x32, - 0x8b, 0x36, 0x00, 0x4d, 0xa9, 0xa9, 0x19, 0x0c, - 0x3a, 0x76, 0x69, 0xe8, 0x27, 0x8d, 0xb9, 0xf7, - 0x58, 0x57, 0xc4, 0x8d, 0x64, 0x4b, 0xe2, 0x03 }, - { 0xf0, 0xcf, 0xc7, 0x79, 0x13, 0x39, 0x7d, 0xe2, - 0x38, 0xed, 0xb5, 0x9f, 0x0f, 0x99, 0x23, 0xc6, - 0xd4, 0x11, 0x0a, 0x4b, 0x3a, 0xc8, 0xac, 0x76, - 0x55, 0x6a, 0x0c, 0x92, 0x44, 0xf0, 0x3f, 0xc1 }, - { 0xf2, 0xb1, 0x95, 0x84, 0x6e, 0xe2, 0xb9, 0xab, - 0x5f, 0x18, 0xe6, 0x80, 0x21, 0xf8, 0xdf, 0x7c, - 0x0b, 0x60, 0x58, 0xde, 0xde, 0x86, 0xc5, 0xd5, - 0x90, 0xf2, 0xe8, 0x64, 0x3a, 0xfe, 0x04, 0x52 }, - { 0xf2, 0xe5, 0x30, 0x0c, 0x39, 0xf2, 0x86, 0xc6, - 0x78, 0x99, 0x90, 0x9c, 0x7c, 0xe7, 0x35, 0x9b, - 0x09, 0x45, 0xd2, 0xaf, 0xd3, 0x4a, 0x6d, 0xd6, - 0x9e, 0x08, 0xcd, 0xa5, 0x44, 0xc8, 0x7b, 0x3a }, - { 0xf3, 0x0c, 0x0a, 0xed, 0x70, 0x6d, 0x22, 0x55, - 0x5f, 0x07, 0x09, 0x6a, 0xf4, 0xb8, 0xbe, 0xdc, - 0x16, 0x3c, 0x0f, 0x6e, 0xd5, 0x34, 0x6e, 0xfc, - 0x28, 0xe8, 0xcf, 0xaf, 0x84, 0x2f, 0xa5, 0xd9 }, - { 0xf6, 0x13, 0xd5, 0x90, 0x46, 0xd1, 0x66, 0x71, - 0xd3, 0xc5, 0x60, 0x17, 0x6f, 0x3d, 0x77, 0xfd, - 0xc5, 0x1e, 0x5f, 0x57, 0xb5, 0xe4, 0x8a, 0xe7, - 0xa4, 0xb9, 0x70, 0x0a, 0x11, 0xd4, 0x69, 0x3a }, - { 0xf6, 0x54, 0x6b, 0x2f, 0xfe, 0x2b, 0xae, 0xf7, - 0x35, 0xe8, 0x25, 0x67, 0xa6, 0xe2, 0x36, 0x75, - 0x03, 0x94, 0xc1, 0x19, 0x14, 0x09, 0x87, 0x0c, - 0x6f, 0xbe, 0x95, 0x2d, 0x08, 0xa3, 0x3a, 0xba }, - { 0xf8, 0x64, 0x44, 0x3e, 0x2f, 0x63, 0x9e, 0x7c, - 0xff, 0xd2, 0x42, 0x21, 0xf6, 0x1b, 0xbf, 0xf0, - 0x7c, 0xce, 0x5c, 0x61, 0xdd, 0xb1, 0x68, 0xb3, - 0xb4, 0x04, 0xd7, 0xc8, 0xcd, 0xca, 0x18, 0xb2 }, - { 0xf8, 0x94, 0xf9, 0x67, 0x36, 0x9c, 0xe7, 0xcf, - 0xa3, 0x1a, 0xc1, 0x9a, 0x66, 0x65, 0xb0, 0xc4, - 0x24, 0xba, 0x40, 0x8a, 0xd5, 0xd3, 0x65, 0xf1, - 0x68, 0xd8, 0xbe, 0xeb, 0x79, 0xf4, 0x89, 0xf3 }, - { 0xf8, 0xcf, 0x1e, 0x08, 0x6a, 0x6a, 0x06, 0x3f, - 0xad, 0x25, 0x74, 0x25, 0xaa, 0xe7, 0x20, 0x01, - 0x40, 0x05, 0xb4, 0x15, 0x91, 0x2d, 0xbb, 0x8c, - 0x0b, 0xc9, 0x99, 0xaf, 0x48, 0x48, 0xcf, 0xe5 }, - { 0xfb, 0x9a, 0xf7, 0x9d, 0xea, 0x18, 0xaf, 0x62, - 0x99, 0x85, 0x0e, 0x25, 0x15, 0x9b, 0x4f, 0xb2, - 0x24, 0xcb, 0xb0, 0xf1, 0x4e, 0xad, 0x7e, 0x85, - 0xf6, 0x0c, 0x2a, 0xb2, 0x09, 0xea, 0x45, 0x0d }, - { 0xfb, 0xc4, 0xc9, 0xba, 0xcf, 0xe3, 0xda, 0x64, - 0x13, 0x18, 0x26, 0x6b, 0x72, 0x58, 0x56, 0x00, - 0x35, 0xbc, 0x64, 0x60, 0x8e, 0x34, 0xb9, 0x90, - 0xca, 0x92, 0xa5, 0x52, 0xf3, 0x14, 0x21, 0x61 }, - { 0xfb, 0xed, 0xd3, 0x88, 0x89, 0xf0, 0xb4, 0x1f, - 0x73, 0x4d, 0xe2, 0xf4, 0xc9, 0xd6, 0xf2, 0x7c, - 0x8d, 0x4a, 0xa9, 0xab, 0x73, 0x64, 0x91, 0xe1, - 0x64, 0xe1, 0x21, 0xb7, 0xbc, 0xaf, 0x44, 0xe8 }, - { 0xfc, 0x01, 0xa5, 0x5a, 0x36, 0xcc, 0x8b, 0x7b, - 0x7c, 0xa2, 0xea, 0xb0, 0x84, 0x60, 0xc2, 0x8d, - 0x1d, 0x6c, 0xd8, 0x9c, 0x57, 0x59, 0x94, 0x05, - 0xd5, 0x37, 0x4b, 0x91, 0xaa, 0xeb, 0xc8, 0x79 }, - { 0xfc, 0x4d, 0x9a, 0x37, 0xe5, 0xf7, 0x32, 0x72, - 0xd0, 0xa9, 0xdf, 0xcc, 0xe9, 0x03, 0x12, 0xc7, - 0x52, 0xe1, 0xb5, 0x2e, 0xb6, 0x54, 0xc4, 0x2c, - 0x36, 0x94, 0x4b, 0x90, 0x2a, 0x30, 0x41, 0x07 }, - { 0xfc, 0x56, 0xdb, 0xa1, 0xe7, 0xaf, 0xbd, 0xaa, - 0x07, 0x33, 0xc6, 0x91, 0x1c, 0x5f, 0x1f, 0x18, - 0x28, 0xcb, 0x12, 0x98, 0x31, 0x40, 0x1a, 0x3c, - 0xfd, 0xea, 0xa7, 0x24, 0x62, 0x95, 0x35, 0x94 }, - { 0xfc, 0x83, 0xc2, 0x89, 0x89, 0x5a, 0x92, 0x08, - 0xc9, 0xb1, 0x7a, 0x16, 0xbc, 0xe5, 0xce, 0x80, - 0xe8, 0xf4, 0xa0, 0x77, 0x21, 0x25, 0x29, 0xce, - 0x0b, 0xc7, 0xf5, 0x42, 0xc6, 0xcb, 0xde, 0x1a }, - { 0xfc, 0xa6, 0x23, 0x5d, 0x2a, 0xa4, 0xb1, 0xb2, - 0x51, 0x50, 0x78, 0x57, 0xb4, 0xf0, 0x08, 0xdf, - 0xd5, 0x27, 0x04, 0x2c, 0xe0, 0x45, 0x01, 0xaa, - 0xe2, 0x9d, 0xd2, 0x05, 0xbb, 0xef, 0xce, 0x0d }, - { 0xfc, 0xe7, 0x34, 0xe1, 0x2b, 0x8e, 0xfb, 0x43, - 0x12, 0x71, 0xbf, 0xf6, 0x7a, 0x7a, 0x0a, 0x93, - 0xb2, 0x19, 0xdd, 0x5e, 0x5d, 0xcc, 0x12, 0x58, - 0x59, 0x4d, 0x96, 0xfc, 0xe1, 0x93, 0xb8, 0x60 }, - { 0xfd, 0x9c, 0xfe, 0x14, 0xda, 0xd8, 0x97, 0x8c, - 0x5b, 0xc8, 0x88, 0x93, 0x8f, 0x16, 0xf3, 0xb3, - 0x98, 0xf7, 0x63, 0xa3, 0xad, 0xaf, 0xaa, 0x4a, - 0xd9, 0x41, 0xb7, 0xe3, 0x87, 0xeb, 0x4f, 0x4a }, - { 0xfd, 0xed, 0x92, 0xcb, 0x40, 0x91, 0x66, 0x82, - 0x3a, 0x35, 0xe2, 0x17, 0xf3, 0x0b, 0x38, 0xc4, - 0x86, 0xf8, 0x3e, 0xf2, 0xd4, 0xf2, 0x7b, 0x05, - 0xf1, 0x8c, 0x74, 0x49, 0x81, 0x33, 0x9a, 0x1c }, - { 0xfe, 0x26, 0xb2, 0xa6, 0x45, 0xa3, 0x1a, 0x91, - 0x11, 0x00, 0x09, 0x9a, 0xa9, 0xa2, 0x93, 0x9f, - 0x49, 0xe9, 0xfb, 0xea, 0x64, 0x48, 0x7b, 0xdf, - 0x68, 0xa5, 0x23, 0x70, 0x32, 0x92, 0xd6, 0xa0 }, - { 0xfe, 0x42, 0x1b, 0x24, 0x4e, 0x0e, 0x81, 0x6d, - 0x9f, 0x26, 0xb3, 0x52, 0xc8, 0x31, 0xd9, 0x30, - 0xe1, 0xc1, 0xc5, 0xd2, 0xfa, 0x4e, 0x0a, 0x1c, - 0x77, 0x96, 0xa1, 0xf2, 0x02, 0x0e, 0xf1, 0x67 }, - { 0xfe, 0x4f, 0x35, 0x6c, 0x7f, 0x9b, 0xfc, 0x17, - 0xff, 0xcb, 0x68, 0xd0, 0x76, 0x4e, 0xcb, 0x2a, - 0x87, 0xca, 0xa0, 0xae, 0x4c, 0xb5, 0x66, 0x62, - 0x21, 0x04, 0xd3, 0x6f, 0xfb, 0x52, 0xcb, 0x29 }, - { 0xff, 0x82, 0x6e, 0x2d, 0x0c, 0xb7, 0x71, 0x68, - 0x68, 0x67, 0x5a, 0xe4, 0xb4, 0x31, 0xb6, 0x37, - 0x1e, 0x9f, 0x0c, 0xdf, 0xcc, 0xb4, 0x9d, 0x43, - 0xba, 0x30, 0x49, 0xbf, 0xdd, 0x2c, 0x41, 0xb1 }, - { 0xff, 0xdc, 0x6b, 0x85, 0xfe, 0x7b, 0x10, 0x83, - 0xb5, 0x41, 0x6f, 0x80, 0x6f, 0xc2, 0x44, 0xb9, - 0xe4, 0xdf, 0x42, 0x99, 0xfb, 0xe3, 0xf6, 0x81, - 0xaf, 0x3f, 0x5c, 0xf4, 0x22, 0x5a, 0x8e, 0xaf }, -}; - -// SHA-256 hashes of leaf certificates issued by CNNIC's EV root. -const uint8_t kCNNICEVWhitelist[][crypto::kSHA256Length] = { - { 0xb5, 0xef, 0x42, 0xc4, 0xbc, 0xed, 0xf1, 0x7b, - 0xec, 0xc7, 0x5b, 0xf4, 0x63, 0x66, 0x49, 0xce, - 0xbf, 0xf8, 0x71, 0x1b, 0xce, 0xff, 0xfa, 0x69, - 0x5c, 0xc2, 0x52, 0xfa, 0x57, 0x4d, 0x42, 0x18 }, - { 0xb6, 0x82, 0x3c, 0x9d, 0xbc, 0x8e, 0x8c, 0x05, - 0x4b, 0xcf, 0x60, 0xf2, 0x38, 0x21, 0xac, 0x6c, - 0x58, 0x19, 0x73, 0x51, 0xea, 0xcf, 0xa5, 0x57, - 0x4c, 0xf0, 0x41, 0xb4, 0xce, 0x6b, 0x84, 0x04 }, - { 0xdf, 0x69, 0xf9, 0x6a, 0x85, 0x67, 0x8f, 0x6c, - 0xaf, 0x3f, 0xde, 0x25, 0xec, 0xfb, 0x5d, 0xf4, - 0x74, 0x70, 0x87, 0xc2, 0xaf, 0x3b, 0x00, 0x65, - 0xfb, 0x15, 0x10, 0x55, 0xcb, 0xcb, 0xa8, 0xc1 }, - { 0xee, 0x0c, 0xf6, 0x2b, 0x9d, 0x8e, 0x42, 0xa2, - 0x23, 0xb9, 0xa9, 0x60, 0xb5, 0xe9, 0x67, 0x0c, - 0xcc, 0x34, 0x6d, 0x89, 0x93, 0x8f, 0xfa, 0x5d, - 0xf7, 0x98, 0x65, 0xe4, 0x13, 0xd6, 0x31, 0x54 }, -}; - -const PublicKeyWhitelist kBuiltinWhitelist[] = { - // C=CN, O=China Internet Network Information Center, - // CN=China Internet Network Information Center EV Certificates Root - // Expires: August 31 2030. - { { 0x9d, 0xd5, 0x5f, 0xc5, 0x73, 0xf5, 0x46, 0xcb, - 0x6a, 0x38, 0x31, 0xd1, 0x11, 0x2d, 0x87, 0x10, - 0xa6, 0xf4, 0xf8, 0x2d, 0xc8, 0x7f, 0x5f, 0xae, - 0x9d, 0x3a, 0x1a, 0x02, 0x8d, 0xd3, 0x6e, 0x4b }, - kCNNICEVWhitelist, arraysize(kCNNICEVWhitelist) - }, - // C=CN, O=CNNIC, CN=CNNIC ROOT - // Expires: April 16 2027. - { { 0x1f, 0x42, 0x24, 0xce, 0xc8, 0x4f, 0xc9, 0x9c, - 0xed, 0x88, 0x1f, 0xf6, 0xfc, 0xfd, 0x3e, 0x21, - 0xf8, 0xc5, 0x19, 0xc5, 0x47, 0xaa, 0x6a, 0x5d, - 0xd3, 0xde, 0x24, 0x73, 0x02, 0xce, 0x50, 0xd1 }, - kCNNICDVWhitelist, arraysize(kCNNICDVWhitelist) - }, -}; // clang-format on -const size_t kBuiltinWhitelistSize = arraysize(kBuiltinWhitelist); - -const PublicKeyWhitelist* g_whitelist = kBuiltinWhitelist; -size_t g_whitelist_size = kBuiltinWhitelistSize; - -// Comparator to compare a SHA256HashValue with a uint8_t array containing a -// raw SHA-256 hash. Return value follows memcmp semantics. -int CompareSHA256HashValueToRawHash(const void* key, const void* element) { - const SHA256HashValue* search_key = - reinterpret_cast<const SHA256HashValue*>(key); - return memcmp(search_key->data, element, sizeof(search_key->data)); -} // Comparator to compare a (SHA-256) HashValue with a uint8_t array containing // a raw SHA-256 hash. Return value follows memcmp semantics. @@ -1671,36 +74,8 @@ cert.valid_start() > last_wosign_cert)) { return true; } - - // Check the public key whitelist. - for (size_t i = 0; i < g_whitelist_size; ++i) { - if (memcmp(hash.data(), g_whitelist[i].public_key, - crypto::kSHA256Length) != 0) { - continue; - } - const SHA256HashValue leaf_hash = - X509Certificate::CalculateFingerprint256(cert.os_cert_handle()); - void* result = bsearch( - &leaf_hash, g_whitelist[i].whitelist, g_whitelist[i].whitelist_size, - crypto::kSHA256Length, CompareSHA256HashValueToRawHash); - if (result == nullptr) - return true; // Hash was not found on the public key whitelist. - break; - } } return false; } -void SetCertificateWhitelistForTesting(const PublicKeyWhitelist* whitelist, - size_t whitelist_size) { - if (whitelist == nullptr || whitelist_size == 0) { - g_whitelist = kBuiltinWhitelist; - g_whitelist_size = kBuiltinWhitelistSize; - return; - } - - g_whitelist = whitelist; - g_whitelist_size = whitelist_size; -} - } // namespace net
diff --git a/net/cert/cert_verify_proc_whitelist.h b/net/cert/cert_verify_proc_whitelist.h index f1582c9..6456320 100644 --- a/net/cert/cert_verify_proc_whitelist.h +++ b/net/cert/cert_verify_proc_whitelist.h
@@ -16,15 +16,6 @@ class X509Certificate; -// PublicKeyWhitelist contains a SHA-256 SPKI hash and a pointer to an array -// of SHA-256 certificate hashes that have been publicly disclosed and -// whitelisted. -struct PublicKeyWhitelist { - uint8_t public_key[crypto::kSHA256Length]; - const uint8_t (*whitelist)[crypto::kSHA256Length]; - size_t whitelist_size; -}; - // Returns true if |cert| has been issued by a CA that is constrained from // issuing new certificates and |cert| is not within the whitelist of // existing certificates. Returns false if |cert| was issued by an @@ -36,12 +27,6 @@ IsNonWhitelistedCertificate(const X509Certificate& cert, const HashValueVector& public_key_hashes); -// Sets the certificate whitelist for testing. Supply nullptr/0 to reset to -// the built-in whitelist. -void NET_EXPORT_PRIVATE -SetCertificateWhitelistForTesting(const PublicKeyWhitelist* whitelist, - size_t whitelist_size); - } // namespace net #endif // NET_CERT_CERT_VERIFY_PROC_WHITELIST_H_
diff --git a/net/cert/cert_verify_proc_whitelist_unittest.cc b/net/cert/cert_verify_proc_whitelist_unittest.cc index 7919573..2732035 100644 --- a/net/cert/cert_verify_proc_whitelist_unittest.cc +++ b/net/cert/cert_verify_proc_whitelist_unittest.cc
@@ -14,176 +14,6 @@ namespace { -HashValue GetTestHashValue(uint8_t label, HashValueTag tag) { - HashValue hash_value(tag); - memset(hash_value.data(), label, hash_value.size()); - return hash_value; -} - -HashValueVector GetFakeHashValues() { - HashValueVector public_key_hashes; - - // Fake "root" hash - public_key_hashes.push_back(GetTestHashValue(0x00, HASH_VALUE_SHA256)); - public_key_hashes.push_back(GetTestHashValue(0x01, HASH_VALUE_SHA1)); - // Fake "intermediate" hash - public_key_hashes.push_back(GetTestHashValue(0x02, HASH_VALUE_SHA256)); - public_key_hashes.push_back(GetTestHashValue(0x03, HASH_VALUE_SHA1)); - // Fake "leaf" hash - public_key_hashes.push_back(GetTestHashValue(0x04, HASH_VALUE_SHA256)); - public_key_hashes.push_back(GetTestHashValue(0x05, HASH_VALUE_SHA1)); - - return public_key_hashes; -} - -// The SHA-256 hash of the leaf cert "ok_cert.pem"; obtainable either -// via X509Certificate::CalculateFingerprint256 or -// openssl x509 -inform pem -in ok_cert.pem -outform der | openssl -// dgst -sha256 -c -const uint8_t kWhitelistCerts[][crypto::kSHA256Length] = { - /* clang-format off */ - { 0xf4, 0x42, 0xdd, 0x66, 0xfa, 0x10, 0x70, 0x65, - 0xd1, 0x7e, 0xd9, 0xbb, 0x7c, 0xa9, 0x3c, 0x79, - 0x63, 0xbe, 0x01, 0xa7, 0x54, 0x18, 0xab, 0x2f, - 0xc3, 0x9a, 0x14, 0x53, 0xc3, 0x83, 0xa0, 0x5a }, - /* clang-format on */ -}; - -TEST(CertVerifyProcWhitelistTest, AcceptsWhitelistedEEByRoot) { - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); - ASSERT_TRUE(cert); - - // clang-format off - const PublicKeyWhitelist kWhitelist[] = { - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - kWhitelistCerts, arraysize(kWhitelistCerts) - }, - }; - // clang-format on - - SetCertificateWhitelistForTesting(kWhitelist, arraysize(kWhitelist)); - - HashValueVector public_key_hashes = GetFakeHashValues(); - - // Should return false, indicating this cert is acceptable because of - // it being whitelisted. - EXPECT_FALSE(IsNonWhitelistedCertificate(*cert, public_key_hashes)); - - SetCertificateWhitelistForTesting(nullptr, 0); -} - -TEST(CertVerifyProcWhitelistTest, AcceptsWhitelistedEEByIntermediate) { - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); - ASSERT_TRUE(cert); - - // clang-format off - const PublicKeyWhitelist kWhitelist[] = { - { { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 }, - kWhitelistCerts, arraysize(kWhitelistCerts) - }, - }; - // clang-format on - - SetCertificateWhitelistForTesting(kWhitelist, arraysize(kWhitelist)); - - HashValueVector public_key_hashes = GetFakeHashValues(); - - // Should return false, indicating this cert is acceptable because of - // it being whitelisted. - EXPECT_FALSE(IsNonWhitelistedCertificate(*cert, public_key_hashes)); - - SetCertificateWhitelistForTesting(nullptr, 0); -} - -TEST(CertVerifyProcWhitelistTest, RejectsNonWhitelistedEE) { - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), "expired_cert.pem"); - ASSERT_TRUE(cert); - - // clang-format off - const PublicKeyWhitelist kWhitelist[] = { - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - kWhitelistCerts, arraysize(kWhitelistCerts) - }, - }; - // clang-format on - - SetCertificateWhitelistForTesting(kWhitelist, arraysize(kWhitelist)); - - HashValueVector public_key_hashes = GetFakeHashValues(); - - // Should return true, indicating this certificate chains to a constrained - // root and is not whitelisted. - EXPECT_TRUE(IsNonWhitelistedCertificate(*cert, public_key_hashes)); - - SetCertificateWhitelistForTesting(nullptr, 0); -} - -TEST(CertVerifyProcWhitelistTest, RejectsNonWhitelistedEEByIntermediate) { - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), "expired_cert.pem"); - ASSERT_TRUE(cert); - - // clang-format off - const PublicKeyWhitelist kWhitelist[] = { - { { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 }, - kWhitelistCerts, arraysize(kWhitelistCerts) - }, - }; - // clang-format on - - SetCertificateWhitelistForTesting(kWhitelist, arraysize(kWhitelist)); - - HashValueVector public_key_hashes = GetFakeHashValues(); - - // Should return true, indicating this certificate chains to a constrained - // root and is not whitelisted. - EXPECT_TRUE(IsNonWhitelistedCertificate(*cert, public_key_hashes)); - - SetCertificateWhitelistForTesting(nullptr, 0); -} - -TEST(CertVerifyProcWhitelistTest, AcceptsUnconstrainedLeaf) { - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); - ASSERT_TRUE(cert); - - // clang-format off - const PublicKeyWhitelist kWhitelist[] = { - { { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 }, - kWhitelistCerts, arraysize(kWhitelistCerts) - }, - }; - // clang-format on - - SetCertificateWhitelistForTesting(kWhitelist, arraysize(kWhitelist)); - - HashValueVector public_key_hashes = GetFakeHashValues(); - - // Should return false, because the chain (as indicated by - // public_key_hashes) is not constrained. - EXPECT_FALSE(IsNonWhitelistedCertificate(*cert, public_key_hashes)); - - SetCertificateWhitelistForTesting(nullptr, 0); -} - TEST(CertVerifyProcWhitelistTest, HandlesWosignCerts) { scoped_refptr<X509Certificate> cert = ImportCertFromFile(GetTestCertsDirectory(), "wosign_before_oct_21.pem");
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc index b17fc0c..a13117a7 100644 --- a/net/cert/cert_verify_proc_win.cc +++ b/net/cert/cert_verify_proc_win.cc
@@ -8,16 +8,12 @@ #include <string> #include <vector> -#include "base/debug/crash_logging.h" -#include "base/debug/dump_without_crashing.h" #include "base/memory/free_deleter.h" #include "base/metrics/histogram_macros.h" #include "base/sha1.h" -#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_local.h" -#include "base/time/time.h" #include "crypto/capi_util.h" #include "crypto/scoped_capi_types.h" #include "crypto/sha2.h" @@ -899,47 +895,6 @@ ~ScopedThreadLocalCRLSet() { g_revocation_injector.Get().SetCRLSet(nullptr); } }; -// Sends a crash dump (without actually crashing) when the system time -// falls within the validity period of every certificate in -// |verified_cert|'s chain. This is to investigate reports of odd -// certificate errors that report ERR_CERT_DATE_INVALID when the -// certificate chain's dates appear to be valid. -// -// TODO(estark): remove this after obtaining diagnostic data from -// Canary. https://crbug.com/672906 -void MaybeDumpCertificateDateError( - const scoped_refptr<X509Certificate>& verified_cert, - DWORD error_status, - DWORD info_status) { - const base::Time now = base::Time::NowFromSystemTime(); - // If the leaf certificate is expired or not yet valid, nothing is odd. - if (now >= verified_cert->valid_expiry() || - now <= verified_cert->valid_start()) { - return; - } - // Repeat the check for the rest of the certificates in the chain; if - // any of them is expired or not yet valid, nothing is odd. - X509Certificate::OSCertHandles intermediates = - verified_cert->GetIntermediateCertificates(); - for (const auto& intermediate : intermediates) { - base::Time valid_start = - base::Time::FromFileTime(intermediate->pCertInfo->NotBefore); - base::Time valid_expiry = - base::Time::FromFileTime(intermediate->pCertInfo->NotAfter); - if (now >= valid_expiry || now <= valid_start) - return; - } - // None of the certificates in the chain appear to be expired or - // not-yet-valid, so send a crash dump for diagnostics. - base::debug::ScopedCrashKey error_status_crash_key( - "cert_verify_proc_win_date_error_error_status", - base::IntToString(error_status)); - base::debug::ScopedCrashKey info_status_crash_key( - "cert_verify_proc_win_date_error_info_status", - base::IntToString(info_status)); - base::debug::DumpWithoutCrashing(); -} - } // namespace CertVerifyProcWin::CertVerifyProcWin() {} @@ -1215,17 +1170,6 @@ verify_result->cert_status |= MapCertChainErrorStatusToCertStatus( chain_context->TrustStatus.dwErrorStatus); - // Send some diagnostic data in the event of certificate date errors - // that occur on chains with validity periods that are valid according - // to the system clock. - // TODO(estark): remove this after obtaining diagnostic data from - // Canary. https://crbug.com/672906 - if (verify_result->cert_status & CERT_STATUS_DATE_INVALID) { - MaybeDumpCertificateDateError(verify_result->verified_cert, - chain_context->TrustStatus.dwErrorStatus, - chain_context->TrustStatus.dwInfoStatus); - } - // Flag certificates that have a Subject common name with a NULL character. if (CertSubjectCommonNameHasNull(cert_handle)) verify_result->cert_status |= CERT_STATUS_INVALID;
diff --git a/net/data/ssl/blacklist/1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem b/net/data/ssl/blacklist/1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem new file mode 100644 index 0000000..b5e4f9a --- /dev/null +++ b/net/data/ssl/blacklist/1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem
@@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC +Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g +Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0 +aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa +Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg +SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo +aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp +ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z +7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA// +DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx +zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8 +hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs +4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u +gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY +NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E +FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3 +j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG +52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB +echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI +zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy +wy39FCqQmbkHzJ8= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/blacklist/README.md b/net/data/ssl/blacklist/README.md index 332bd47..937390a2 100644 --- a/net/data/ssl/blacklist/README.md +++ b/net/data/ssl/blacklist/README.md
@@ -8,6 +8,17 @@ ## Compromises & Misissuances +### China Internet Network Information Center (CNNIC) + +For details, see <https://security.googleblog.com/2015/03/maintaining-digital-certificate-security.html> + +As a result of misissuance of a sub-CA certificate, CNNIC end-entity +certificates were temporarily whitelisted, and then trust in the root fully +removed. + + * [1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem](1c01c6f4dbb2fefc22558b2bca32563f49844acfc32b7be4b0ff599f9e8c7af7.pem) + * [e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem](e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem) + ### Comodo For details, see <https://www.comodo.com/Comodo-Fraud-Incident-2011-03-23.html>,
diff --git a/net/data/ssl/blacklist/e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem b/net/data/ssl/blacklist/e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem new file mode 100644 index 0000000..c81744b --- /dev/null +++ b/net/data/ssl/blacklist/e28393773da845a679f2080cc7fb44a3b7a1c3792cb7eb7729fdcb6a8d99aea7.pem
@@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD +TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 +MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF +Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh +IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 +dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO +V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC +GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN +v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB +AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB +Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO +76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK +OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH +ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi +yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL +buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj +2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/README b/net/data/ssl/certificates/README index 962978b..4645ec8 100644 --- a/net/data/ssl/certificates/README +++ b/net/data/ssl/certificates/README
@@ -246,6 +246,14 @@ - client_4.key - client_4.pk8 - client_4_ca.pem +- client_5.pem +- client_5.key +- client_5.pk8 +- client_5_ca.pem +- client_6.pem +- client_6.key +- client_6.pk8 +- client_6_ca.pem - client_root_ca.pem This is a set of files used to unit test SSL client certificate authentication. @@ -263,6 +271,10 @@ Alternative Name fields recognized by Chrome OS. - client_4.pem is similar to client_2.pem but is a P-256 ECDSA key rather than RSA. + - client_5.pem is similar to client_2.pem but is a P-384 ECDSA key rather + than RSA. + - client_6.pem is similar to client_2.pem but is a P-521 ECDSA key rather + than RSA. - client_root_ca.pem is the CA certificate which signed client_*_ca.pem. ===== From net/data/ssl/scripts/generate-bad-eku-certs.sh
diff --git a/net/data/ssl/certificates/client_1.key b/net/data/ssl/certificates/client_1.key index ea61cc8..0389e2208 100644 --- a/net/data/ssl/certificates/client_1.key +++ b/net/data/ssl/certificates/client_1.key
@@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAm6YXgn7EzskCJawNsyffHz5P/wgyL9LkkYDzyFXqSGl2Rs66 -YlPkfBQVHAJXXcRMZL6GJ0qi32cpWgEsbXSk1zAiySVDayNej+jXNsQRoa9HE1lG -6SvH5ojlGhiRV9r9c2a55L6HePnG3B9BTU1nPT01fGqnYpaUxVDxqwMHeG1xdfvx -SEvrDsKWjYOSxVgbXGGDTwhMhA1rF1X+e9yimag0UxsB1IhNxd5YCJVRyaVTnxM+ -KmUe0OUYAXuKMGFGeT0W99M7YA3v6o2ZbPy3LZ07lwuP8w6egk5pjDo8v81FCUZn -Vhv/xHVr/1JH98X+heE6eCq4yC+NXrdLiLGzywIDAQABAoIBACa5VuYHhg1wYxFe -UfY9uDw8s4he0KWnUWiF7aDtByHG4z9QlXx7JMBd+raCOpxAh0UVRakm34i3UMls -u1HsEErdVfo3RCO2pAMnyct9UmmogwVkU8kVNGG9s0ofzKFQAXihmSQ45tmJQxlm -yUdjN4k73j+7BTP5BMBmmAmU8lnadWGIX97WG6hbB5mjfzIGlZM11kUlaIFnm9/f -UbrazpB6CdTeS5eML4ikLYfSoM/5r6r1gT01B8q16ZDEW5/mSmAgTPvyEY4XdKpZ -te2KOJFs9EfPn1VgSpN5ebnwRVnXKEYM6VRi2Ssn5YwQs8zS1+Fd95VBANVwS+yj -rehgaqECgYEAzK6Ru/iCJj4ecSXiuIN15H9mAcAG6WQmuPCLUc0eyvUZ0Mj57yjg -irJjflScLcotR/YdBUfUX+//XDBiQ9lVWCmFtHwWoynMBC4p+mBcVbId1LEk/kn4 -Oyx2Zkp7ccIpOe5JU8788GSroZzvQs9Ic2AI3hz/vC+igokNQJiUd5ECgYEAwqxZ -x2tLz1vNLDlfXhaFkhpttJoUV+rQteV9SsEqcAOBLgBqk49hwFTInQELpEtrzfo9 -3IW1C7C/e378OOlw+fBnBtmkTDfPy9XJd6b+VQWHsk/t1g2D2qYO0htrfwNpIe5V -Ns15MGiMV7kA8KELx+gAokSUws90StTqtJFG35sCgYEAxMSRr23w2IjhRQ8RzSX8 -AQWEb+xF+LriCuqcVLBniN9lyPRcadEXQ97IjRsT5WU2cLamIXxzKyOSjvKolOdr -B00rj123eXXl/qLOkjdurKeFzAHcOWWs8F4HGMFDuRHaBioQbjRPr15oLP6seMLC -uL+65qRkKWp1xR2yEsZb/DECgYAbwLRf4KUDH8RFPLyizjUmmgvvxlOGIRy2Acx1 -3sntBCLjav3GoZc+8xdSgralKndo+vbcvFcOHpl9wqG0f1sy1pnpeReaIg7GsWiy -XSU++7XXrttqO60De877FxuhFNxlEPQnBu3y/8SaMO64X00tp56Hg51tlGOw01/O -dDOVZwKBgQCKvxUHZPD6Q+M5HI/HmFxsHj9SsSl2sACErQMk7ru/aimuz9YPBXks -KeMzjIeRqtJadK9KQCBeGWmOFTLezgt+mceXn92nfNYMfdSkLzlyKZM2FW9Kk1Z/ -7YduboDUCiGg2PMn/qZPUiko3vkR6B3es/G+VC16mCrh9GksfsGHVg== +MIIEpQIBAAKCAQEAyYDjdJs5t0m2REDwka5GhFCGi8cPzDTgEKaqZj3wzRX/T8m/ +/jIRTK1ZfHxuzT61GnGOiut8XSw28a7/WY0/1/cc3nTGm0PuvKmBjrilQCZ9Y8kb +LC+lEQaD1y/TMErQN9W5/dE/bU91Cg0zIXJgX9a0pGyWeM7C87q9DRky/WwbN6eS +89fAsRNPILn7fDiSB8X3d27fv/mfWgw9pz0lew3hY4nppOulvBdaRKgxJKX8KTBS +cy3osDwkB+urQLamGsP/7igjIGy5yKOw8nXsnf1Gq+GDhS0E4Ca6seNEAOiXaAGC +W7wfNyBP+aVHj0CNvDPN147I/PfGKG1ZSvdipwIDAQABAoIBAQCXSQF8pp4qklkZ +3XfAqIuhA6RAhW/C7V/coIUGxjJoh79r9BkFjCmY2/13jSTTS+VEuUU/35U7jtqh +kbV9UqNATfOKwTnrkJFJbCotMUxAYaV6qZ6RCiRwJ+gMQ4fXlhPGF9zQR63LMAC7 +TzW4QttAmT5+xFgk03di7izKDMVPpedFlbpBPClBvf5nFiQAGY8jIhyyT0rKuoTN +iowciprIKeDg32vFCJAiIWgV687tTByjknpxYkH7H00kWctXklTKV44hSB07ayC7 +dMkskH+X2LHxxFj/YP6goYjlN3c+cW7SDnwoRyZUNuhU7N8Xo62Rp94axhvKekJ0 +t58nLwehAoGBAP/CXyZmyPWOfcrxO7OgpM/MQuGqF7etS57t6EphLhyTQOWCGK5Z +OS8Zun9/JOKxLPpjxQJpETfSBg1Q7KFRpzpnkd7db2GFP1+gz3bbeO3hsR6pfcQs +DxlUx/GHvX+i7c3wHfVgoBYG+cUugt44CzjYulLF/O5OZORGhujtxog1AoGBAMmx +cXb7naEgwa1dkRP7+OfbEN+gyJKN0D0bn/TRhaRaAoFUTGRqnvpbGMTsU5o9eOnh +pNhwBX1U/t/7nd9TcgCEqPBCKGAGOou29hq9rZ6whEvAF/rZXdzigaMGJF7MRq3l +XtNPC4+B9BJmoVxEu/l6dAI0HYwYaNFdEk9SZjLrAoGBANRABp7j5hqDKjnlgNpN +kvkwVsDYW95+3qcCYSh5Bb+JJO5SzRDD0wUXoQJ2DbJjvyP88F5Tu4pLreIXKomm +LdX2ZcRCmFCiODmwRvwon28rQcZkeo720YEALv5u3AC0wg2KHBKrIa+mElplgw3Q +DOAcXGSdEo7iWDBpp0RfL8eRAoGAI5kU7KomPR0Z8e5Uv9E2Mj3g8YdgPzWWbmKk +zcH5M3PLg2YMgaCr5IYVjhQkAVIeODFiNe03mtJYldHEIHmK4nqHkrgqhiAzTxuA +vmGB9kMzZmdGFDkvLuAvf0WDP9QQGXslTGhkIvUNzf2dNzrObo7lUMo/+M0KGwGx +TJy/evcCgYEA2rvXrdrpTMq9RwmjZejX5FjKvCTME1n5RE/I7kOgr3J4FShhDRyU +1wlVvQe7C6W59MVGF+9OAhth/lPDagv3WsBK0r6luabm3QwakAZLQqjpbD7Anw+Q +0+KEtl2M7PI8gwY8lrdFSEC2tJYp8iu/ahniyVxZjf5mEic6BnqIx/4= -----END RSA PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_1.pem b/net/data/ssl/certificates/client_1.pem index 33573d3..9e52061 100644 --- a/net/data/ssl/certificates/client_1.pem +++ b/net/data/ssl/certificates/client_1.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=B CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=Client Cert A Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:9b:a6:17:82:7e:c4:ce:c9:02:25:ac:0d:b3:27: - df:1f:3e:4f:ff:08:32:2f:d2:e4:91:80:f3:c8:55: - ea:48:69:76:46:ce:ba:62:53:e4:7c:14:15:1c:02: - 57:5d:c4:4c:64:be:86:27:4a:a2:df:67:29:5a:01: - 2c:6d:74:a4:d7:30:22:c9:25:43:6b:23:5e:8f:e8: - d7:36:c4:11:a1:af:47:13:59:46:e9:2b:c7:e6:88: - e5:1a:18:91:57:da:fd:73:66:b9:e4:be:87:78:f9: - c6:dc:1f:41:4d:4d:67:3d:3d:35:7c:6a:a7:62:96: - 94:c5:50:f1:ab:03:07:78:6d:71:75:fb:f1:48:4b: - eb:0e:c2:96:8d:83:92:c5:58:1b:5c:61:83:4f:08: - 4c:84:0d:6b:17:55:fe:7b:dc:a2:99:a8:34:53:1b: - 01:d4:88:4d:c5:de:58:08:95:51:c9:a5:53:9f:13: - 3e:2a:65:1e:d0:e5:18:01:7b:8a:30:61:46:79:3d: - 16:f7:d3:3b:60:0d:ef:ea:8d:99:6c:fc:b7:2d:9d: - 3b:97:0b:8f:f3:0e:9e:82:4e:69:8c:3a:3c:bf:cd: - 45:09:46:67:56:1b:ff:c4:75:6b:ff:52:47:f7:c5: - fe:85:e1:3a:78:2a:b8:c8:2f:8d:5e:b7:4b:88:b1: - b3:cb + 00:c9:80:e3:74:9b:39:b7:49:b6:44:40:f0:91:ae: + 46:84:50:86:8b:c7:0f:cc:34:e0:10:a6:aa:66:3d: + f0:cd:15:ff:4f:c9:bf:fe:32:11:4c:ad:59:7c:7c: + 6e:cd:3e:b5:1a:71:8e:8a:eb:7c:5d:2c:36:f1:ae: + ff:59:8d:3f:d7:f7:1c:de:74:c6:9b:43:ee:bc:a9: + 81:8e:b8:a5:40:26:7d:63:c9:1b:2c:2f:a5:11:06: + 83:d7:2f:d3:30:4a:d0:37:d5:b9:fd:d1:3f:6d:4f: + 75:0a:0d:33:21:72:60:5f:d6:b4:a4:6c:96:78:ce: + c2:f3:ba:bd:0d:19:32:fd:6c:1b:37:a7:92:f3:d7: + c0:b1:13:4f:20:b9:fb:7c:38:92:07:c5:f7:77:6e: + df:bf:f9:9f:5a:0c:3d:a7:3d:25:7b:0d:e1:63:89: + e9:a4:eb:a5:bc:17:5a:44:a8:31:24:a5:fc:29:30: + 52:73:2d:e8:b0:3c:24:07:eb:ab:40:b6:a6:1a:c3: + ff:ee:28:23:20:6c:b9:c8:a3:b0:f2:75:ec:9d:fd: + 46:ab:e1:83:85:2d:04:e0:26:ba:b1:e3:44:00:e8: + 97:68:01:82:5b:bc:1f:37:20:4f:f9:a5:47:8f:40: + 8d:bc:33:cd:d7:8e:c8:fc:f7:c6:28:6d:59:4a:f7: + 62:a7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,36 +37,36 @@ X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 19:9b:41:39:61:cf:f8:0f:62:98:43:1a:a4:fb:0b:71:f2:f0: - c4:b5:39:bb:dc:d1:d7:33:44:89:66:13:ff:0a:5a:66:02:74: - 6a:8d:8a:dc:a0:e0:d0:cc:8d:5f:1c:c0:34:c6:58:02:76:3b: - b5:1a:81:a5:a7:a1:c5:81:14:52:0f:21:37:06:2d:dc:dc:9c: - d0:d1:98:03:ac:d3:b5:12:0b:f8:b4:84:d8:bc:be:4d:27:fa: - df:16:6e:dd:0a:33:b7:87:50:7e:fe:c6:8d:84:b2:2d:7f:58: - 88:21:af:09:64:5e:4a:2d:f0:56:d4:3e:a3:dc:4c:aa:92:41: - 04:c1:6e:56:46:d5:36:69:0d:2a:f6:f0:29:d3:7c:ac:b7:cf: - 7f:18:bc:76:fa:8c:5a:76:81:67:db:b2:91:97:05:7d:14:da: - 26:d5:67:fe:c5:d2:6a:2c:5f:f4:96:3a:e4:0e:f5:15:95:05: - 57:de:b5:e5:96:b2:10:99:4a:b2:3a:ac:d2:ae:64:30:31:54: - f0:b9:9f:1d:56:e8:da:e9:4e:42:e3:26:3d:f7:8c:3e:9c:dd: - 42:77:9d:0c:67:52:73:94:c4:73:42:c2:b7:96:a4:44:4a:d5: - e9:3d:b1:46:aa:38:0b:1f:7f:ae:01:c6:07:da:40:3b:c0:22: - 61:c4:cb:80 + 1f:ef:f9:19:b9:64:e7:15:e2:7f:4f:e0:9e:66:f0:2a:b8:8f: + 4e:63:0c:7c:d5:a0:37:68:d2:c8:c2:9a:7b:e1:bd:13:31:c8: + ca:ce:96:c0:13:0a:bd:5e:f2:3c:8a:4d:0a:82:61:7e:35:0b: + fc:07:83:82:6e:cc:97:18:ff:32:68:08:5b:1a:34:35:ca:f0: + d2:19:d0:f0:35:66:c8:0b:44:ac:94:75:28:d8:cc:c1:b7:32: + df:93:cb:94:48:43:c7:cc:06:d3:b8:6c:6a:b2:c0:9f:f7:ef: + dd:36:c0:81:f9:e8:f0:7f:1c:d9:c5:92:31:91:de:88:a6:8d: + 0c:9e:e5:bf:a9:91:69:09:24:b1:5b:70:45:10:e1:8c:38:99: + c3:06:95:da:6a:c5:02:20:f8:25:e2:0c:b2:76:e5:01:1c:4b: + 0b:77:5a:ec:ff:99:37:fc:38:ff:17:cb:42:1d:c2:2f:2f:1f: + d1:be:d5:c6:22:89:e9:73:9c:ff:a9:03:77:cb:28:e5:e8:7e: + 0d:80:d4:75:88:ab:79:0b:bc:e3:98:1f:6e:0b:44:e2:c4:8a: + e6:6c:1d:74:30:6a:84:a7:2d:84:96:c4:7c:a9:25:39:8e:c8: + 50:df:0f:41:3f:4b:cb:92:c9:92:ed:2a:73:f1:7d:c3:cf:60: + a7:af:ab:85 -----BEGIN CERTIFICATE----- MIIC0jCCAbqgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQiBD -QTAeFw0xNjEwMDQxODUzMjRaFw0yNjEwMDIxODUzMjRaMBgxFjAUBgNVBAMMDUNs -aWVudCBDZXJ0IEEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbpheC -fsTOyQIlrA2zJ98fPk//CDIv0uSRgPPIVepIaXZGzrpiU+R8FBUcAlddxExkvoYn -SqLfZylaASxtdKTXMCLJJUNrI16P6Nc2xBGhr0cTWUbpK8fmiOUaGJFX2v1zZrnk -vod4+cbcH0FNTWc9PTV8aqdilpTFUPGrAwd4bXF1+/FIS+sOwpaNg5LFWBtcYYNP -CEyEDWsXVf573KKZqDRTGwHUiE3F3lgIlVHJpVOfEz4qZR7Q5RgBe4owYUZ5PRb3 -0ztgDe/qjZls/LctnTuXC4/zDp6CTmmMOjy/zUUJRmdWG//EdWv/Ukf3xf6F4Tp4 -KrjIL41et0uIsbPLAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYI -KwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQAZm0E5Yc/4D2KY -Qxqk+wtx8vDEtTm73NHXM0SJZhP/ClpmAnRqjYrcoODQzI1fHMA0xlgCdju1GoGl -p6HFgRRSDyE3Bi3c3JzQ0ZgDrNO1Egv4tITYvL5NJ/rfFm7dCjO3h1B+/saNhLIt -f1iIIa8JZF5KLfBW1D6j3EyqkkEEwW5WRtU2aQ0q9vAp03yst89/GLx2+oxadoFn -27KRlwV9FNom1Wf+xdJqLF/0ljrkDvUVlQVX3rXllrIQmUqyOqzSrmQwMVTwuZ8d -Vuja6U5C4yY994w+nN1Cd50MZ1JzlMRzQsK3lqREStXpPbFGqjgLH3+uAcYH2kA7 -wCJhxMuA +QTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBgxFjAUBgNVBAMMDUNs +aWVudCBDZXJ0IEEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJgON0 +mzm3SbZEQPCRrkaEUIaLxw/MNOAQpqpmPfDNFf9Pyb/+MhFMrVl8fG7NPrUacY6K +63xdLDbxrv9ZjT/X9xzedMabQ+68qYGOuKVAJn1jyRssL6URBoPXL9MwStA31bn9 +0T9tT3UKDTMhcmBf1rSkbJZ4zsLzur0NGTL9bBs3p5Lz18CxE08guft8OJIHxfd3 +bt+/+Z9aDD2nPSV7DeFjiemk66W8F1pEqDEkpfwpMFJzLeiwPCQH66tAtqYaw//u +KCMgbLnIo7Dydeyd/Uar4YOFLQTgJrqx40QA6JdoAYJbvB83IE/5pUePQI28M83X +jsj898YobVlK92KnAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYI +KwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQAf7/kZuWTnFeJ/ +T+CeZvAquI9OYwx81aA3aNLIwpp74b0TMcjKzpbAEwq9XvI8ik0KgmF+NQv8B4OC +bsyXGP8yaAhbGjQ1yvDSGdDwNWbIC0SslHUo2MzBtzLfk8uUSEPHzAbTuGxqssCf +9+/dNsCB+ejwfxzZxZIxkd6Ipo0MnuW/qZFpCSSxW3BFEOGMOJnDBpXaasUCIPgl +4gyyduUBHEsLd1rs/5k3/Dj/F8tCHcIvLx/RvtXGIonpc5z/qQN3yyjl6H4NgNR1 +iKt5C7zjmB9uC0TixIrmbB10MGqEpy2ElsR8qSU5jshQ3w9BP0vLksmS7Spz8X3D +z2Cnr6uF -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_1.pk8 b/net/data/ssl/certificates/client_1.pk8 index 19db6db3..12bf489c 100644 --- a/net/data/ssl/certificates/client_1.pk8 +++ b/net/data/ssl/certificates/client_1.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_1_ca.pem b/net/data/ssl/certificates/client_1_ca.pem index 88723ce6..9d61c0a 100644 --- a/net/data/ssl/certificates/client_1_ca.pem +++ b/net/data/ssl/certificates/client_1_ca.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=C Root CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=B CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:a5:56:c7:9d:32:e7:3d:17:ac:59:ca:f4:07:65: - 25:3e:65:7c:d9:3d:f4:0e:73:eb:b9:0b:a1:7b:4b: - 69:ab:ee:a3:50:49:2f:25:33:4d:2d:ac:00:32:17: - 34:0d:c9:bf:83:7d:b4:e5:d5:82:89:6f:ad:41:78: - 56:1d:05:bc:48:cc:0c:43:95:81:e3:e8:12:2d:67: - 74:68:12:61:8e:03:24:88:2c:57:28:8e:3d:10:77: - da:dc:78:b6:b4:72:92:56:0e:4a:0c:c6:f7:0a:44: - f5:56:5d:72:7a:a8:1d:bc:16:e8:95:25:4d:50:b6: - 2e:22:05:fd:d5:20:47:a4:32:37:52:38:61:90:9a: - aa:40:a8:db:91:80:00:89:e6:2c:17:5d:7c:5f:6f: - 2d:b2:b7:cf:71:a1:55:11:d8:fd:3b:9b:61:8f:1c: - 80:dd:da:90:8c:82:04:63:36:7c:b1:28:38:56:bc: - 6e:c0:b3:b9:4e:96:2b:3f:62:2a:e5:5f:f1:73:3c: - 53:a8:5f:03:d0:63:31:36:ac:00:61:30:ab:ad:d9: - aa:ab:5d:22:83:28:cc:f1:f7:88:f5:9a:be:57:c5: - e1:46:da:a3:88:55:a7:3c:f9:1c:17:bb:72:01:1d: - dd:8e:a0:b0:a3:d1:91:74:ae:94:58:c0:f5:30:63: - 5c:91 + 00:b3:87:98:77:4f:45:bb:de:87:86:1f:8b:1e:b2: + 26:cb:56:a3:d3:10:85:5e:95:ed:aa:c3:87:17:f4: + 40:86:bf:d7:e0:4a:ea:43:95:ce:b9:22:2a:c4:90: + f0:24:34:81:f2:5b:58:47:d3:d8:9b:eb:fc:90:4b: + 54:41:6d:6a:c0:5d:82:56:49:47:c4:ab:29:48:a4: + 23:05:fa:4f:a3:9e:83:65:5a:fd:57:c2:5a:4c:13: + bf:eb:75:ff:4d:f9:c1:5b:65:32:7d:bb:0d:e3:20: + 6a:4c:b3:28:fc:01:11:68:c0:9c:4b:f6:a5:df:68: + 0e:b2:c1:6f:b3:69:5f:53:35:2c:b9:3b:f8:c2:48: + 3b:3f:8f:d1:9f:76:b1:3a:1a:22:7f:fd:28:e6:6e: + 1c:96:95:c3:37:6f:c4:5a:24:28:25:5b:f6:a0:85: + f0:47:33:fa:9d:3b:38:cf:b1:d1:c9:06:d8:25:03: + bc:00:50:fe:08:dc:0d:d8:b1:87:94:8e:dc:74:ac: + 2c:53:44:91:4c:67:0a:71:5e:d3:df:c6:58:ee:00: + fe:96:fd:2f:96:f8:9f:35:5a:4e:be:ca:c1:5a:55: + f8:4d:85:77:3d:a9:d6:aa:75:0f:b9:82:07:c4:89: + 9e:9a:e6:39:f8:39:d2:be:62:cd:ca:43:a2:55:bf: + 0b:81 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,35 +37,35 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 41:1f:59:af:b3:83:87:87:bc:b3:2d:62:66:35:76:21:f2:bb: - e5:d4:87:23:a3:ab:4f:2b:ef:d0:ee:53:6f:17:b0:d4:6a:93: - 8e:74:71:7b:c5:36:f4:7b:87:3a:ab:84:b0:40:c5:3b:a0:e7: - a1:18:e6:3f:8d:8d:a8:49:b5:da:c7:4b:26:e4:ea:b9:2d:85: - b2:1d:01:70:bb:78:08:a6:c7:11:6b:0a:6f:5d:b0:d7:b5:72: - ec:51:46:26:bc:7e:e1:bd:1e:5e:d6:44:cf:d0:1b:55:ef:a9: - 5e:16:73:05:59:9f:ff:00:2e:5b:4e:29:7b:c4:2e:5c:46:9c: - 56:0a:78:d9:0b:10:83:9e:ff:8a:e3:57:ec:f1:d1:a3:85:26: - 2f:97:e6:d0:6f:5e:c8:cb:53:e7:28:64:ab:27:14:f4:b2:4b: - 52:80:e2:d1:ef:50:ba:db:34:5c:95:a4:3f:ac:5b:eb:15:c5: - d6:cb:4b:76:fb:f6:cd:2f:d9:ef:d4:cb:1c:85:52:8b:f2:2b: - 1b:ce:e3:0f:ed:07:44:11:8b:d8:b8:5c:41:ab:e1:36:0d:7e: - 3f:86:ff:0c:0f:f5:5e:ff:f6:b8:0a:ac:f0:3b:5d:c5:b7:ef: - f1:80:7c:26:b9:a2:ee:17:a8:e7:cb:c4:f4:5c:51:ff:57:53: - ee:a2:d3:66 + 99:1e:ab:d0:ab:f7:27:85:ed:91:bc:b0:3e:af:57:a8:31:1d: + 8e:e8:4b:bc:3e:b4:82:c9:6c:62:3a:8d:48:be:a1:0a:42:27: + 11:18:ef:47:53:b2:46:5f:d0:de:31:4e:c3:de:e8:c5:f6:24: + 09:69:25:c9:e6:f8:1e:1a:b1:27:63:ff:07:8b:7b:e9:80:b5: + 68:d4:94:54:b6:fe:c6:a6:3b:61:01:f9:89:a2:50:f2:9b:a0: + 02:2a:85:bd:13:5a:43:45:a7:b7:7c:eb:1a:69:95:04:dc:c0: + 17:13:da:c8:73:fd:0b:94:a2:fe:af:e7:18:b4:b1:90:21:99: + ad:f8:06:9a:6d:c1:e1:3b:f4:85:69:91:6d:68:84:9f:e9:09: + 30:08:f6:11:87:99:67:8f:16:cc:59:43:38:95:5e:fa:9d:c5: + 4a:2d:55:f2:3d:1a:49:5c:12:66:ea:40:2d:a1:de:08:40:a4: + b3:dc:19:8a:23:04:a6:cf:a6:9b:2e:d0:2a:3c:5f:fa:4c:bb: + 5a:62:d0:0b:a4:f6:8c:06:42:54:b4:c6:63:e0:f1:f0:11:a8: + ec:57:3d:93:6c:0c:67:a5:5a:8a:52:c5:37:b6:c3:7e:54:05: + b0:82:d9:32:8a:a7:12:83:39:d9:bc:81:ce:db:e9:ad:e9:b7: + 5d:1d:6d:3a -----BEGIN CERTIFICATE----- MIICwjCCAaqgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS -b290IENBMB4XDTE2MTAwNDE4NTMyNFoXDTI2MTAwMjE4NTMyNFowDzENMAsGA1UE -AwwEQiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVWx50y5z0X -rFnK9AdlJT5lfNk99A5z67kLoXtLaavuo1BJLyUzTS2sADIXNA3Jv4N9tOXVgolv -rUF4Vh0FvEjMDEOVgePoEi1ndGgSYY4DJIgsVyiOPRB32tx4trRyklYOSgzG9wpE -9VZdcnqoHbwW6JUlTVC2LiIF/dUgR6QyN1I4YZCaqkCo25GAAInmLBddfF9vLbK3 -z3GhVRHY/TubYY8cgN3akIyCBGM2fLEoOFa8bsCzuU6WKz9iKuVf8XM8U6hfA9Bj -MTasAGEwq63ZqqtdIoMozPH3iPWavlfF4Ubao4hVpzz5HBe7cgEd3Y6gsKPRkXSu -lFjA9TBjXJECAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAEEfWa+zg4eHvLMtYmY1diHyu+XUhyOjq08r -79DuU28XsNRqk450cXvFNvR7hzqrhLBAxTug56EY5j+NjahJtdrHSybk6rkthbId -AXC7eAimxxFrCm9dsNe1cuxRRia8fuG9Hl7WRM/QG1XvqV4WcwVZn/8ALltOKXvE -LlxGnFYKeNkLEIOe/4rjV+zx0aOFJi+X5tBvXsjLU+coZKsnFPSyS1KA4tHvULrb -NFyVpD+sW+sVxdbLS3b79s0v2e/UyxyFUovyKxvO4w/tB0QRi9i4XEGr4TYNfj+G -/wwP9V7/9rgKrPA7XcW37/GAfCa5ou4XqOfLxPRcUf9XU+6i02Y= +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwEQiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALOHmHdPRbve +h4Yfix6yJstWo9MQhV6V7arDhxf0QIa/1+BK6kOVzrkiKsSQ8CQ0gfJbWEfT2Jvr +/JBLVEFtasBdglZJR8SrKUikIwX6T6Oeg2Va/VfCWkwTv+t1/035wVtlMn27DeMg +akyzKPwBEWjAnEv2pd9oDrLBb7NpX1M1LLk7+MJIOz+P0Z92sToaIn/9KOZuHJaV +wzdvxFokKCVb9qCF8Ecz+p07OM+x0ckG2CUDvABQ/gjcDdixh5SO3HSsLFNEkUxn +CnFe09/GWO4A/pb9L5b4nzVaTr7KwVpV+E2Fdz2p1qp1D7mCB8SJnprmOfg50r5i +zcpDolW/C4ECAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAJkeq9Cr9yeF7ZG8sD6vV6gxHY7oS7w+tILJ +bGI6jUi+oQpCJxEY70dTskZf0N4xTsPe6MX2JAlpJcnm+B4asSdj/weLe+mAtWjU +lFS2/samO2EB+YmiUPKboAIqhb0TWkNFp7d86xpplQTcwBcT2shz/QuUov6v5xi0 +sZAhma34BpptweE79IVpkW1ohJ/pCTAI9hGHmWePFsxZQziVXvqdxUotVfI9Gklc +EmbqQC2h3ghApLPcGYojBKbPppsu0Co8X/pMu1pi0Auk9owGQlS0xmPg8fARqOxX +PZNsDGelWopSxTe2w35UBbCC2TKKpxKDOdm8gc7b6a3pt10dbTo= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_2.key b/net/data/ssl/certificates/client_2.key index e10b152..92cae727 100644 --- a/net/data/ssl/certificates/client_2.key +++ b/net/data/ssl/certificates/client_2.key
@@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA68lLXfm1qfzrGYiXtXmYfa/gwbcSGLTcu3VTD9Cow2A465PP -wp6bs6Qu3eFgwr7mceQ72pU410+zEwxo1bqHorcc1qhemDBLEaL5cu1KEyw3GN97 -kJTxOMR4zahR8IvDpnYRzjTtmZOuLUpZ7Lo3oOouLDQ6OpoOw9mLu2I7RtVc8cQC -iyOnQVWKeSbDQ/+or/m3DUbQq+Wyg9TTjDWAAbqxu3mP5Jf8nd8I/xAbRxe0jBSW -8hiZ++Yxjo/kLVkI+s4TBFVV3dau2b5oHGMsFoBFCaTIyE+4KZAKZAdptvxuh1ic -F/GhSZy3+H1w122uYmq7KA7pG32sBaQUl0iwnQIDAQABAoIBAGNOKlHwI9TuUs40 -O0ERb2owMwcjZZnGQtko9szIYuu2kQKXBH/BcW5djeehTrF22XPKXnMXOhNk29T/ -+v9ZSlr7qEe4Le8HF/bbnxgKXJJqouH07gPc1yPDi+WCKNCY7NQlEia5IAD4s/kb -QXh0jY1WVBAGByg7TlCqRTGsk66myy3qA7Ii65Y1upiGFfDczpQL5mUKaBTjz3HC -/DMr4GRuFOw5NkhELu9SOENZGSwuzpk6gNDVYDXJ+uo9bvH9EIB9S1KIoAoa+yr2 -L9LUcG9vwOuMNh7qN66nAGxGzoI8qh6kHVgfyTcF11NwaFutSIsGQTRKeANxiq2I -IkbT3EECgYEA/QGxkv9iC/oJfe9gWlUeEFJsqlmLp2ii0HrH9KnywT5sgicd0//3 -eCU1KI8LygABbHb3hmFQRAwf2gFq0u1MBqXQQ4nVsrNtPVzNGGOkfk5T9DIu4vBN -L9Qw29ULYDbaHaC1BFymwnMsOOsKctiMmsiklhyCWBczcHmE+gn+6ykCgYEA7pNx -on/qgrCp9P8mMdBqjOmc5740Pbqu5JShYJkja1fv7IVLhGEuifdwGWge6ZfjaXPV -wq7P7mbXa2Dreqc0LkxUrdAffZitsXckhNswSDToZzf7JB9GAnkcMKlLcJHbO0Kf -jJALGpPknLg8XbpqsT+/GAS1GBNbL4Rz/MovPFUCgYBkJEt494SDYRBovFrS5mXj -5/wC4TaZqJzpD/AdMzdWrbKdQYZY5zO4ZmHID/aGmcH2gJAwrEvs4y+oRm9V1X8G -EpOAaAohlUtjwlubj7UIGVC5kzNjt+GVUNOV75l1F8D1gSqk81c+GAAk90NHedcN -XOVoVRhybZx6pF6x6UrxIQKBgDc8EbIClYO+bQrYy7n6u8B2Eaqhoays/PLU6mvX -6Jhgmp6S2cIDUegFToHDVmzUioUOmW3iVSenzbYBkWMrNOyHJY+8QJ4ubABLSjws -FwiQn0HOdymMyAOokHs/psSgMDaPHStI6hk0JliWWvuEPlFdJdvksxyo1pKwwr3C -/Z6lAoGBAIr0S/O5rYrEHchJ6yr+YtJa6vIowOSUvijG2L4ghVY63v/Ke5vzwmOZ -wuPh0D6atpKPIq5p3eGlgq12cJHGwaybVP9C3C9vD+MlhMttOy7Ez9aVFILE9nt/ -hSrOTRwYYXLs0txl7K40Ja2hjIRXw1TQU37V4wADNa+GhPpUfg9y +MIIEpAIBAAKCAQEA4IzClfxmgklkJHuaB4JlLIR6Z8ehIjoJ868C8YA5I23PDxHI +G6W+l3F98IFAaO41q4VU/IimBRMIRiGZOkHgBi/NQS1nu11IQKxl1azljs2zvzLC +V9j220CNyDqvsxv13/26W+rbjsZ+0VdIN+lh6RY9AhhDcA5BvN6vjZOFR02ypIin +oSOKnhZOMLRVsosPuKS1qlaXCrWD8Z7n1tD4koZ6+9YiYCVgZ7pKNTIS8kR8b3Pj +pm+8Q+FVR+HZWoYySE1n/w6vDmK47TUUI2vdBHpnKbis//DjVHrsDQ1ZqqvxRwDS +FLtIoMwuMyO3rWuqsa2FnvgJbvA9XD4Pv3F3jwIDAQABAoIBAQCTe2ACarhZMiLX +42aTMA2LY6eRqggnFr+akYP5YiIlJuYsG522qvG3Pg9de0b2pB4T/YqIIqgIBSwW +A9ND9ChTZ+oDuPK8mNPvxktMQDa1yF0aYxhJ4nKgJpH4xLLJjL+80kUoQeTarXx1 +ukHwlxR7puODELSaUILUrd3XuuB6p06I3KBIzkGx0BqVRFmCk/nAaCZLA8WJcUmD +rfYFPTc/2Jm7xH+Wzhd86evT1yIpTCu7VNdXuzFHLFesxeFSb49cRrJLlKEWT3B8 +7jRjhqclZvJ2jTvMEx8I48vIW40jrs5dGWFqzYRo0rbelI/BRwDQsGEDyHLwZdRG +qAg158bhAoGBAPLAr2sGQhI0+v5GWMuqELgCJlqmDP9gP/6pU2E8CkmTefu8MsVx +UzFaAN+WFr0wqpVuCTVczSZSF10/SwM4mNsTb6vc9CQ9uK655vTIiFLR8NTZOxAK +sVyJKCRB0Ejf9nufSJaLZetW3QQTxWLmrhmVjKPjJOYsKLHfye3Oz7VLAoGBAOzN +xt1Fgi2XgnASI+D3e7hwa/9obfCPdwB1kdyPq8A2sZBTzGdnixY5IcbwQmK4Ekuj +d9gnaRqg/WKUoR/5PduYvxo1JErBh+itu/mdSpSd71465Do/Q5mQbV+MAnyWTPak +mtBKs6W22Sk1+NSuoA4mX+oC8m29uDho8b+bIdBNAoGAWXTmcAM7X+hEQmX8HPmL +9bNdHPSqP4Xhr2AIyQFOLTT6s+jzsM0FQl+PiNWPhaKkijKllBOhyihgUc2cQBCg +S8NK2MOw+JYCM+lwEe7ARfz1ygpPeKboG1i0AUB7mA9ojr/xCQFPyr0U74a1q6+k +our4jACNvYCycnIswMUAyCcCgYBh/vJKBYbOuUFogYlJgwE3HYcD5kKA5832abEY +FnicDcZDlPok3KupYbFBs5G1arlfheGFmSGcvHy/fASFx846fyaugMlpClflCWid +7uK7R/SUCUkDdcTS2vr4LGenCUgGVa4ffpqDfHy32jcERNPFp0nP/LI4ieefqIZK +pbdDjQKBgQCEqdGn6ZB+dg3i2RK544RfNqQaVmDw0czmxl3xRnUEfElA7ZSmE4Lt +Dx9bmXoXYAjMz3Elh3+3pIq4BjlKsPK18zZPAGQnVxoSnUtW9tVI+bc/yFk2irfo +UtSDxMR8dcUd4vjE2WHIgBnJEbGj+PkMqjMimMZqQDhr4UI2OTe7Zw== -----END RSA PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_2.pem b/net/data/ssl/certificates/client_2.pem index 1f7a03a..abc9dde 100644 --- a/net/data/ssl/certificates/client_2.pem +++ b/net/data/ssl/certificates/client_2.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=E CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=Client Cert D Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:eb:c9:4b:5d:f9:b5:a9:fc:eb:19:88:97:b5:79: - 98:7d:af:e0:c1:b7:12:18:b4:dc:bb:75:53:0f:d0: - a8:c3:60:38:eb:93:cf:c2:9e:9b:b3:a4:2e:dd:e1: - 60:c2:be:e6:71:e4:3b:da:95:38:d7:4f:b3:13:0c: - 68:d5:ba:87:a2:b7:1c:d6:a8:5e:98:30:4b:11:a2: - f9:72:ed:4a:13:2c:37:18:df:7b:90:94:f1:38:c4: - 78:cd:a8:51:f0:8b:c3:a6:76:11:ce:34:ed:99:93: - ae:2d:4a:59:ec:ba:37:a0:ea:2e:2c:34:3a:3a:9a: - 0e:c3:d9:8b:bb:62:3b:46:d5:5c:f1:c4:02:8b:23: - a7:41:55:8a:79:26:c3:43:ff:a8:af:f9:b7:0d:46: - d0:ab:e5:b2:83:d4:d3:8c:35:80:01:ba:b1:bb:79: - 8f:e4:97:fc:9d:df:08:ff:10:1b:47:17:b4:8c:14: - 96:f2:18:99:fb:e6:31:8e:8f:e4:2d:59:08:fa:ce: - 13:04:55:55:dd:d6:ae:d9:be:68:1c:63:2c:16:80: - 45:09:a4:c8:c8:4f:b8:29:90:0a:64:07:69:b6:fc: - 6e:87:58:9c:17:f1:a1:49:9c:b7:f8:7d:70:d7:6d: - ae:62:6a:bb:28:0e:e9:1b:7d:ac:05:a4:14:97:48: - b0:9d + 00:e0:8c:c2:95:fc:66:82:49:64:24:7b:9a:07:82: + 65:2c:84:7a:67:c7:a1:22:3a:09:f3:af:02:f1:80: + 39:23:6d:cf:0f:11:c8:1b:a5:be:97:71:7d:f0:81: + 40:68:ee:35:ab:85:54:fc:88:a6:05:13:08:46:21: + 99:3a:41:e0:06:2f:cd:41:2d:67:bb:5d:48:40:ac: + 65:d5:ac:e5:8e:cd:b3:bf:32:c2:57:d8:f6:db:40: + 8d:c8:3a:af:b3:1b:f5:df:fd:ba:5b:ea:db:8e:c6: + 7e:d1:57:48:37:e9:61:e9:16:3d:02:18:43:70:0e: + 41:bc:de:af:8d:93:85:47:4d:b2:a4:88:a7:a1:23: + 8a:9e:16:4e:30:b4:55:b2:8b:0f:b8:a4:b5:aa:56: + 97:0a:b5:83:f1:9e:e7:d6:d0:f8:92:86:7a:fb:d6: + 22:60:25:60:67:ba:4a:35:32:12:f2:44:7c:6f:73: + e3:a6:6f:bc:43:e1:55:47:e1:d9:5a:86:32:48:4d: + 67:ff:0e:af:0e:62:b8:ed:35:14:23:6b:dd:04:7a: + 67:29:b8:ac:ff:f0:e3:54:7a:ec:0d:0d:59:aa:ab: + f1:47:00:d2:14:bb:48:a0:cc:2e:33:23:b7:ad:6b: + aa:b1:ad:85:9e:f8:09:6e:f0:3d:5c:3e:0f:bf:71: + 77:8f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,36 +37,36 @@ X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 9f:d0:6e:8b:08:58:16:b5:78:3f:05:bb:59:bc:cf:74:1c:88: - b0:7e:10:c5:71:9d:b5:08:05:59:ca:f0:c8:64:49:96:82:8b: - 14:0c:da:9d:be:a2:8b:37:df:e1:69:bc:8e:f4:be:80:3f:f9: - 8a:1d:7a:70:37:3c:18:a0:92:27:10:e3:74:ca:fa:b8:db:f2: - c6:a5:32:66:85:88:29:3a:4e:64:95:85:b4:43:37:8a:6d:48: - f4:12:2f:b2:d0:66:c9:b7:88:ad:b8:a7:1f:97:59:bf:d9:0d: - d6:ce:ff:5f:75:2f:d2:e0:69:c8:d6:17:b9:fd:3c:ed:fd:1f: - 47:14:f8:ef:0b:33:2a:1c:14:25:d1:82:90:d3:67:1b:ea:b0: - f7:5b:78:a9:9d:28:1b:d3:cd:8d:bd:30:c2:7e:12:32:dd:83: - cc:57:47:b3:e7:0c:79:b5:f8:a0:f4:f0:d8:29:1b:9b:fb:2f: - a9:1c:cb:a9:84:14:29:c7:23:b8:85:88:d9:78:5f:c7:a4:c6: - 1b:bd:6e:70:2e:a2:be:31:98:c7:9c:35:1d:44:59:f8:31:83: - 87:ee:a9:c7:ab:f5:6f:e6:8a:cc:49:5f:23:fd:7c:a4:61:01: - 9b:51:d8:b0:85:9a:bf:1d:9d:62:3e:b0:7c:e0:5e:57:ed:69: - 3c:f3:8c:54 + 95:de:33:2f:e2:11:c2:6d:64:4a:5f:98:69:cb:a3:c6:bd:a1: + 0f:00:9c:32:c8:83:c7:05:14:21:e3:ab:fa:7a:f8:43:36:95: + 6c:85:8b:b5:ee:2c:fc:4b:77:95:8a:bf:2f:89:c1:cc:c2:21: + 99:40:c4:01:be:2a:4a:5b:d9:61:06:16:b0:5d:3f:27:ad:e3: + 57:5c:41:89:fb:3b:dc:73:45:ac:05:e2:dd:89:95:74:09:30: + 68:3c:3f:e8:bc:e6:94:4a:ed:4c:74:90:ad:a0:a4:97:c0:04: + 9b:13:81:a5:24:76:db:4c:49:8f:80:f9:7c:7f:8b:f9:de:45: + 65:5d:03:b2:c7:99:3b:56:b1:f8:29:7e:b4:69:fe:f9:29:b3: + b6:59:bd:51:b1:02:97:5b:db:29:5e:9a:b5:1f:75:42:0f:7e: + 58:bc:e3:3f:39:ea:7b:12:c7:68:06:c0:e4:78:f4:e9:b4:9b: + 4c:fc:94:06:a3:1a:37:8b:3d:cd:67:f9:f4:e9:87:20:6c:07: + 71:62:85:78:35:96:9c:ef:98:59:33:50:83:7a:32:ad:22:01: + 3a:20:05:05:05:b0:62:9d:4e:20:94:1b:05:cc:7d:bb:ba:98: + a0:51:d2:50:b5:cb:d8:97:0f:42:13:65:2a:14:b8:cd:f2:24: + 5f:0e:6e:6b -----BEGIN CERTIFICATE----- MIIC0jCCAbqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwERSBD -QTAeFw0xNjEwMDQxODUzMjRaFw0yNjEwMDIxODUzMjRaMBgxFjAUBgNVBAMMDUNs -aWVudCBDZXJ0IEQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDryUtd -+bWp/OsZiJe1eZh9r+DBtxIYtNy7dVMP0KjDYDjrk8/CnpuzpC7d4WDCvuZx5Dva -lTjXT7MTDGjVuoeitxzWqF6YMEsRovly7UoTLDcY33uQlPE4xHjNqFHwi8OmdhHO -NO2Zk64tSlnsujeg6i4sNDo6mg7D2Yu7YjtG1VzxxAKLI6dBVYp5JsND/6iv+bcN -RtCr5bKD1NOMNYABurG7eY/kl/yd3wj/EBtHF7SMFJbyGJn75jGOj+QtWQj6zhME -VVXd1q7ZvmgcYywWgEUJpMjIT7gpkApkB2m2/G6HWJwX8aFJnLf4fXDXba5iarso -DukbfawFpBSXSLCdAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYI -KwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQCf0G6LCFgWtXg/ -BbtZvM90HIiwfhDFcZ21CAVZyvDIZEmWgosUDNqdvqKLN9/habyO9L6AP/mKHXpw -NzwYoJInEON0yvq42/LGpTJmhYgpOk5klYW0QzeKbUj0Ei+y0GbJt4ituKcfl1m/ -2Q3Wzv9fdS/S4GnI1he5/Tzt/R9HFPjvCzMqHBQl0YKQ02cb6rD3W3ipnSgb082N -vTDCfhIy3YPMV0ez5wx5tfig9PDYKRub+y+pHMuphBQpxyO4hYjZeF/HpMYbvW5w -LqK+MZjHnDUdRFn4MYOH7qnHq/Vv5orMSV8j/XykYQGbUdiwhZq/HZ1iPrB84F5X -7Wk884xU +QTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBgxFjAUBgNVBAMMDUNs +aWVudCBDZXJ0IEQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDgjMKV +/GaCSWQke5oHgmUshHpnx6EiOgnzrwLxgDkjbc8PEcgbpb6XcX3wgUBo7jWrhVT8 +iKYFEwhGIZk6QeAGL81BLWe7XUhArGXVrOWOzbO/MsJX2PbbQI3IOq+zG/Xf/bpb +6tuOxn7RV0g36WHpFj0CGENwDkG83q+Nk4VHTbKkiKehI4qeFk4wtFWyiw+4pLWq +VpcKtYPxnufW0PiShnr71iJgJWBnuko1MhLyRHxvc+Omb7xD4VVH4dlahjJITWf/ +Dq8OYrjtNRQja90EemcpuKz/8ONUeuwNDVmqq/FHANIUu0igzC4zI7eta6qxrYWe ++Alu8D1cPg+/cXePAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYI +KwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQCV3jMv4hHCbWRK +X5hpy6PGvaEPAJwyyIPHBRQh46v6evhDNpVshYu17iz8S3eVir8vicHMwiGZQMQB +vipKW9lhBhawXT8nreNXXEGJ+zvcc0WsBeLdiZV0CTBoPD/ovOaUSu1MdJCtoKSX +wASbE4GlJHbbTEmPgPl8f4v53kVlXQOyx5k7VrH4KX60af75KbO2Wb1RsQKXW9sp +Xpq1H3VCD35YvOM/Oep7EsdoBsDkePTptJtM/JQGoxo3iz3NZ/n06YcgbAdxYoV4 +NZac75hZM1CDejKtIgE6IAUFBbBinU4glBsFzH27upigUdJQtcvYlw9CE2UqFLjN +8iRfDm5r -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_2.pk8 b/net/data/ssl/certificates/client_2.pk8 index 731e39c3..ad3ca5d5 100644 --- a/net/data/ssl/certificates/client_2.pk8 +++ b/net/data/ssl/certificates/client_2.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_2_ca.pem b/net/data/ssl/certificates/client_2_ca.pem index dd58ffa7..7808096 100644 --- a/net/data/ssl/certificates/client_2_ca.pem +++ b/net/data/ssl/certificates/client_2_ca.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=C Root CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=E CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:a2:7e:a3:fd:c1:d7:78:cd:57:ac:67:54:37:69: - fb:72:6f:1d:8f:d0:47:0f:11:14:ab:42:d8:3d:6a: - 34:2b:d6:38:07:df:16:1d:c6:62:eb:d7:12:e1:86: - 83:f2:dd:8f:97:09:94:8f:1b:ff:3b:84:9b:48:e5: - 0d:43:6b:ae:bb:75:88:1c:c6:3a:7f:d8:12:d9:7c: - 12:18:6d:e2:f0:88:d4:3e:5a:93:b3:af:c1:79:a1: - b6:a3:f7:56:46:21:e6:7d:6e:36:ea:ba:4b:52:f7: - a9:45:0b:83:09:2c:09:22:8a:67:5a:8f:88:60:b0: - 11:07:25:9b:c2:6a:3c:63:4c:0e:69:45:ce:9d:ba: - c9:d4:01:fb:78:56:38:08:8f:e5:d6:ff:ac:e4:04: - fa:26:cf:d2:05:33:57:a3:8e:80:c0:b6:40:d5:d3: - ca:85:17:30:b2:24:f4:19:af:c5:48:a4:ed:c0:49: - c1:a4:b7:89:29:ba:e5:2d:37:78:1c:d6:3e:9b:03: - fa:bc:7b:e2:76:a6:70:f3:1b:9d:b2:4b:fc:72:7b: - 77:89:50:bb:88:2f:b5:b6:a2:c7:33:27:b7:d1:1a: - 7c:d4:58:e3:5e:88:ca:f8:49:c3:cd:cc:0f:93:4b: - 3c:fd:75:c3:7b:6f:bf:d3:db:ba:2e:31:7b:a7:a5: - 42:c5 + 00:c3:39:c3:5a:8e:ff:f2:1d:cc:26:91:5d:15:9e: + ca:e0:fb:cf:99:5f:13:3d:c6:37:59:8b:ce:cc:76: + 0e:1c:9f:b6:49:5b:09:97:63:9d:e1:00:74:44:fb: + 2f:53:f3:d5:03:92:77:97:53:74:7e:d2:da:d3:a3: + f4:c1:91:6a:83:ff:89:fe:73:46:56:ca:6d:51:0d: + 57:16:3d:3e:e8:fc:00:d9:4a:7a:7d:93:84:06:12: + c5:ff:31:b3:a6:eb:96:18:71:b8:56:5c:2f:ab:78: + e2:53:dd:15:d8:65:c8:f6:96:14:dc:15:cf:2a:39: + ed:e1:08:1b:84:29:c7:1c:78:67:c8:e0:72:58:4e: + 33:7f:cb:ef:71:82:db:45:1d:7c:0c:d0:f5:4c:af: + 85:6b:14:61:50:87:34:42:fe:45:a3:3c:a3:53:57: + 1d:ac:11:c8:cf:2f:5e:cb:78:87:39:a1:41:3f:69: + 21:5c:1e:19:02:a3:6c:91:d3:1b:4e:50:fc:a4:b1: + 03:87:c0:58:b1:fe:cd:58:5e:53:ed:c9:d6:5d:9e: + a3:fb:0d:e0:a0:8e:3d:c9:9e:9e:83:07:61:c7:30: + 5a:ca:29:93:04:af:5e:f3:57:2e:c2:d8:c8:ae:7f: + 5c:a4:27:fa:cd:55:a2:fd:89:d2:0b:87:24:6b:7b: + fb:19 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,35 +37,35 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 92:8b:93:94:03:04:91:3f:4d:8b:f3:90:53:ee:73:b5:33:c7: - 61:ea:0f:a5:59:9b:f0:0d:4f:7d:48:0d:5a:58:e7:1f:68:f6: - d6:58:75:33:a5:d2:b7:65:6a:28:40:bc:0e:1e:78:ee:9a:13: - 3c:b0:8b:8f:98:72:86:50:3a:a3:bf:6d:f0:21:95:a8:73:d0: - dd:e5:0e:25:b1:62:76:65:69:1f:ee:26:82:ab:be:a4:a8:30: - a7:41:34:07:57:2f:8b:ab:25:af:cb:23:a5:79:cf:b2:a2:17: - 02:a7:aa:50:92:6e:0d:9b:ff:c9:22:38:b4:0f:47:94:d2:80: - 7f:92:30:00:ec:5b:22:e2:a6:71:5e:e8:8f:0d:2f:38:2c:29: - 47:6a:7f:20:0a:e2:42:cb:b7:6e:2b:29:0f:03:55:94:84:5f: - e7:47:bf:ae:75:88:05:4e:42:ac:78:57:9d:9c:e2:77:d2:17: - 42:55:ba:f8:77:ee:61:d6:e8:ec:aa:e0:7a:a6:65:c6:35:80: - 08:3d:39:a6:70:8c:9e:6d:7a:ee:e7:cf:36:46:98:00:c8:7b: - b8:84:7f:9d:9f:bd:31:4f:99:25:6e:76:9a:5d:46:3e:40:70: - c6:a8:03:f3:98:9c:be:fb:f6:ad:c2:8d:e3:f9:7d:93:3a:78: - da:b3:d7:dc + 67:d4:6c:cf:cd:54:81:67:2a:c2:c4:66:c7:76:9c:b0:8b:6b: + ef:b8:ae:a9:b3:d6:f8:47:91:d5:97:0b:bd:1a:87:21:8c:ce: + be:0c:80:d5:a5:25:0d:0a:c7:ed:be:cb:8c:6d:08:e8:de:a5: + 33:89:e6:87:df:2b:f4:54:b3:c2:94:15:0d:36:5e:1a:aa:c0: + b0:03:3c:24:c6:a1:81:91:ca:fe:db:0f:59:1b:d6:4e:48:0b: + 52:d3:e7:07:d7:b1:ca:b2:22:e4:d4:37:a4:3c:87:3c:0a:11: + a6:10:2a:ed:86:2a:bb:db:10:7e:f3:a5:fc:10:ab:80:5b:07: + 58:7c:22:76:3e:9b:9c:72:79:0d:dc:85:f8:e7:c2:0f:17:aa: + 01:dd:8e:24:27:77:4e:23:03:da:88:e0:df:e6:ca:b4:84:56: + a1:dc:9f:e0:93:94:97:d2:98:cd:32:6d:73:84:f9:3e:4c:96: + b3:51:07:b8:9f:66:32:d1:ac:53:0e:17:a9:6f:29:d1:7b:73: + b3:55:9b:cc:8f:8b:e5:49:fd:fd:f2:30:d6:d0:f7:03:06:12: + e3:66:2d:0d:a1:da:28:04:04:29:b8:40:6e:0e:6f:31:48:cb: + 54:f7:e2:89:22:d8:05:e0:f5:7e:48:b3:96:ff:6b:ef:e7:fe: + 71:1d:0b:77 -----BEGIN CERTIFICATE----- MIICwjCCAaqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS -b290IENBMB4XDTE2MTAwNDE4NTMyNFoXDTI2MTAwMjE4NTMyNFowDzENMAsGA1UE -AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJ+o/3B13jN -V6xnVDdp+3JvHY/QRw8RFKtC2D1qNCvWOAffFh3GYuvXEuGGg/Ldj5cJlI8b/zuE -m0jlDUNrrrt1iBzGOn/YEtl8Ehht4vCI1D5ak7OvwXmhtqP3VkYh5n1uNuq6S1L3 -qUULgwksCSKKZ1qPiGCwEQclm8JqPGNMDmlFzp26ydQB+3hWOAiP5db/rOQE+ibP -0gUzV6OOgMC2QNXTyoUXMLIk9BmvxUik7cBJwaS3iSm65S03eBzWPpsD+rx74nam -cPMbnbJL/HJ7d4lQu4gvtbaixzMnt9EafNRY416IyvhJw83MD5NLPP11w3tvv9Pb -ui4xe6elQsUCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAJKLk5QDBJE/TYvzkFPuc7Uzx2HqD6VZm/AN -T31IDVpY5x9o9tZYdTOl0rdlaihAvA4eeO6aEzywi4+YcoZQOqO/bfAhlahz0N3l -DiWxYnZlaR/uJoKrvqSoMKdBNAdXL4urJa/LI6V5z7KiFwKnqlCSbg2b/8kiOLQP -R5TSgH+SMADsWyLipnFe6I8NLzgsKUdqfyAK4kLLt24rKQ8DVZSEX+dHv651iAVO -Qqx4V52c4nfSF0JVuvh37mHW6Oyq4HqmZcY1gAg9OaZwjJ5teu7nzzZGmADIe7iE -f52fvTFPmSVudppdRj5AcMaoA/OYnL779q3CjeP5fZM6eNqz19w= +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM5w1qO//Id +zCaRXRWeyuD7z5lfEz3GN1mLzsx2DhyftklbCZdjneEAdET7L1Pz1QOSd5dTdH7S +2tOj9MGRaoP/if5zRlbKbVENVxY9Puj8ANlKen2ThAYSxf8xs6brlhhxuFZcL6t4 +4lPdFdhlyPaWFNwVzyo57eEIG4Qpxxx4Z8jgclhOM3/L73GC20UdfAzQ9UyvhWsU +YVCHNEL+RaM8o1NXHawRyM8vXst4hzmhQT9pIVweGQKjbJHTG05Q/KSxA4fAWLH+ +zVheU+3J1l2eo/sN4KCOPcmenoMHYccwWsopkwSvXvNXLsLYyK5/XKQn+s1Vov2J +0guHJGt7+xkCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAGfUbM/NVIFnKsLEZsd2nLCLa++4rqmz1vhH +kdWXC70ahyGMzr4MgNWlJQ0Kx+2+y4xtCOjepTOJ5offK/RUs8KUFQ02XhqqwLAD +PCTGoYGRyv7bD1kb1k5IC1LT5wfXscqyIuTUN6Q8hzwKEaYQKu2GKrvbEH7zpfwQ +q4BbB1h8InY+m5xyeQ3chfjnwg8XqgHdjiQnd04jA9qI4N/myrSEVqHcn+CTlJfS +mM0ybXOE+T5MlrNRB7ifZjLRrFMOF6lvKdF7c7NVm8yPi+VJ/f3yMNbQ9wMGEuNm +LQ2h2igEBCm4QG4ObzFIy1T34oki2AXg9X5Is5b/a+/n/nEdC3c= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_3.key b/net/data/ssl/certificates/client_3.key index 20498ba..c2b341fe 100644 --- a/net/data/ssl/certificates/client_3.key +++ b/net/data/ssl/certificates/client_3.key
@@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqblhT1L+ZDRTZ0fYWCIjgpdv0ILn9ws9204VFTjf3jU+66wZ -m9iN2+j62y/68iBFkt/107YqA2so3o0kS6o7Izt+EQg+o5ZvvHM3fVSR/IGejHbt -1fbk9o7oblbikOtRpfOQ2EXZ+h2RASE6YTE66lrE6RruAOaWYsoLpzepHDlOEj6t -q+24LIalckzKOQNNYfwpuLzbMomVCmIaKNaObesGM5pbj+hz4S8ehCH7CzgnsYOg -x/7tecyrV6XPW7OEDLm4GoyQIlnxvk1GDIVje6caSW+OzqL65SlkAwLcaN95tmub -IgdZr6H/upzmXdRh3kCBLgKWAqpUJNSzxBjj/wIDAQABAoIBACvRiKYKL1N/jujj -S5+1cKWOo3eZ1HmblWTBTAAmpuWfqZb+3720sytLgziDsq5AVrYMzFLUfRRU3kBX -AD/ou0vlWC7dig6CEGb++ByLcQVYEa8CJXVQQNzHGIskM2pm1rWZpJOxtQ02BPHd -ukzNgQBwXtYv9bKV1c27jDan0ClQ1nj14TK8k2LLCDYd3O9Zbfm+5fKqsJIjDFm6 -rPeltV8yFBsZPxBJAQUNTR0fnq5mYLrCm8ARWYbLxbbWSjInXStrwVuaG8P/T7Om -sl6Jj7eRClM6HrCtJMukgAQ1f6Rg882MVKKv8sjVO0ZHIZrg+e3TLPLrngXYeLxP -NgrJgUECgYEA2J5Ee5cVyvbJITD71dVHcZc8QcaBVFBsSCcw0ZQ4LgUmS/z3ERYq -mpdXzU1bTAOOMujOjiv9qYXn800DqRiDML384/cQz9DNkUth2eSQjk2Ryp9x5z+Y -CeeMrzTtPK+SRfbC12UnNkZqwg+OrVgQUswbgOt2tM/9Bx5ujo6kuDsCgYEAyJSX -ouGtWU7wys3ffmrmYlc0G/hGXxvqunpD8YR61fxyIMb1M9FfqObbCWaD7tkboEfe -u6l7+d+4eJO2Gv++68asqHPsNQeq0qqAVPVNVusD+Uw9DPK4yxfbtn0lbALikCAB -VT4yudolYsZA0b6tHApSG2bZkr3lXSwLFmljCw0CgYEAtT3m6smE8Gb/7geADm/+ -8Omq/xXJy/PmRZCU5iXvw4GHg3jKd79mMiaCzkH1K2qmJa5odMgV2ysw4X8Emwzp -Z3TvDQYBSP/Zn8HEw3zb/lSksTYrJWMuIMteCJJuFKKJ7oQCjhoSbvUICgreQ+c0 -8THZqUpZ7ftAKB6sPhbXd1UCgYEAsYjL+nBTtcOoX2j/U26dAhf7WHJVHyOfjHRh -pOjErJhoD9jp+XZtfBrxbo2dYxApYqGaZHHr+MvrBFaBjb4lp5zO/76zKHDj4tjl -A82nKbKUbtjrBIXlyGUSpKB6OfMHw9eANon57gRGqPmfL8bchAAiknxjQX3xAJnW -Kn0XHBUCgYAnpq1dGwdknEcVnVMsoZQirc6UK39u8KIH6S7P2QhSzc6pXOeC8HGj -H6zvc3LtddSj8tCWfGDGVWp4v9TIWHOZbmmg20iU93j7Xi53cL3zB6TaAa467tj9 -0JFgB4tk1zKLggwkF26Sf3m+kkPDGwm4+jmk8TfV7VZ9yCZQY5Onig== +MIIEpQIBAAKCAQEAs1wyu8BIKDebRat4oOpyEyZdRu5xxCSc7ai2gTXXcroKrqlO +IGESIuAAZ4BwvqzvA7LUsDr8xauFewRLYYV6F2xDNmcLGXx0uGXpHP3w30K8DP0J +fk99OMBSceUrGYCCqmnCNmu3LQf0dGK/jpDtRxpkJKxMuNIq0J2GCMEYnj7eTxJc +ZKQrhkMSgWcMjFbkFkY8Kc9OGOpPZl+01nNfHpOt38kGZczcQrrphkIIoaul/CLT +I1eg2myA3sX5nMURZZyy3/PWyL2qr0Bm7c5fBEYX5pLqZMiz5CDL4EQJFR985OAH +zSJ8vaAGZTXUPhwHYY8BUyIlhZN1c0LHwcASnwIDAQABAoIBAQCxZ/WKfdMhbHb5 +v3ROffadeGn0ue7vWmOaMzFpto7HHLtqLW5oWnts4XGk7ocWIsk7OExlj8Lr5g7e +Mc45xKORvXTxv5Rb/h0ZMzwTgB4bRs/obPRR6l/qnVgu7cTmsZUM6BTAbWS+dsrV +v8LHShRYKwN4vrAYc1EEDXtA93XZNp9OBsVRdHJbeV4PIXqdzr3lScbXHNNs+dSF +i6pZ/VrCHWmp9H1NXQuicAHr5aTvRMvFpfNtFSpOo7xEX+4cbVTk2b5TwxBa5TTj +oew8/h2IsU1OmytQ1zya9Xtpw9GIMOnWg5Ce2dAyoBIkmhQwYcJyYTMM34vul/eD +k0u0cxFxAoGBAOPM4x1mjD6tuQHFYBivBySU1CpdI0taem3GCijCUj/7tHPA+7FZ ++DhtnYF4b9q/X9EHRoosCWY07/tImYZT7ziiEFITRZL/m/hA239M9zuop7+9Tp3W +M2oTkTGQOn5qKNg8TplYinpHmpGD7VURUczsdmo28rgp9Ubu1h5CwHv3AoGBAMmQ +Nz/wgVCPVnZ66AsHiwLcAZ99aZg5961XVgyUXpWSQ0wNYKYWsYwYhYCeVRmwImSA +NavYq0+AxTgnZrwhXXkvKXYfkLhh6aePRqyPaT3AUfp4akNe/S24HW3zO9Z0BzG6 +Ca8+oERpQ6hZ92WB1yikVoUqIaw+oIn5mzjkouSZAoGBAJ7z/p4rSj0KN4gW06El +sJREDW+qIdCYx8kFYV1jisT+u8HxrS7pmpy1UCxhf5th4lgW/Y+4fq6EzdfHpujm +dIxN+ZlrvSZ/mbO2ffLsH6/PVY4jaFIWfzXLhYrSGx7OsMWB/05dS/NbN23GYrrz +JOMbNN2UjfUXwgDG8z2WUn2tAoGAbzJzeH+7J3FcNtLJTsRjiTlMX+t1JLjeDa// +1cLIh2WAYOWEazxbyLkCdZljw18rKhyc/2fx4lNc+gSqpaEWizNcgUEaus2xdHIT +gEFBwwJld3OU1AQEUoOfILguS7oI+gLzMs2u5u7Xl3nChSpjQ5Wd8arzlq2aLWQZ +oQJpZwkCgYEAt1rJPy0pThzwYvpYEiYS2HmVEa7PWvtD19qDPOC6AaoPJzmP3J4u +KmJXdk6g01R8G/QMb52V9Uen9m8YcCRyZqTTjWUDH7fDpuS7M+OkeRX/ytp4TCL0 +WejDMpu98bDTWvUBXdzQfUhwAVb/CMpX4rLtRdLZt8JT14OCDbpgogE= -----END RSA PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_3.pem b/net/data/ssl/certificates/client_3.pem index 4f5ad24..ccd6022 100644 --- a/net/data/ssl/certificates/client_3.pem +++ b/net/data/ssl/certificates/client_3.pem
@@ -5,66 +5,66 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=E CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=Client Cert F Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:a9:b9:61:4f:52:fe:64:34:53:67:47:d8:58:22: - 23:82:97:6f:d0:82:e7:f7:0b:3d:db:4e:15:15:38: - df:de:35:3e:eb:ac:19:9b:d8:8d:db:e8:fa:db:2f: - fa:f2:20:45:92:df:f5:d3:b6:2a:03:6b:28:de:8d: - 24:4b:aa:3b:23:3b:7e:11:08:3e:a3:96:6f:bc:73: - 37:7d:54:91:fc:81:9e:8c:76:ed:d5:f6:e4:f6:8e: - e8:6e:56:e2:90:eb:51:a5:f3:90:d8:45:d9:fa:1d: - 91:01:21:3a:61:31:3a:ea:5a:c4:e9:1a:ee:00:e6: - 96:62:ca:0b:a7:37:a9:1c:39:4e:12:3e:ad:ab:ed: - b8:2c:86:a5:72:4c:ca:39:03:4d:61:fc:29:b8:bc: - db:32:89:95:0a:62:1a:28:d6:8e:6d:eb:06:33:9a: - 5b:8f:e8:73:e1:2f:1e:84:21:fb:0b:38:27:b1:83: - a0:c7:fe:ed:79:cc:ab:57:a5:cf:5b:b3:84:0c:b9: - b8:1a:8c:90:22:59:f1:be:4d:46:0c:85:63:7b:a7: - 1a:49:6f:8e:ce:a2:fa:e5:29:64:03:02:dc:68:df: - 79:b6:6b:9b:22:07:59:af:a1:ff:ba:9c:e6:5d:d4: - 61:de:40:81:2e:02:96:02:aa:54:24:d4:b3:c4:18: - e3:ff + 00:b3:5c:32:bb:c0:48:28:37:9b:45:ab:78:a0:ea: + 72:13:26:5d:46:ee:71:c4:24:9c:ed:a8:b6:81:35: + d7:72:ba:0a:ae:a9:4e:20:61:12:22:e0:00:67:80: + 70:be:ac:ef:03:b2:d4:b0:3a:fc:c5:ab:85:7b:04: + 4b:61:85:7a:17:6c:43:36:67:0b:19:7c:74:b8:65: + e9:1c:fd:f0:df:42:bc:0c:fd:09:7e:4f:7d:38:c0: + 52:71:e5:2b:19:80:82:aa:69:c2:36:6b:b7:2d:07: + f4:74:62:bf:8e:90:ed:47:1a:64:24:ac:4c:b8:d2: + 2a:d0:9d:86:08:c1:18:9e:3e:de:4f:12:5c:64:a4: + 2b:86:43:12:81:67:0c:8c:56:e4:16:46:3c:29:cf: + 4e:18:ea:4f:66:5f:b4:d6:73:5f:1e:93:ad:df:c9: + 06:65:cc:dc:42:ba:e9:86:42:08:a1:ab:a5:fc:22: + d3:23:57:a0:da:6c:80:de:c5:f9:9c:c5:11:65:9c: + b2:df:f3:d6:c8:bd:aa:af:40:66:ed:ce:5f:04:46: + 17:e6:92:ea:64:c8:b3:e4:20:cb:e0:44:09:15:1f: + 7c:e4:e0:07:cd:22:7c:bd:a0:06:65:35:d4:3e:1c: + 07:61:8f:01:53:22:25:85:93:75:73:42:c7:c1:c0: + 12:9f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: email:santest@example.com, othername:<unsupported> Signature Algorithm: sha256WithRSAEncryption - 5f:d8:99:71:11:d1:1f:ae:7e:4a:fa:85:ff:f6:18:60:e0:c3: - e8:8c:8d:7b:51:b9:ed:ea:26:e8:2b:ff:d8:5c:1e:98:cb:c6: - a5:e8:ef:21:af:e5:a8:f2:47:93:5e:36:66:21:7d:84:c7:b2: - 2c:70:31:71:67:88:c4:a9:45:c1:20:1b:e1:47:df:75:d6:83: - a2:db:45:27:ca:fa:b1:11:b0:c2:33:bc:a7:2c:fb:bd:2b:06: - 68:0d:95:4c:d4:2f:ab:2a:5b:f8:92:4e:9b:74:30:f2:8d:7c: - 26:c7:f1:0f:0e:f7:f1:28:b6:84:90:db:ac:a0:1a:84:4c:3e: - 0b:14:39:de:90:ca:58:2c:f8:16:a4:0e:4d:cd:ba:c5:1d:bb: - 91:69:a6:55:83:96:20:ee:1f:33:58:8f:da:44:32:9b:84:1e: - 99:d3:74:60:c9:10:67:5c:a9:03:11:74:e3:82:85:99:4c:aa: - 4e:3d:ee:ac:91:7c:e8:b9:b1:64:08:45:48:6f:34:f4:52:8a: - 68:f9:80:6b:5b:b2:af:83:cb:fc:77:fd:9f:d0:aa:69:3e:bd: - f7:ca:05:17:f8:f4:39:d3:58:9a:04:81:43:a8:b3:66:90:9e: - b6:27:b3:1c:25:ad:8f:8c:c6:45:a4:f6:02:60:3a:0b:5e:6f: - 6b:e6:1b:3f + 98:4b:03:9b:ef:b9:8b:47:81:42:9c:5b:a0:49:54:2e:e1:95: + 51:87:9c:5c:83:b1:3c:ab:21:29:7e:e0:de:11:92:ad:75:5e: + 9d:e2:51:70:0e:95:e3:68:3f:2e:ad:69:50:31:57:6b:6d:7b: + 6c:d2:c5:4b:e5:a7:a1:20:ba:bf:1a:8e:86:47:94:72:35:34: + 07:5f:1a:cf:3f:13:ad:53:7f:6b:db:ef:d8:00:a2:5c:e9:5c: + 20:47:5a:9e:f6:91:c5:9b:05:69:f3:25:05:e2:8b:dd:d8:41: + 99:64:44:ed:74:e2:eb:f7:42:2c:b5:d0:f1:ac:64:c0:f4:87: + e9:3e:51:52:41:a3:c2:4e:58:c2:ee:fe:b4:25:37:b9:3d:c2: + f0:cf:c0:90:7f:f6:02:b2:38:88:92:2a:e0:d4:db:87:5c:b2: + 02:a6:60:b4:da:ab:53:d2:b2:7d:64:d5:d3:b6:35:66:96:f0: + ec:fb:9c:8d:35:40:e1:4a:7e:52:98:1f:1b:a2:e3:e4:35:70: + ec:33:ad:e8:a4:ed:a4:26:7d:07:a5:03:92:ac:11:81:4f:0f: + b3:c7:97:7f:29:d8:09:d1:28:11:f6:8d:9a:e0:5f:26:b9:7f: + 74:77:e7:74:b1:5b:0f:7c:ae:13:d1:75:bc:ad:49:51:05:39: + 06:53:6d:5c -----BEGIN CERTIFICATE----- MIIC8jCCAdqgAwIBAgICEAMwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwERSBD -QTAeFw0xNjEwMDQxODUzMjRaFw0yNjEwMDIxODUzMjRaMBgxFjAUBgNVBAMMDUNs -aWVudCBDZXJ0IEYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpuWFP -Uv5kNFNnR9hYIiOCl2/Qguf3Cz3bThUVON/eNT7rrBmb2I3b6PrbL/ryIEWS3/XT -tioDayjejSRLqjsjO34RCD6jlm+8czd9VJH8gZ6Mdu3V9uT2juhuVuKQ61Gl85DY -Rdn6HZEBITphMTrqWsTpGu4A5pZiygunN6kcOU4SPq2r7bgshqVyTMo5A01h/Cm4 -vNsyiZUKYhoo1o5t6wYzmluP6HPhLx6EIfsLOCexg6DH/u15zKtXpc9bs4QMubga -jJAiWfG+TUYMhWN7pxpJb47OovrlKWQDAtxo33m2a5siB1mvof+6nOZd1GHeQIEu -ApYCqlQk1LPEGOP/AgMBAAGjTzBNMEsGA1UdEQREMEKBE3NhbnRlc3RAZXhhbXBs +QTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBgxFjAUBgNVBAMMDUNs +aWVudCBDZXJ0IEYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzXDK7 +wEgoN5tFq3ig6nITJl1G7nHEJJztqLaBNddyugquqU4gYRIi4ABngHC+rO8DstSw +OvzFq4V7BEthhXoXbEM2ZwsZfHS4Zekc/fDfQrwM/Ql+T304wFJx5SsZgIKqacI2 +a7ctB/R0Yr+OkO1HGmQkrEy40irQnYYIwRiePt5PElxkpCuGQxKBZwyMVuQWRjwp +z04Y6k9mX7TWc18ek63fyQZlzNxCuumGQgihq6X8ItMjV6DabIDexfmcxRFlnLLf +89bIvaqvQGbtzl8ERhfmkupkyLPkIMvgRAkVH3zk4AfNIny9oAZlNdQ+HAdhjwFT +IiWFk3VzQsfBwBKfAgMBAAGjTzBNMEsGA1UdEQREMEKBE3NhbnRlc3RAZXhhbXBs ZS5jb22gKwYKKwYBBAGCNxQCA6AdDBtzYW50ZXN0QGFkLmNvcnAuZXhhbXBsZS5j -b20wDQYJKoZIhvcNAQELBQADggEBAF/YmXER0R+ufkr6hf/2GGDgw+iMjXtRue3q -Jugr/9hcHpjLxqXo7yGv5ajyR5NeNmYhfYTHsixwMXFniMSpRcEgG+FH33XWg6Lb -RSfK+rERsMIzvKcs+70rBmgNlUzUL6sqW/iSTpt0MPKNfCbH8Q8O9/EotoSQ26yg -GoRMPgsUOd6Qylgs+BakDk3NusUdu5FpplWDliDuHzNYj9pEMpuEHpnTdGDJEGdc -qQMRdOOChZlMqk497qyRfOi5sWQIRUhvNPRSimj5gGtbsq+Dy/x3/Z/Qqmk+vffK -BRf49DnTWJoEgUOos2aQnrYnsxwlrY+MxkWk9gJgOgteb2vmGz8= +b20wDQYJKoZIhvcNAQELBQADggEBAJhLA5vvuYtHgUKcW6BJVC7hlVGHnFyDsTyr +ISl+4N4Rkq11Xp3iUXAOleNoPy6taVAxV2tte2zSxUvlp6Egur8ajoZHlHI1NAdf +Gs8/E61Tf2vb79gAolzpXCBHWp72kcWbBWnzJQXii93YQZlkRO104uv3Qiy10PGs +ZMD0h+k+UVJBo8JOWMLu/rQlN7k9wvDPwJB/9gKyOIiSKuDU24dcsgKmYLTaq1PS +sn1k1dO2NWaW8Oz7nI01QOFKflKYHxui4+Q1cOwzreik7aQmfQelA5KsEYFPD7PH +l38p2AnRKBH2jZrgXya5f3R353SxWw98rhPRdbytSVEFOQZTbVw= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_3.pk8 b/net/data/ssl/certificates/client_3.pk8 index 68f019a..2ffcdb2 100644 --- a/net/data/ssl/certificates/client_3.pk8 +++ b/net/data/ssl/certificates/client_3.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_3_ca.pem b/net/data/ssl/certificates/client_3_ca.pem index dd58ffa7..7808096 100644 --- a/net/data/ssl/certificates/client_3_ca.pem +++ b/net/data/ssl/certificates/client_3_ca.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=C Root CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=E CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:a2:7e:a3:fd:c1:d7:78:cd:57:ac:67:54:37:69: - fb:72:6f:1d:8f:d0:47:0f:11:14:ab:42:d8:3d:6a: - 34:2b:d6:38:07:df:16:1d:c6:62:eb:d7:12:e1:86: - 83:f2:dd:8f:97:09:94:8f:1b:ff:3b:84:9b:48:e5: - 0d:43:6b:ae:bb:75:88:1c:c6:3a:7f:d8:12:d9:7c: - 12:18:6d:e2:f0:88:d4:3e:5a:93:b3:af:c1:79:a1: - b6:a3:f7:56:46:21:e6:7d:6e:36:ea:ba:4b:52:f7: - a9:45:0b:83:09:2c:09:22:8a:67:5a:8f:88:60:b0: - 11:07:25:9b:c2:6a:3c:63:4c:0e:69:45:ce:9d:ba: - c9:d4:01:fb:78:56:38:08:8f:e5:d6:ff:ac:e4:04: - fa:26:cf:d2:05:33:57:a3:8e:80:c0:b6:40:d5:d3: - ca:85:17:30:b2:24:f4:19:af:c5:48:a4:ed:c0:49: - c1:a4:b7:89:29:ba:e5:2d:37:78:1c:d6:3e:9b:03: - fa:bc:7b:e2:76:a6:70:f3:1b:9d:b2:4b:fc:72:7b: - 77:89:50:bb:88:2f:b5:b6:a2:c7:33:27:b7:d1:1a: - 7c:d4:58:e3:5e:88:ca:f8:49:c3:cd:cc:0f:93:4b: - 3c:fd:75:c3:7b:6f:bf:d3:db:ba:2e:31:7b:a7:a5: - 42:c5 + 00:c3:39:c3:5a:8e:ff:f2:1d:cc:26:91:5d:15:9e: + ca:e0:fb:cf:99:5f:13:3d:c6:37:59:8b:ce:cc:76: + 0e:1c:9f:b6:49:5b:09:97:63:9d:e1:00:74:44:fb: + 2f:53:f3:d5:03:92:77:97:53:74:7e:d2:da:d3:a3: + f4:c1:91:6a:83:ff:89:fe:73:46:56:ca:6d:51:0d: + 57:16:3d:3e:e8:fc:00:d9:4a:7a:7d:93:84:06:12: + c5:ff:31:b3:a6:eb:96:18:71:b8:56:5c:2f:ab:78: + e2:53:dd:15:d8:65:c8:f6:96:14:dc:15:cf:2a:39: + ed:e1:08:1b:84:29:c7:1c:78:67:c8:e0:72:58:4e: + 33:7f:cb:ef:71:82:db:45:1d:7c:0c:d0:f5:4c:af: + 85:6b:14:61:50:87:34:42:fe:45:a3:3c:a3:53:57: + 1d:ac:11:c8:cf:2f:5e:cb:78:87:39:a1:41:3f:69: + 21:5c:1e:19:02:a3:6c:91:d3:1b:4e:50:fc:a4:b1: + 03:87:c0:58:b1:fe:cd:58:5e:53:ed:c9:d6:5d:9e: + a3:fb:0d:e0:a0:8e:3d:c9:9e:9e:83:07:61:c7:30: + 5a:ca:29:93:04:af:5e:f3:57:2e:c2:d8:c8:ae:7f: + 5c:a4:27:fa:cd:55:a2:fd:89:d2:0b:87:24:6b:7b: + fb:19 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,35 +37,35 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 92:8b:93:94:03:04:91:3f:4d:8b:f3:90:53:ee:73:b5:33:c7: - 61:ea:0f:a5:59:9b:f0:0d:4f:7d:48:0d:5a:58:e7:1f:68:f6: - d6:58:75:33:a5:d2:b7:65:6a:28:40:bc:0e:1e:78:ee:9a:13: - 3c:b0:8b:8f:98:72:86:50:3a:a3:bf:6d:f0:21:95:a8:73:d0: - dd:e5:0e:25:b1:62:76:65:69:1f:ee:26:82:ab:be:a4:a8:30: - a7:41:34:07:57:2f:8b:ab:25:af:cb:23:a5:79:cf:b2:a2:17: - 02:a7:aa:50:92:6e:0d:9b:ff:c9:22:38:b4:0f:47:94:d2:80: - 7f:92:30:00:ec:5b:22:e2:a6:71:5e:e8:8f:0d:2f:38:2c:29: - 47:6a:7f:20:0a:e2:42:cb:b7:6e:2b:29:0f:03:55:94:84:5f: - e7:47:bf:ae:75:88:05:4e:42:ac:78:57:9d:9c:e2:77:d2:17: - 42:55:ba:f8:77:ee:61:d6:e8:ec:aa:e0:7a:a6:65:c6:35:80: - 08:3d:39:a6:70:8c:9e:6d:7a:ee:e7:cf:36:46:98:00:c8:7b: - b8:84:7f:9d:9f:bd:31:4f:99:25:6e:76:9a:5d:46:3e:40:70: - c6:a8:03:f3:98:9c:be:fb:f6:ad:c2:8d:e3:f9:7d:93:3a:78: - da:b3:d7:dc + 67:d4:6c:cf:cd:54:81:67:2a:c2:c4:66:c7:76:9c:b0:8b:6b: + ef:b8:ae:a9:b3:d6:f8:47:91:d5:97:0b:bd:1a:87:21:8c:ce: + be:0c:80:d5:a5:25:0d:0a:c7:ed:be:cb:8c:6d:08:e8:de:a5: + 33:89:e6:87:df:2b:f4:54:b3:c2:94:15:0d:36:5e:1a:aa:c0: + b0:03:3c:24:c6:a1:81:91:ca:fe:db:0f:59:1b:d6:4e:48:0b: + 52:d3:e7:07:d7:b1:ca:b2:22:e4:d4:37:a4:3c:87:3c:0a:11: + a6:10:2a:ed:86:2a:bb:db:10:7e:f3:a5:fc:10:ab:80:5b:07: + 58:7c:22:76:3e:9b:9c:72:79:0d:dc:85:f8:e7:c2:0f:17:aa: + 01:dd:8e:24:27:77:4e:23:03:da:88:e0:df:e6:ca:b4:84:56: + a1:dc:9f:e0:93:94:97:d2:98:cd:32:6d:73:84:f9:3e:4c:96: + b3:51:07:b8:9f:66:32:d1:ac:53:0e:17:a9:6f:29:d1:7b:73: + b3:55:9b:cc:8f:8b:e5:49:fd:fd:f2:30:d6:d0:f7:03:06:12: + e3:66:2d:0d:a1:da:28:04:04:29:b8:40:6e:0e:6f:31:48:cb: + 54:f7:e2:89:22:d8:05:e0:f5:7e:48:b3:96:ff:6b:ef:e7:fe: + 71:1d:0b:77 -----BEGIN CERTIFICATE----- MIICwjCCAaqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS -b290IENBMB4XDTE2MTAwNDE4NTMyNFoXDTI2MTAwMjE4NTMyNFowDzENMAsGA1UE -AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJ+o/3B13jN -V6xnVDdp+3JvHY/QRw8RFKtC2D1qNCvWOAffFh3GYuvXEuGGg/Ldj5cJlI8b/zuE -m0jlDUNrrrt1iBzGOn/YEtl8Ehht4vCI1D5ak7OvwXmhtqP3VkYh5n1uNuq6S1L3 -qUULgwksCSKKZ1qPiGCwEQclm8JqPGNMDmlFzp26ydQB+3hWOAiP5db/rOQE+ibP -0gUzV6OOgMC2QNXTyoUXMLIk9BmvxUik7cBJwaS3iSm65S03eBzWPpsD+rx74nam -cPMbnbJL/HJ7d4lQu4gvtbaixzMnt9EafNRY416IyvhJw83MD5NLPP11w3tvv9Pb -ui4xe6elQsUCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAJKLk5QDBJE/TYvzkFPuc7Uzx2HqD6VZm/AN -T31IDVpY5x9o9tZYdTOl0rdlaihAvA4eeO6aEzywi4+YcoZQOqO/bfAhlahz0N3l -DiWxYnZlaR/uJoKrvqSoMKdBNAdXL4urJa/LI6V5z7KiFwKnqlCSbg2b/8kiOLQP -R5TSgH+SMADsWyLipnFe6I8NLzgsKUdqfyAK4kLLt24rKQ8DVZSEX+dHv651iAVO -Qqx4V52c4nfSF0JVuvh37mHW6Oyq4HqmZcY1gAg9OaZwjJ5teu7nzzZGmADIe7iE -f52fvTFPmSVudppdRj5AcMaoA/OYnL779q3CjeP5fZM6eNqz19w= +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM5w1qO//Id +zCaRXRWeyuD7z5lfEz3GN1mLzsx2DhyftklbCZdjneEAdET7L1Pz1QOSd5dTdH7S +2tOj9MGRaoP/if5zRlbKbVENVxY9Puj8ANlKen2ThAYSxf8xs6brlhhxuFZcL6t4 +4lPdFdhlyPaWFNwVzyo57eEIG4Qpxxx4Z8jgclhOM3/L73GC20UdfAzQ9UyvhWsU +YVCHNEL+RaM8o1NXHawRyM8vXst4hzmhQT9pIVweGQKjbJHTG05Q/KSxA4fAWLH+ +zVheU+3J1l2eo/sN4KCOPcmenoMHYccwWsopkwSvXvNXLsLYyK5/XKQn+s1Vov2J +0guHJGt7+xkCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAGfUbM/NVIFnKsLEZsd2nLCLa++4rqmz1vhH +kdWXC70ahyGMzr4MgNWlJQ0Kx+2+y4xtCOjepTOJ5offK/RUs8KUFQ02XhqqwLAD +PCTGoYGRyv7bD1kb1k5IC1LT5wfXscqyIuTUN6Q8hzwKEaYQKu2GKrvbEH7zpfwQ +q4BbB1h8InY+m5xyeQ3chfjnwg8XqgHdjiQnd04jA9qI4N/myrSEVqHcn+CTlJfS +mM0ybXOE+T5MlrNRB7ifZjLRrFMOF6lvKdF7c7NVm8yPi+VJ/f3yMNbQ9wMGEuNm +LQ2h2igEBCm4QG4ObzFIy1T34oki2AXg9X5Is5b/a+/n/nEdC3c= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_4.key b/net/data/ssl/certificates/client_4.key index b1e7e0f..43175e9 100644 --- a/net/data/ssl/certificates/client_4.key +++ b/net/data/ssl/certificates/client_4.key
@@ -1,5 +1,5 @@ -----BEGIN EC PRIVATE KEY----- -MHcCAQEEILP75xbRvuB3x6CmLmO6dnAz4SzWM52MjX/ENrMfZWSEoAoGCCqGSM49 -AwEHoUQDQgAEeS7h2cVpnREfhVilcTyRzlg4kE1IhGT3MUl1BkvR5e1EgvkLapKA -8lLte3NLOoH/gPKnhLDPmN5N2uTCEZhpzw== +MHcCAQEEIMivPU8D2DOgGS1XWJ0SHOybwHGLYceOy0di/O3NTyfooAoGCCqGSM49 +AwEHoUQDQgAEicT32YPEOZz49vy8i2ZucO1QMh1i5zJMBmKPOCgzY1l9FmLhv61t +3zRtxNZRllR1HFiAOIOIVcadhrfDZqF5Zw== -----END EC PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_4.pem b/net/data/ssl/certificates/client_4.pem index 3eeca24..914b453 100644 --- a/net/data/ssl/certificates/client_4.pem +++ b/net/data/ssl/certificates/client_4.pem
@@ -5,18 +5,18 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=E CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=Client Cert G Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: - 04:79:2e:e1:d9:c5:69:9d:11:1f:85:58:a5:71:3c: - 91:ce:58:38:90:4d:48:84:64:f7:31:49:75:06:4b: - d1:e5:ed:44:82:f9:0b:6a:92:80:f2:52:ed:7b:73: - 4b:3a:81:ff:80:f2:a7:84:b0:cf:98:de:4d:da:e4: - c2:11:98:69:cf + 04:89:c4:f7:d9:83:c4:39:9c:f8:f6:fc:bc:8b:66: + 6e:70:ed:50:32:1d:62:e7:32:4c:06:62:8f:38:28: + 33:63:59:7d:16:62:e1:bf:ad:6d:df:34:6d:c4:d6: + 51:96:54:75:1c:58:80:38:83:88:55:c6:9d:86:b7: + c3:66:a1:79:67 ASN1 OID: prime256v1 X509v3 extensions: X509v3 Basic Constraints: critical @@ -24,31 +24,31 @@ X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 70:44:30:40:b7:d6:5b:09:e6:81:a1:a7:80:cd:bc:12:5d:e1: - 45:7d:fb:04:5f:5f:21:b9:e5:a9:e0:79:52:5a:50:21:11:bb: - 8c:25:08:e1:6d:19:e3:ba:e7:69:74:db:a6:b2:41:a4:f5:39: - 63:18:e6:bc:ce:db:d8:3f:17:e1:90:9f:62:3a:d3:52:f4:c4: - 01:4d:db:ad:16:ad:8b:31:51:fe:82:68:fd:34:c4:58:dc:4d: - 6b:72:74:30:98:a6:03:4b:21:dd:54:1b:ed:e0:a5:3f:a9:5e: - 1d:e6:57:3f:13:f4:e0:dc:d0:bf:90:68:dc:e1:e7:b5:81:b4: - f8:d5:45:96:95:b9:cd:83:15:c8:32:a6:20:2c:fc:b5:05:42: - 1a:7e:26:4c:a1:9a:8b:26:2b:1b:72:c7:a5:38:f3:57:4c:b4: - 7f:8e:dc:d9:52:0a:52:ac:e5:d9:18:0b:ae:91:b9:c5:e0:13: - cb:15:8d:19:3b:e9:60:1b:6b:31:0a:c7:22:4a:5a:ed:49:cf: - 72:e1:dd:93:1e:43:a8:e0:3e:02:b6:06:ee:b9:a9:d3:d9:88: - 2d:81:f6:96:cb:13:07:a8:51:81:89:8c:6b:28:d3:0c:22:8f: - e9:d7:92:1d:5a:2a:d6:c0:55:6b:86:2b:a7:f9:9e:35:88:5d: - bb:42:eb:b8 + 43:3c:6f:e4:e7:89:a9:fe:f8:d0:d6:a0:13:94:1b:a1:98:22: + 26:0d:e1:3b:a1:91:41:f1:5e:88:38:cb:7d:f0:55:8c:c3:df: + a3:99:31:71:0c:d0:1f:23:86:89:d7:ca:9f:f0:c6:bc:d2:b8: + 0b:4e:bc:bf:63:93:4e:c4:71:65:97:c0:f2:ea:35:34:9c:d5: + b5:8e:15:2e:bb:0b:63:ab:f6:fd:5d:2d:22:f7:00:e6:5a:88: + 01:6f:f8:ef:8a:be:68:1d:95:b5:c9:b2:47:be:cd:98:bd:5a: + ae:a2:b9:a3:53:bc:9e:87:de:40:a6:17:b5:7c:bd:4d:35:f5: + 29:72:22:a7:ee:2a:bc:4c:e2:b0:a6:98:47:1d:93:01:f8:53: + ee:af:e3:3a:1f:a2:e0:36:eb:67:28:7a:39:b8:89:95:44:57: + 08:bb:20:8d:0b:27:36:15:ce:48:11:ae:32:07:ef:44:12:e5: + 97:2e:92:56:c4:d6:93:0f:41:25:38:e5:52:0e:c3:f3:cc:9d: + de:b0:1d:4e:e3:51:79:63:0f:4c:58:ea:7c:e7:7a:ac:a8:f3: + c4:45:16:34:77:ba:6b:a7:49:9c:aa:62:d1:dd:81:6b:55:08: + 38:39:11:23:a0:ec:50:ff:58:ca:22:d3:29:c8:2e:bc:35:62: + 9b:cd:56:fb -----BEGIN CERTIFICATE----- MIICBjCB76ADAgECAgIQBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARFIENB -MB4XDTE2MTAwNDE4NTMyNFoXDTI2MTAwMjE4NTMyNFowGDEWMBQGA1UEAwwNQ2xp -ZW50IENlcnQgRzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHku4dnFaZ0RH4VY -pXE8kc5YOJBNSIRk9zFJdQZL0eXtRIL5C2qSgPJS7XtzSzqB/4Dyp4Swz5jeTdrk -whGYac+jLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG -AQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQBwRDBAt9ZbCeaBoaeAzbwSXeFFffsE -X18hueWp4HlSWlAhEbuMJQjhbRnjuudpdNumskGk9TljGOa8ztvYPxfhkJ9iOtNS -9MQBTdutFq2LMVH+gmj9NMRY3E1rcnQwmKYDSyHdVBvt4KU/qV4d5lc/E/Tg3NC/ -kGjc4ee1gbT41UWWlbnNgxXIMqYgLPy1BUIafiZMoZqLJisbcselOPNXTLR/jtzZ -UgpSrOXZGAuukbnF4BPLFY0ZO+lgG2sxCsciSlrtSc9y4d2THkOo4D4CtgbuuanT -2YgtgfaWyxMHqFGBiYxrKNMMIo/p15IdWirWwFVrhiun+Z41iF27Quu4 +MB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owGDEWMBQGA1UEAwwNQ2xp +ZW50IENlcnQgRzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABInE99mDxDmc+Pb8 +vItmbnDtUDIdYucyTAZijzgoM2NZfRZi4b+tbd80bcTWUZZUdRxYgDiDiFXGnYa3 +w2aheWejLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQBDPG/k54mp/vjQ1qATlBuhmCImDeE7 +oZFB8V6IOMt98FWMw9+jmTFxDNAfI4aJ18qf8Ma80rgLTry/Y5NOxHFll8Dy6jU0 +nNW1jhUuuwtjq/b9XS0i9wDmWogBb/jvir5oHZW1ybJHvs2YvVquormjU7yeh95A +phe1fL1NNfUpciKn7iq8TOKwpphHHZMB+FPur+M6H6LgNutnKHo5uImVRFcIuyCN +Cyc2Fc5IEa4yB+9EEuWXLpJWxNaTD0ElOOVSDsPzzJ3esB1O41F5Yw9MWOp853qs +qPPERRY0d7prp0mcqmLR3YFrVQg4OREjoOxQ/1jKItMpyC68NWKbzVb7 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_4.pk8 b/net/data/ssl/certificates/client_4.pk8 index 20ea5cfd..5f5f1580 100644 --- a/net/data/ssl/certificates/client_4.pk8 +++ b/net/data/ssl/certificates/client_4.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_4_ca.pem b/net/data/ssl/certificates/client_4_ca.pem index dd58ffa7..7808096 100644 --- a/net/data/ssl/certificates/client_4_ca.pem +++ b/net/data/ssl/certificates/client_4_ca.pem
@@ -5,31 +5,31 @@ Signature Algorithm: sha256WithRSAEncryption Issuer: CN=C Root CA Validity - Not Before: Oct 4 18:53:24 2016 GMT - Not After : Oct 2 18:53:24 2026 GMT + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT Subject: CN=E CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:a2:7e:a3:fd:c1:d7:78:cd:57:ac:67:54:37:69: - fb:72:6f:1d:8f:d0:47:0f:11:14:ab:42:d8:3d:6a: - 34:2b:d6:38:07:df:16:1d:c6:62:eb:d7:12:e1:86: - 83:f2:dd:8f:97:09:94:8f:1b:ff:3b:84:9b:48:e5: - 0d:43:6b:ae:bb:75:88:1c:c6:3a:7f:d8:12:d9:7c: - 12:18:6d:e2:f0:88:d4:3e:5a:93:b3:af:c1:79:a1: - b6:a3:f7:56:46:21:e6:7d:6e:36:ea:ba:4b:52:f7: - a9:45:0b:83:09:2c:09:22:8a:67:5a:8f:88:60:b0: - 11:07:25:9b:c2:6a:3c:63:4c:0e:69:45:ce:9d:ba: - c9:d4:01:fb:78:56:38:08:8f:e5:d6:ff:ac:e4:04: - fa:26:cf:d2:05:33:57:a3:8e:80:c0:b6:40:d5:d3: - ca:85:17:30:b2:24:f4:19:af:c5:48:a4:ed:c0:49: - c1:a4:b7:89:29:ba:e5:2d:37:78:1c:d6:3e:9b:03: - fa:bc:7b:e2:76:a6:70:f3:1b:9d:b2:4b:fc:72:7b: - 77:89:50:bb:88:2f:b5:b6:a2:c7:33:27:b7:d1:1a: - 7c:d4:58:e3:5e:88:ca:f8:49:c3:cd:cc:0f:93:4b: - 3c:fd:75:c3:7b:6f:bf:d3:db:ba:2e:31:7b:a7:a5: - 42:c5 + 00:c3:39:c3:5a:8e:ff:f2:1d:cc:26:91:5d:15:9e: + ca:e0:fb:cf:99:5f:13:3d:c6:37:59:8b:ce:cc:76: + 0e:1c:9f:b6:49:5b:09:97:63:9d:e1:00:74:44:fb: + 2f:53:f3:d5:03:92:77:97:53:74:7e:d2:da:d3:a3: + f4:c1:91:6a:83:ff:89:fe:73:46:56:ca:6d:51:0d: + 57:16:3d:3e:e8:fc:00:d9:4a:7a:7d:93:84:06:12: + c5:ff:31:b3:a6:eb:96:18:71:b8:56:5c:2f:ab:78: + e2:53:dd:15:d8:65:c8:f6:96:14:dc:15:cf:2a:39: + ed:e1:08:1b:84:29:c7:1c:78:67:c8:e0:72:58:4e: + 33:7f:cb:ef:71:82:db:45:1d:7c:0c:d0:f5:4c:af: + 85:6b:14:61:50:87:34:42:fe:45:a3:3c:a3:53:57: + 1d:ac:11:c8:cf:2f:5e:cb:78:87:39:a1:41:3f:69: + 21:5c:1e:19:02:a3:6c:91:d3:1b:4e:50:fc:a4:b1: + 03:87:c0:58:b1:fe:cd:58:5e:53:ed:c9:d6:5d:9e: + a3:fb:0d:e0:a0:8e:3d:c9:9e:9e:83:07:61:c7:30: + 5a:ca:29:93:04:af:5e:f3:57:2e:c2:d8:c8:ae:7f: + 5c:a4:27:fa:cd:55:a2:fd:89:d2:0b:87:24:6b:7b: + fb:19 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,35 +37,35 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 92:8b:93:94:03:04:91:3f:4d:8b:f3:90:53:ee:73:b5:33:c7: - 61:ea:0f:a5:59:9b:f0:0d:4f:7d:48:0d:5a:58:e7:1f:68:f6: - d6:58:75:33:a5:d2:b7:65:6a:28:40:bc:0e:1e:78:ee:9a:13: - 3c:b0:8b:8f:98:72:86:50:3a:a3:bf:6d:f0:21:95:a8:73:d0: - dd:e5:0e:25:b1:62:76:65:69:1f:ee:26:82:ab:be:a4:a8:30: - a7:41:34:07:57:2f:8b:ab:25:af:cb:23:a5:79:cf:b2:a2:17: - 02:a7:aa:50:92:6e:0d:9b:ff:c9:22:38:b4:0f:47:94:d2:80: - 7f:92:30:00:ec:5b:22:e2:a6:71:5e:e8:8f:0d:2f:38:2c:29: - 47:6a:7f:20:0a:e2:42:cb:b7:6e:2b:29:0f:03:55:94:84:5f: - e7:47:bf:ae:75:88:05:4e:42:ac:78:57:9d:9c:e2:77:d2:17: - 42:55:ba:f8:77:ee:61:d6:e8:ec:aa:e0:7a:a6:65:c6:35:80: - 08:3d:39:a6:70:8c:9e:6d:7a:ee:e7:cf:36:46:98:00:c8:7b: - b8:84:7f:9d:9f:bd:31:4f:99:25:6e:76:9a:5d:46:3e:40:70: - c6:a8:03:f3:98:9c:be:fb:f6:ad:c2:8d:e3:f9:7d:93:3a:78: - da:b3:d7:dc + 67:d4:6c:cf:cd:54:81:67:2a:c2:c4:66:c7:76:9c:b0:8b:6b: + ef:b8:ae:a9:b3:d6:f8:47:91:d5:97:0b:bd:1a:87:21:8c:ce: + be:0c:80:d5:a5:25:0d:0a:c7:ed:be:cb:8c:6d:08:e8:de:a5: + 33:89:e6:87:df:2b:f4:54:b3:c2:94:15:0d:36:5e:1a:aa:c0: + b0:03:3c:24:c6:a1:81:91:ca:fe:db:0f:59:1b:d6:4e:48:0b: + 52:d3:e7:07:d7:b1:ca:b2:22:e4:d4:37:a4:3c:87:3c:0a:11: + a6:10:2a:ed:86:2a:bb:db:10:7e:f3:a5:fc:10:ab:80:5b:07: + 58:7c:22:76:3e:9b:9c:72:79:0d:dc:85:f8:e7:c2:0f:17:aa: + 01:dd:8e:24:27:77:4e:23:03:da:88:e0:df:e6:ca:b4:84:56: + a1:dc:9f:e0:93:94:97:d2:98:cd:32:6d:73:84:f9:3e:4c:96: + b3:51:07:b8:9f:66:32:d1:ac:53:0e:17:a9:6f:29:d1:7b:73: + b3:55:9b:cc:8f:8b:e5:49:fd:fd:f2:30:d6:d0:f7:03:06:12: + e3:66:2d:0d:a1:da:28:04:04:29:b8:40:6e:0e:6f:31:48:cb: + 54:f7:e2:89:22:d8:05:e0:f5:7e:48:b3:96:ff:6b:ef:e7:fe: + 71:1d:0b:77 -----BEGIN CERTIFICATE----- MIICwjCCAaqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS -b290IENBMB4XDTE2MTAwNDE4NTMyNFoXDTI2MTAwMjE4NTMyNFowDzENMAsGA1UE -AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJ+o/3B13jN -V6xnVDdp+3JvHY/QRw8RFKtC2D1qNCvWOAffFh3GYuvXEuGGg/Ldj5cJlI8b/zuE -m0jlDUNrrrt1iBzGOn/YEtl8Ehht4vCI1D5ak7OvwXmhtqP3VkYh5n1uNuq6S1L3 -qUULgwksCSKKZ1qPiGCwEQclm8JqPGNMDmlFzp26ydQB+3hWOAiP5db/rOQE+ibP -0gUzV6OOgMC2QNXTyoUXMLIk9BmvxUik7cBJwaS3iSm65S03eBzWPpsD+rx74nam -cPMbnbJL/HJ7d4lQu4gvtbaixzMnt9EafNRY416IyvhJw83MD5NLPP11w3tvv9Pb -ui4xe6elQsUCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAJKLk5QDBJE/TYvzkFPuc7Uzx2HqD6VZm/AN -T31IDVpY5x9o9tZYdTOl0rdlaihAvA4eeO6aEzywi4+YcoZQOqO/bfAhlahz0N3l -DiWxYnZlaR/uJoKrvqSoMKdBNAdXL4urJa/LI6V5z7KiFwKnqlCSbg2b/8kiOLQP -R5TSgH+SMADsWyLipnFe6I8NLzgsKUdqfyAK4kLLt24rKQ8DVZSEX+dHv651iAVO -Qqx4V52c4nfSF0JVuvh37mHW6Oyq4HqmZcY1gAg9OaZwjJ5teu7nzzZGmADIe7iE -f52fvTFPmSVudppdRj5AcMaoA/OYnL779q3CjeP5fZM6eNqz19w= +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM5w1qO//Id +zCaRXRWeyuD7z5lfEz3GN1mLzsx2DhyftklbCZdjneEAdET7L1Pz1QOSd5dTdH7S +2tOj9MGRaoP/if5zRlbKbVENVxY9Puj8ANlKen2ThAYSxf8xs6brlhhxuFZcL6t4 +4lPdFdhlyPaWFNwVzyo57eEIG4Qpxxx4Z8jgclhOM3/L73GC20UdfAzQ9UyvhWsU +YVCHNEL+RaM8o1NXHawRyM8vXst4hzmhQT9pIVweGQKjbJHTG05Q/KSxA4fAWLH+ +zVheU+3J1l2eo/sN4KCOPcmenoMHYccwWsopkwSvXvNXLsLYyK5/XKQn+s1Vov2J +0guHJGt7+xkCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAGfUbM/NVIFnKsLEZsd2nLCLa++4rqmz1vhH +kdWXC70ahyGMzr4MgNWlJQ0Kx+2+y4xtCOjepTOJ5offK/RUs8KUFQ02XhqqwLAD +PCTGoYGRyv7bD1kb1k5IC1LT5wfXscqyIuTUN6Q8hzwKEaYQKu2GKrvbEH7zpfwQ +q4BbB1h8InY+m5xyeQ3chfjnwg8XqgHdjiQnd04jA9qI4N/myrSEVqHcn+CTlJfS +mM0ybXOE+T5MlrNRB7ifZjLRrFMOF6lvKdF7c7NVm8yPi+VJ/f3yMNbQ9wMGEuNm +LQ2h2igEBCm4QG4ObzFIy1T34oki2AXg9X5Is5b/a+/n/nEdC3c= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_5.key b/net/data/ssl/certificates/client_5.key new file mode 100644 index 0000000..ab74e24 --- /dev/null +++ b/net/data/ssl/certificates/client_5.key
@@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDDIPJAB+fFVxe/nIqgAGt9Pff2OF9Ts6WOBW3RZbf5o3SZiuS1fhUh1 +ppZfdaRmjEygBwYFK4EEACKhZANiAARMBdRlPc2YnctgdjXBkdxS79SBGI4WBsRz +jiYMjMkPGDVdN/kID0Gi5hkwXTZ6yhRmbqf7NdNsC5f2nH74BTfoqn//Aj0SroiI +OalVGt2S2NW6ea690MvYnA/AM2B3L/Y= +-----END EC PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_5.pem b/net/data/ssl/certificates/client_5.pem new file mode 100644 index 0000000..e984048 --- /dev/null +++ b/net/data/ssl/certificates/client_5.pem
@@ -0,0 +1,57 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4101 (0x1005) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=E CA + Validity + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT + Subject: CN=Client Cert H + Subject Public Key Info: + Public Key Algorithm: id-ecPublicKey + Public-Key: (384 bit) + pub: + 04:4c:05:d4:65:3d:cd:98:9d:cb:60:76:35:c1:91: + dc:52:ef:d4:81:18:8e:16:06:c4:73:8e:26:0c:8c: + c9:0f:18:35:5d:37:f9:08:0f:41:a2:e6:19:30:5d: + 36:7a:ca:14:66:6e:a7:fb:35:d3:6c:0b:97:f6:9c: + 7e:f8:05:37:e8:aa:7f:ff:02:3d:12:ae:88:88:39: + a9:55:1a:dd:92:d8:d5:ba:79:ae:bd:d0:cb:d8:9c: + 0f:c0:33:60:77:2f:f6 + ASN1 OID: secp384r1 + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + Signature Algorithm: sha256WithRSAEncryption + b2:37:fc:b9:0c:90:27:fc:e3:3e:a7:6f:c6:94:95:2c:61:37: + 46:25:64:55:ae:61:fe:00:58:0e:64:5f:9a:5b:bc:3a:b7:52: + e1:42:9a:8a:05:c2:b6:1d:cc:d7:47:a8:88:d5:78:1f:74:08: + db:52:e1:00:3c:aa:7c:80:73:b1:91:f9:75:6e:d3:53:28:ef: + af:5a:b7:1d:3e:38:a8:b8:1b:48:ed:20:18:a8:4a:de:60:97: + bb:3f:b6:b8:cc:d5:5b:bf:1c:97:06:d1:9a:25:b8:85:1c:36: + 26:02:e0:78:47:e0:f5:07:a4:0a:6a:55:14:39:51:d6:f3:f2: + b9:d4:44:9d:78:c4:45:e5:39:6f:71:0e:bd:2a:7b:71:9e:c4: + 12:f2:52:f0:ed:6a:78:47:48:df:ea:a0:44:eb:ce:f6:5c:50: + 53:47:3d:a6:db:ca:ad:a7:62:d8:6d:06:56:9f:e2:1b:72:08: + b3:4a:cb:2d:e9:4a:62:9e:c1:7e:5e:bd:ce:08:2f:82:bd:2f: + 6e:8b:55:e2:43:01:e6:30:40:b7:67:3c:0d:96:e1:9a:33:bd: + b8:c2:88:03:f5:87:68:4d:6d:49:7f:8e:94:f3:6a:41:2f:31: + 19:b6:0d:33:61:24:41:33:16:d4:5b:ad:98:8e:05:f7:9c:a1: + 13:dd:5f:7d +-----BEGIN CERTIFICATE----- +MIICJDCCAQygAwIBAgICEAUwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwERSBD +QTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBgxFjAUBgNVBAMMDUNs +aWVudCBDZXJ0IEgwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARMBdRlPc2YnctgdjXB +kdxS79SBGI4WBsRzjiYMjMkPGDVdN/kID0Gi5hkwXTZ6yhRmbqf7NdNsC5f2nH74 +BTfoqn//Aj0SroiIOalVGt2S2NW6ea690MvYnA/AM2B3L/ajLzAtMAwGA1UdEwEB +/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEB +CwUAA4IBAQCyN/y5DJAn/OM+p2/GlJUsYTdGJWRVrmH+AFgOZF+aW7w6t1LhQpqK +BcK2HczXR6iI1XgfdAjbUuEAPKp8gHOxkfl1btNTKO+vWrcdPjiouBtI7SAYqEre +YJe7P7a4zNVbvxyXBtGaJbiFHDYmAuB4R+D1B6QKalUUOVHW8/K51ESdeMRF5Tlv +cQ69KntxnsQS8lLw7Wp4R0jf6qBE6872XFBTRz2m28qtp2LYbQZWn+IbcgizSsst +6UpinsF+Xr3OCC+CvS9ui1XiQwHmMEC3ZzwNluGaM724wogD9YdoTW1Jf46U82pB +LzEZtg0zYSRBMxbUW62YjgX3nKET3V99 +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_5.pk8 b/net/data/ssl/certificates/client_5.pk8 new file mode 100644 index 0000000..26da499 --- /dev/null +++ b/net/data/ssl/certificates/client_5.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_5_ca.pem b/net/data/ssl/certificates/client_5_ca.pem new file mode 100644 index 0000000..7808096 --- /dev/null +++ b/net/data/ssl/certificates/client_5_ca.pem
@@ -0,0 +1,71 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4098 (0x1002) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=C Root CA + Validity + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT + Subject: CN=E CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c3:39:c3:5a:8e:ff:f2:1d:cc:26:91:5d:15:9e: + ca:e0:fb:cf:99:5f:13:3d:c6:37:59:8b:ce:cc:76: + 0e:1c:9f:b6:49:5b:09:97:63:9d:e1:00:74:44:fb: + 2f:53:f3:d5:03:92:77:97:53:74:7e:d2:da:d3:a3: + f4:c1:91:6a:83:ff:89:fe:73:46:56:ca:6d:51:0d: + 57:16:3d:3e:e8:fc:00:d9:4a:7a:7d:93:84:06:12: + c5:ff:31:b3:a6:eb:96:18:71:b8:56:5c:2f:ab:78: + e2:53:dd:15:d8:65:c8:f6:96:14:dc:15:cf:2a:39: + ed:e1:08:1b:84:29:c7:1c:78:67:c8:e0:72:58:4e: + 33:7f:cb:ef:71:82:db:45:1d:7c:0c:d0:f5:4c:af: + 85:6b:14:61:50:87:34:42:fe:45:a3:3c:a3:53:57: + 1d:ac:11:c8:cf:2f:5e:cb:78:87:39:a1:41:3f:69: + 21:5c:1e:19:02:a3:6c:91:d3:1b:4e:50:fc:a4:b1: + 03:87:c0:58:b1:fe:cd:58:5e:53:ed:c9:d6:5d:9e: + a3:fb:0d:e0:a0:8e:3d:c9:9e:9e:83:07:61:c7:30: + 5a:ca:29:93:04:af:5e:f3:57:2e:c2:d8:c8:ae:7f: + 5c:a4:27:fa:cd:55:a2:fd:89:d2:0b:87:24:6b:7b: + fb:19 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 67:d4:6c:cf:cd:54:81:67:2a:c2:c4:66:c7:76:9c:b0:8b:6b: + ef:b8:ae:a9:b3:d6:f8:47:91:d5:97:0b:bd:1a:87:21:8c:ce: + be:0c:80:d5:a5:25:0d:0a:c7:ed:be:cb:8c:6d:08:e8:de:a5: + 33:89:e6:87:df:2b:f4:54:b3:c2:94:15:0d:36:5e:1a:aa:c0: + b0:03:3c:24:c6:a1:81:91:ca:fe:db:0f:59:1b:d6:4e:48:0b: + 52:d3:e7:07:d7:b1:ca:b2:22:e4:d4:37:a4:3c:87:3c:0a:11: + a6:10:2a:ed:86:2a:bb:db:10:7e:f3:a5:fc:10:ab:80:5b:07: + 58:7c:22:76:3e:9b:9c:72:79:0d:dc:85:f8:e7:c2:0f:17:aa: + 01:dd:8e:24:27:77:4e:23:03:da:88:e0:df:e6:ca:b4:84:56: + a1:dc:9f:e0:93:94:97:d2:98:cd:32:6d:73:84:f9:3e:4c:96: + b3:51:07:b8:9f:66:32:d1:ac:53:0e:17:a9:6f:29:d1:7b:73: + b3:55:9b:cc:8f:8b:e5:49:fd:fd:f2:30:d6:d0:f7:03:06:12: + e3:66:2d:0d:a1:da:28:04:04:29:b8:40:6e:0e:6f:31:48:cb: + 54:f7:e2:89:22:d8:05:e0:f5:7e:48:b3:96:ff:6b:ef:e7:fe: + 71:1d:0b:77 +-----BEGIN CERTIFICATE----- +MIICwjCCAaqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM5w1qO//Id +zCaRXRWeyuD7z5lfEz3GN1mLzsx2DhyftklbCZdjneEAdET7L1Pz1QOSd5dTdH7S +2tOj9MGRaoP/if5zRlbKbVENVxY9Puj8ANlKen2ThAYSxf8xs6brlhhxuFZcL6t4 +4lPdFdhlyPaWFNwVzyo57eEIG4Qpxxx4Z8jgclhOM3/L73GC20UdfAzQ9UyvhWsU +YVCHNEL+RaM8o1NXHawRyM8vXst4hzmhQT9pIVweGQKjbJHTG05Q/KSxA4fAWLH+ +zVheU+3J1l2eo/sN4KCOPcmenoMHYccwWsopkwSvXvNXLsLYyK5/XKQn+s1Vov2J +0guHJGt7+xkCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAGfUbM/NVIFnKsLEZsd2nLCLa++4rqmz1vhH +kdWXC70ahyGMzr4MgNWlJQ0Kx+2+y4xtCOjepTOJ5offK/RUs8KUFQ02XhqqwLAD +PCTGoYGRyv7bD1kb1k5IC1LT5wfXscqyIuTUN6Q8hzwKEaYQKu2GKrvbEH7zpfwQ +q4BbB1h8InY+m5xyeQ3chfjnwg8XqgHdjiQnd04jA9qI4N/myrSEVqHcn+CTlJfS +mM0ybXOE+T5MlrNRB7ifZjLRrFMOF6lvKdF7c7NVm8yPi+VJ/f3yMNbQ9wMGEuNm +LQ2h2igEBCm4QG4ObzFIy1T34oki2AXg9X5Is5b/a+/n/nEdC3c= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_6.key b/net/data/ssl/certificates/client_6.key new file mode 100644 index 0000000..289c2d7 --- /dev/null +++ b/net/data/ssl/certificates/client_6.key
@@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIBp33i9oT0DV1aUcOE8av0Nt6ZCvsoVPPP/4kpU6T6d7wgLNwLK3uG +vGCZX5AbdL1VvLA1rvfodqYug3pRnH0wSyigBwYFK4EEACOhgYkDgYYABACtf0oy +HoxXTu/joG5I2fTeeYe6ZCEKlz2D5cMckF4bIkjRpue12TMhzs7FYp0cg+My3bxO +A87t7os/vXJ3SZxGCwBFIQJc/vMSz7eOlaYHWXYY+vuD4Ab/j34lv1U+6LjtinWo +I2WAbq/rxzSku9/NnLtKATbz3YgnYyzCEsmxQHfiKg== +-----END EC PRIVATE KEY-----
diff --git a/net/data/ssl/certificates/client_6.pem b/net/data/ssl/certificates/client_6.pem new file mode 100644 index 0000000..f90a4ca8 --- /dev/null +++ b/net/data/ssl/certificates/client_6.pem
@@ -0,0 +1,60 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4102 (0x1006) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=E CA + Validity + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT + Subject: CN=Client Cert I + Subject Public Key Info: + Public Key Algorithm: id-ecPublicKey + Public-Key: (521 bit) + pub: + 04:00:ad:7f:4a:32:1e:8c:57:4e:ef:e3:a0:6e:48: + d9:f4:de:79:87:ba:64:21:0a:97:3d:83:e5:c3:1c: + 90:5e:1b:22:48:d1:a6:e7:b5:d9:33:21:ce:ce:c5: + 62:9d:1c:83:e3:32:dd:bc:4e:03:ce:ed:ee:8b:3f: + bd:72:77:49:9c:46:0b:00:45:21:02:5c:fe:f3:12: + cf:b7:8e:95:a6:07:59:76:18:fa:fb:83:e0:06:ff: + 8f:7e:25:bf:55:3e:e8:b8:ed:8a:75:a8:23:65:80: + 6e:af:eb:c7:34:a4:bb:df:cd:9c:bb:4a:01:36:f3: + dd:88:27:63:2c:c2:12:c9:b1:40:77:e2:2a + ASN1 OID: secp521r1 + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + Signature Algorithm: sha256WithRSAEncryption + 8d:7b:44:61:33:92:ef:73:17:b7:b1:95:d8:f3:87:02:36:1c: + f7:d1:00:0d:2b:59:88:80:31:93:0b:ef:e8:c0:19:c6:bb:89: + 26:3a:6e:47:90:0b:b2:99:d5:46:19:c4:cb:61:eb:51:6e:74: + f7:d0:87:4f:3b:08:fe:5a:48:a3:23:cc:b4:5d:a4:b6:0c:78: + f1:b2:f0:36:71:d7:c6:a7:e1:80:59:a6:67:b4:2a:ea:b5:1b: + 9f:a2:bb:4d:01:36:e3:58:ed:19:bd:e6:b4:8e:d7:3c:b7:cc: + 95:76:8b:e9:ec:78:c0:de:1b:09:04:d7:44:6c:2c:3c:c3:0e: + 39:dc:be:3b:eb:ec:7d:b5:b9:3e:e6:eb:c0:ef:15:af:ca:96: + 1d:f0:9e:ba:27:41:a2:7c:66:67:7d:37:65:0c:66:b7:aa:1b: + e8:88:55:f1:50:54:b9:36:e3:84:9c:27:a9:fa:8c:06:06:ce: + 02:63:85:a6:70:dd:fc:78:1f:26:1f:13:01:aa:8d:34:54:80: + 23:28:84:bf:90:a4:1a:61:e7:83:90:93:b7:0b:13:1d:c5:78: + 7b:74:eb:5d:18:f1:b2:dd:6c:23:10:bc:80:1c:14:38:e6:76: + d5:78:b9:3a:0a:57:38:bd:fe:45:b0:68:a3:8c:1e:ae:25:84: + 2f:dc:7a:b2 +-----BEGIN CERTIFICATE----- +MIICSjCCATKgAwIBAgICEAYwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwERSBD +QTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBgxFjAUBgNVBAMMDUNs +aWVudCBDZXJ0IEkwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABACtf0oyHoxXTu/j +oG5I2fTeeYe6ZCEKlz2D5cMckF4bIkjRpue12TMhzs7FYp0cg+My3bxOA87t7os/ +vXJ3SZxGCwBFIQJc/vMSz7eOlaYHWXYY+vuD4Ab/j34lv1U+6LjtinWoI2WAbq/r +xzSku9/NnLtKATbz3YgnYyzCEsmxQHfiKqMvMC0wDAYDVR0TAQH/BAIwADAdBgNV +HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI17 +RGEzku9zF7exldjzhwI2HPfRAA0rWYiAMZML7+jAGca7iSY6bkeQC7KZ1UYZxMth +61FudPfQh087CP5aSKMjzLRdpLYMePGy8DZx18an4YBZpme0Kuq1G5+iu00BNuNY +7Rm95rSO1zy3zJV2i+nseMDeGwkE10RsLDzDDjncvjvr7H21uT7m68DvFa/Klh3w +nronQaJ8Zmd9N2UMZreqG+iIVfFQVLk244ScJ6n6jAYGzgJjhaZw3fx4HyYfEwGq +jTRUgCMohL+QpBph54OQk7cLEx3FeHt0610Y8bLdbCMQvIAcFDjmdtV4uToKVzi9 +/kWwaKOMHq4lhC/cerI= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_6.pk8 b/net/data/ssl/certificates/client_6.pk8 new file mode 100644 index 0000000..62c42f4 --- /dev/null +++ b/net/data/ssl/certificates/client_6.pk8 Binary files differ
diff --git a/net/data/ssl/certificates/client_6_ca.pem b/net/data/ssl/certificates/client_6_ca.pem new file mode 100644 index 0000000..7808096 --- /dev/null +++ b/net/data/ssl/certificates/client_6_ca.pem
@@ -0,0 +1,71 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4098 (0x1002) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=C Root CA + Validity + Not Before: Dec 9 20:18:57 2016 GMT + Not After : Dec 7 20:18:57 2026 GMT + Subject: CN=E CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c3:39:c3:5a:8e:ff:f2:1d:cc:26:91:5d:15:9e: + ca:e0:fb:cf:99:5f:13:3d:c6:37:59:8b:ce:cc:76: + 0e:1c:9f:b6:49:5b:09:97:63:9d:e1:00:74:44:fb: + 2f:53:f3:d5:03:92:77:97:53:74:7e:d2:da:d3:a3: + f4:c1:91:6a:83:ff:89:fe:73:46:56:ca:6d:51:0d: + 57:16:3d:3e:e8:fc:00:d9:4a:7a:7d:93:84:06:12: + c5:ff:31:b3:a6:eb:96:18:71:b8:56:5c:2f:ab:78: + e2:53:dd:15:d8:65:c8:f6:96:14:dc:15:cf:2a:39: + ed:e1:08:1b:84:29:c7:1c:78:67:c8:e0:72:58:4e: + 33:7f:cb:ef:71:82:db:45:1d:7c:0c:d0:f5:4c:af: + 85:6b:14:61:50:87:34:42:fe:45:a3:3c:a3:53:57: + 1d:ac:11:c8:cf:2f:5e:cb:78:87:39:a1:41:3f:69: + 21:5c:1e:19:02:a3:6c:91:d3:1b:4e:50:fc:a4:b1: + 03:87:c0:58:b1:fe:cd:58:5e:53:ed:c9:d6:5d:9e: + a3:fb:0d:e0:a0:8e:3d:c9:9e:9e:83:07:61:c7:30: + 5a:ca:29:93:04:af:5e:f3:57:2e:c2:d8:c8:ae:7f: + 5c:a4:27:fa:cd:55:a2:fd:89:d2:0b:87:24:6b:7b: + fb:19 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 67:d4:6c:cf:cd:54:81:67:2a:c2:c4:66:c7:76:9c:b0:8b:6b: + ef:b8:ae:a9:b3:d6:f8:47:91:d5:97:0b:bd:1a:87:21:8c:ce: + be:0c:80:d5:a5:25:0d:0a:c7:ed:be:cb:8c:6d:08:e8:de:a5: + 33:89:e6:87:df:2b:f4:54:b3:c2:94:15:0d:36:5e:1a:aa:c0: + b0:03:3c:24:c6:a1:81:91:ca:fe:db:0f:59:1b:d6:4e:48:0b: + 52:d3:e7:07:d7:b1:ca:b2:22:e4:d4:37:a4:3c:87:3c:0a:11: + a6:10:2a:ed:86:2a:bb:db:10:7e:f3:a5:fc:10:ab:80:5b:07: + 58:7c:22:76:3e:9b:9c:72:79:0d:dc:85:f8:e7:c2:0f:17:aa: + 01:dd:8e:24:27:77:4e:23:03:da:88:e0:df:e6:ca:b4:84:56: + a1:dc:9f:e0:93:94:97:d2:98:cd:32:6d:73:84:f9:3e:4c:96: + b3:51:07:b8:9f:66:32:d1:ac:53:0e:17:a9:6f:29:d1:7b:73: + b3:55:9b:cc:8f:8b:e5:49:fd:fd:f2:30:d6:d0:f7:03:06:12: + e3:66:2d:0d:a1:da:28:04:04:29:b8:40:6e:0e:6f:31:48:cb: + 54:f7:e2:89:22:d8:05:e0:f5:7e:48:b3:96:ff:6b:ef:e7:fe: + 71:1d:0b:77 +-----BEGIN CERTIFICATE----- +MIICwjCCAaqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJQyBS +b290IENBMB4XDTE2MTIwOTIwMTg1N1oXDTI2MTIwNzIwMTg1N1owDzENMAsGA1UE +AwwERSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM5w1qO//Id +zCaRXRWeyuD7z5lfEz3GN1mLzsx2DhyftklbCZdjneEAdET7L1Pz1QOSd5dTdH7S +2tOj9MGRaoP/if5zRlbKbVENVxY9Puj8ANlKen2ThAYSxf8xs6brlhhxuFZcL6t4 +4lPdFdhlyPaWFNwVzyo57eEIG4Qpxxx4Z8jgclhOM3/L73GC20UdfAzQ9UyvhWsU +YVCHNEL+RaM8o1NXHawRyM8vXst4hzmhQT9pIVweGQKjbJHTG05Q/KSxA4fAWLH+ +zVheU+3J1l2eo/sN4KCOPcmenoMHYccwWsopkwSvXvNXLsLYyK5/XKQn+s1Vov2J +0guHJGt7+xkCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAGfUbM/NVIFnKsLEZsd2nLCLa++4rqmz1vhH +kdWXC70ahyGMzr4MgNWlJQ0Kx+2+y4xtCOjepTOJ5offK/RUs8KUFQ02XhqqwLAD +PCTGoYGRyv7bD1kb1k5IC1LT5wfXscqyIuTUN6Q8hzwKEaYQKu2GKrvbEH7zpfwQ +q4BbB1h8InY+m5xyeQ3chfjnwg8XqgHdjiQnd04jA9qI4N/myrSEVqHcn+CTlJfS +mM0ybXOE+T5MlrNRB7ifZjLRrFMOF6lvKdF7c7NVm8yPi+VJ/f3yMNbQ9wMGEuNm +LQ2h2igEBCm4QG4ObzFIy1T34oki2AXg9X5Is5b/a+/n/nEdC3c= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/client_root_ca.pem b/net/data/ssl/certificates/client_root_ca.pem index b4048103..cb41907 100644 --- a/net/data/ssl/certificates/client_root_ca.pem +++ b/net/data/ssl/certificates/client_root_ca.pem
@@ -1,18 +1,18 @@ -----BEGIN CERTIFICATE----- -MIICzjCCAbagAwIBAgIJAO+K/Ai3YiytMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV -BAMMCUMgUm9vdCBDQTAeFw0xNjEwMDQxODUzMjRaFw0yNjEwMDIxODUzMjRaMBQx +MIICzjCCAbagAwIBAgIJAOlWtiy6ZPwFMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV +BAMMCUMgUm9vdCBDQTAeFw0xNjEyMDkyMDE4NTdaFw0yNjEyMDcyMDE4NTdaMBQx EjAQBgNVBAMMCUMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALKU+gX11E3vQ6CHy5bNfePr5uiJMHX+P97/I8y8DCk117+0gGxlO4adwImE -dgA6jFmMcphJU+BPfi1eDwO2WHQVa31NALMy3CbEzv4qV1gqTAfNJdICKZk7S87E -GbZUBauHe8q443UwD3c+R49XTsGvUSoMjh3N7K0/kNeoLi4RLW6WOZvJh954Rj+I -EHmCibJENDfzdYWfQtLZJEYrzJv01ZdWcigvOR7qQqLdX6f2WTBaWpjgSnP5QzO/ -8gkX+rVRRUpbD/lMNdXqO9AoBcSG07tWMx1MDRnDG8SzrCQ4sScSbcPnHQDEbdDv -suCnGXzSerruQXCqVwcCHIEHRSMCAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAHL9wuInYSfItXwoO2jG -W08CPjcPMN1Q7yulKFtND6jU4cWB/m2xQmpMjhrahrF1hYwwiOXfwB+bxHOoekmK -Uf+WmsiFXUQ5q9IeBMnxrrKOqZ9X2S+WaTi9GosJ52IEX4JJT7w3JDEcNTh3h66g -FHB9cXao0EDx5fkEvSCKhcSy+tWjWzUB+GszG3ApCe0ZxbcehUSRSZTcLYvlNlXF -NMNvEH5C1BVzCQWAZlgT4gp4miEPCFTc4Vr90pgDzJ3eFWu4V0s6snyDOip0PD9A -N6wOvSix25wUYni46xGHFc9ZZn3x35HdhW9+IMAgJI14hMsoIHQwAgzqF4neRYvY -RT4= +ggEBAMA+ZigXbDXCxJ4JCLXzWo/3dzVU/lQgToMmzXMAN7YLkYrpMHSh0+YgrtOv +XA70wFaLPa6SYGqr9OU2FqTlob43GQU9uNmIOi/SNmz3WRudoJgqbYK0Gv4qRarR +wrNqpPWgQXxP3T/slF7UVV0JRFWcscXPIxVIOQ64qGTtMpzjYP21g0V8e6pz30U9 +/9iil7FdSVIpjKc2RN42QGi2URIe2hYOIgCMADO/m5eUMVVX3wJ+ka4X619uTFrg +BEexVhIMu5ZPwEXcyUBxebLzJqx+JTwe2P2/20UMGQBSqT9xsXcuW8Y3+5q7Vl0j +7F5u9pE2PAZiVuDLWE3TXFSwVd8CAwEAAaMjMCEwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAJE45oY5GAmSefzxBKI2 +mVfZj7TlUG/KQ1W7RrsoDeYb93PTA/S4XM56wQhT8vdz3imED83EZ1hoDFourhAV +hNVCSSHBJ/Bgtj3Yt6bUZdx0dSK5PbnvfTYAnRxzx0o8d4pRXb0G225BT3kYNIOK +E1M24xmnjP3OoeyqWzP7uyU7vxfA4oCloNgeMWMJ9zdfgRX8Qnj6XRHVuhMXdofn +7vB9dpsbJI5ozXaFYuXMKZ8g97M1vUzWTQsbUWc/L3YaO+UZOQXg1gLHhZmwn9MC +xZSldz7Z4QIDV+U03cJUKL5O4hQcMgrtug2d75vxMKVjETKkvqbzs56h62YmhEyw +3Gg= -----END CERTIFICATE-----
diff --git a/net/data/ssl/scripts/generate-client-certificates.sh b/net/data/ssl/scripts/generate-client-certificates.sh index e7c8c01..5e584b2 100755 --- a/net/data/ssl/scripts/generate-client-certificates.sh +++ b/net/data/ssl/scripts/generate-client-certificates.sh
@@ -14,6 +14,8 @@ # 2. D (end-entity) -> E -> C (self-signed root) # 3. F (end-entity) -> E -> C (self-signed root) # 4. G (end-entity, P-256) -> E -> C (self-signed root) +# 5. H (end-entity, P-384) -> E -> C (self-signed root) +# 6. I (end-entity, P-521) -> E -> C (self-signed root) # # In which the certificates all have distinct keypairs. The client # certificates share the same root, but are issued by different @@ -45,6 +47,8 @@ done try openssl ecparam -name prime256v1 -genkey -noout -out out/G.key +try openssl ecparam -name secp384r1 -genkey -noout -out out/H.key +try openssl ecparam -name secp521r1 -genkey -noout -out out/I.key echo Generate the C CSR COMMON_NAME="C Root CA" \ @@ -108,7 +112,7 @@ -config client-certs.cnf echo Generate the leaf certs -for id in A D F G +for id in A D F G H I do COMMON_NAME="Client Cert $id" \ ID=$id \ @@ -169,12 +173,36 @@ -out out/G.pem \ -config client-certs.cnf +echo E signs H +COMMON_NAME="E CA" \ + CA_DIR=out \ + ID=E \ + try openssl ca \ + -batch \ + -extensions user_cert \ + -in out/H.csr \ + -out out/H.pem \ + -config client-certs.cnf + +echo E signs I +COMMON_NAME="E CA" \ + CA_DIR=out \ + ID=E \ + try openssl ca \ + -batch \ + -extensions user_cert \ + -in out/I.csr \ + -out out/I.pem \ + -config client-certs.cnf + echo Package the client certs and private keys into PKCS12 files # This is done for easily importing all of the certs needed for clients. try /bin/sh -c "cat out/A.pem out/A.key out/B.pem out/C.pem > out/A-chain.pem" try /bin/sh -c "cat out/D.pem out/D.key out/E.pem out/C.pem > out/D-chain.pem" try /bin/sh -c "cat out/F.pem out/F.key out/E.pem out/C.pem > out/F-chain.pem" try /bin/sh -c "cat out/G.pem out/G.key out/E.pem out/C.pem > out/G-chain.pem" +try /bin/sh -c "cat out/H.pem out/H.key out/E.pem out/C.pem > out/H-chain.pem" +try /bin/sh -c "cat out/I.pem out/I.key out/E.pem out/C.pem > out/I-chain.pem" try openssl pkcs12 \ -in out/A-chain.pem \ @@ -200,6 +228,18 @@ -export \ -passout pass:chrome +try openssl pkcs12 \ + -in out/H-chain.pem \ + -out client_5.p12 \ + -export \ + -passout pass:chrome + +try openssl pkcs12 \ + -in out/I-chain.pem \ + -out client_6.p12 \ + -export \ + -passout pass:chrome + echo Package the client certs for unit tests try cp out/A.pem ../certificates/client_1.pem try cp out/A.key ../certificates/client_1.key @@ -221,4 +261,14 @@ try cp out/G.pk8 ../certificates/client_4.pk8 try cp out/E.pem ../certificates/client_4_ca.pem +try cp out/H.pem ../certificates/client_5.pem +try cp out/H.key ../certificates/client_5.key +try cp out/H.pk8 ../certificates/client_5.pk8 +try cp out/E.pem ../certificates/client_5_ca.pem + +try cp out/I.pem ../certificates/client_6.pem +try cp out/I.key ../certificates/client_6.key +try cp out/I.pk8 ../certificates/client_6.pk8 +try cp out/E.pem ../certificates/client_6_ca.pem + try cp out/C.pem ../certificates/client_root_ca.pem
diff --git a/net/docs/crash-course-in-net-internals.md b/net/docs/crash-course-in-net-internals.md index 008a5755..9187f85 100644 --- a/net/docs/crash-course-in-net-internals.md +++ b/net/docs/crash-course-in-net-internals.md
@@ -14,77 +14,138 @@ For this reason, it lacks knowledge of tabs, navigation, frames, resource types, etc. -The top level network stack object is the URLRequestContext. The Events View +The leftmost column presents a list of views. Most debugging is done with the +Events view, which will be all this document covers. + +The top level network stack object is the URLRequestContext. The Events view has information for all Chrome URLRequestContexts that are hooked up to the -single, global, ChromeNetLog object. This includes both incognito and non- -incognito profiles, among other things. The Events view only shows events for -the period that net-internals was open and running, and is incrementally updated -as events occur. The code attempts to add a top level event for URLRequests -that were active when the tab was opened, to help debug hung requests, but -that's best-effort only, and only includes requests for the current profile and -the system URLRequestContext. +single, global, ChromeNetLog object. This includes both incognito and +non-incognito profiles, among other things. The Events view only shows events +for the period that net-internals was open and running, and is incrementally +updated as events occur. The code attempts to add a top level event for +URLRequests that were active when the about:net-internals tab was opened, to +help debug hung requests, but that's best-effort only, and only includes +requests for the current profile and the system URLRequestContext. The other views are all snapshots of the current state of the main URLRequestContext's components, and are updated on a 5 second timer. These will -show objects that were created before about:net-internals was opened. Most -debugging is done with the Events view (which will be all this document -covers), but it's good to be aware of this distinction. +show objects that were created before about:net-internals was opened. # Events vs Sources -The Event View shows events logged by the NetLog. The NetLog model is that +The Events view shows events logged by the NetLog. The NetLog model is that long-lived network stack objects, called sources, emit events over their -lifetime. When looking at the code, a "NetLogWithSource" object contains a source -ID, and a pointer to the NetLog the source emits events to. Some events have a -beginning and end point (during which other subevents may occur), and some only -occur at a single point in time. Generally only one event can be occuring for a -source at a time. If there can be multiple events doing completely independent -thing, the code often uses new sources to represent the parallelism. +lifetime. A NetLogWithSource object contains a source ID, a NetLogSourceType, +and a pointer to the NetLog the source emits events to. + +The Events view has a list of sources in a column adjacent to the list of views. +Sources that include an event with a net_error parameter with negative value +(that is, some kind of ERR_) are shown with red background. Sources whose +opening event has not ended yet are shown with white background. Other events +have green background. The search queries corresponding to the first two kinds +are `is:error` and `is:active`. + +When one or more sources are selected, corresponding events show up in another +column to the right, sorted by source, and by time within each source. There +are two time values: t is measured from some reference point common to all +sources, and st is measured from the first event for each source. Time is +displayed in milliseconds. + +Since the network stack is asynchronous, events from different sources will +often be interlaced in time, but Events view does not feature showing events from +different sources ordered by time. Large time gaps in the event list of a +single source usually mean that time is spent in the context of another source. + +Some events come in pairs: a beginning and end event, between which other events +may occur. They are shown with + and - prefixes, respectively. The begin event +has a dt value which shows the duration. If the end event was captured, then +duration is calculated as the time difference between the begin and the end +events. Otherwise the time elapsed from the begin event until capturing +was stopped is displayed (a lower bound for actual duration), followed by a + +sign (for example, "dt=120+"). + +If there are no other events in between the begin and end, and the end event has +no parameters, then they are collapsed in a single line without a sign prefix. + +Some other events only occur at a single point in time, and will not have either +a sign prefix, or a dt duration value. + +Generally only one event can be occuring for a source at a time. If there can +be multiple events doing completely independent things, the code often uses new +sources to represent the parallelism. + +Most, but not all events correspond to a source. Exceptions are global events, +which have no source, and show up as individual entries in the source list. +Examples of global events include NETWORK_CHANGED, DNS_CONFIG_CHANGED, and +PROXY_CONFIG_CHANGED. + +# Common source types "Sources" correspond to certain net objects, however, multiple layers of net/ will often log to a single source. Here are the main source types and what they -include (Excluding HTTP2 [SPDY]/QUIC): +include (excluding HTTP2 [SPDY]/QUIC): * URL_REQUEST: This corresponds to the URLRequest object. It includes events from all the URLRequestJobs, HttpCache::Transactions, NetworkTransactions, HttpStreamFactoryImpl::Requests, HttpStream implementations, and HttpStreamParsers used to service a response. If the URL_REQUEST follows HTTP redirects, it will include each redirect. This is a lot of stuff, but generally -only object is doing work at a time. This event source includes the full URL -and generally includes the request / response headers (Except when the cache +only one object is doing work at a time. This event source includes the full +URL and generally includes the request / response headers (except when the cache handles the response). -* HTTP_STREAM_JOB: This corresponds to HttpStreamFactoryImpl::Job (Note that +* HTTP_STREAM_JOB: This corresponds to HttpStreamFactoryImpl::Job (note that one Request can have multiple Jobs). It also includes its proxy and DNS -lookups. HTTP_STREAM_JOB log events are separate from URL_REQUEST because -two stream jobs may be created and races against each other, in some cases - -one for one for QUIC, and one for HTTP. One of the final events of this source -indicates how an HttpStream was created (Reusing an existing SOCKET / -HTTP2_SESSION / QUIC_SESSION, or creating a new one). +lookups. HTTP_STREAM_JOB log events are separate from URL_REQUEST because two +stream jobs may be created and races against each other, in some cases -- one +for QUIC, and one for HTTP. + + One of the final events of this source, before the + HTTP_STREAM_JOB_BOUND_TO_REQUEST event, indicates how an HttpStream was + created: + + + A SOCKET_POOL_BOUND_TO_CONNECT_JOB event means that a new TCP socket was + created, whereas a SOCKET_POOL_REUSED_AN_EXISTING_SOCKET event indicates that + an existing TCP socket was reused for a non-HTTP/2 request. + + + An HTTP2_SESSION_POOL_IMPORTED_SESSION_FROM_SOCKET event indicates that a + new HTTP/2 session was opened by this Job. + + + An HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION event indicates that the request + was served on a preexisting HTTP/2 session. + + + An HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION_FROM_IP_POOL event means that + the request was pooled to a preexisting HTTP/2 session which had a different + SpdySessionKey, but DNS resolution resulted in the same IP, and the + certificate matches. + + + There are currently no events logged for opening new QUIC sessions or + reusing existing ones. * \*_CONNECT_JOB: This corresponds to the ConnectJob subclasses that each socket -pool uses. A successful CONNECT_JOB return a SOCKET. The events here vary a +pool uses. A successful CONNECT_JOB returns a SOCKET. The events here vary a lot by job type. Their main event is generally either to create a socket, or -request a socket from another socket pool (Which creates another CONNECT_JOB) -and then do some extra work on top of that - like establish an SSL connection on +request a socket from another socket pool (which creates another CONNECT_JOB) +and then do some extra work on top of that -- like establish an SSL connection on top of a TCP connection. * SOCKET: These correspond to TCPSockets, but may also have other classes -layered on top of them (Like an SSLClientSocket). This is a bit different from +layered on top of them (like an SSLClientSocket). This is a bit different from the other classes, where the name corresponds to the topmost class, instead of the bottommost one. This is largely an artifact of the fact the socket is -created first, and then SSL (Or a proxy connection) is layered on top of it. +created first, and then SSL (or a proxy connection) is layered on top of it. SOCKETs may be reused between multiple requests, and a request may end up getting a socket created for another request. -* HOST_RESOLVER_IMPL_JOB: These correspond to HostResolverImpl::Job. The +* HOST_RESOLVER_IMPL_JOB: These correspond to HostResolverImpl::Job. They include information about how long the lookup was queued, each DNS request that -was attempted (With the platform or built-in resolver) and all the other sources +was attempted (with the platform or built-in resolver) and all the other sources that are waiting on the job. -When one source depends on another, the code generally logs an event with -"source_dependency" value to both sources, which lets you jump between the two -related events. +When one source depends on another, the code generally logs an event at both +sources with a `source_dependency` value pointing to the other source. These +are clickable in the UI, adding the referred source to the list of selected +sources. # Debugging @@ -96,9 +157,9 @@ about the actual problem. There are two filters in net-internals that can help in a lot of cases: -* "type:URL_REQUEST is:error" will restrict the list to URL_REQUEST object with -an error of some sort (red background). Cache errors are often non-fatal, so -you should generally ignore those, and look for a more interesting one. +* "type:URL_REQUEST is:error" will restrict the source list to URL_REQUEST +objects with an error of some sort. Cache errors are often non-fatal, so you +should generally ignore those, and look for a more interesting one. * "type:URL_REQUEST sort:duration" will show the longest-lived requests first. This is often useful in finding hung or slow requests. @@ -107,14 +168,11 @@ about:net-internals. Once you locate the problematic request, the next is to figure out where the -problem is - it's often one of the last events, though it could also be related -to response or request headers. You can use "source_dependency" links to drill -down into other related sources, or up from layers below URL_REQUEST. - -You can use the name of an event to search for the code responsible for that -event, and try to deduce what went wrong before/after a particular event. Note -that the event names used in net-internals are not the entire string names, so -you should not do an entire string match. +problem is -- it's often one of the last events, though it could also be related +to response or request headers. You can use `source_dependency` links to +navigate between related sources. You can use the name of an event to search +for the code responsible for that event, and try to deduce what went wrong +before/after a particular event. Some things to look for while debugging: @@ -122,8 +180,7 @@ * Changing networks and entering / exiting suspend mode can have all sorts of fun and exciting effects on underway network activity. Network changes log a -top level NETWORK_CHANGED event with no source - the event itself is treated as -its own source. Suspend events are currently not logged. +top level NETWORK_CHANGED event. Suspend events are currently not logged. * URL_REQUEST_DELEGATE / DELEGATE_INFO events mean a URL_REQUEST is blocked on a URLRequest::Delegate or the NetworkDelegate, which are implemented outside the @@ -136,7 +193,8 @@ * Sockets are often reused between requests. If a request is on a stale (reused) socket, what was the previous request that used the socket, how long -ago was it made? +ago was it made? (Look at SOCKET_IN_USE events, and the HTTP_STREAM_JOBS they +point to via the `source_dependency` value.) * SSL negotation is a process fraught with peril, particularly with broken proxies. These will generally stall or fail in the SSL_CONNECT phase at the @@ -146,15 +204,15 @@ issued by the media and PDF code. * Late binding: HTTP_STREAM_JOBs are not associated with any CONNECT_JOB until -a CONNECT_JOB actually connects. This is so the highest priority pending job -gets the first available socket (Which may be a new socket, or an old one that's -freed up). For this reason, it can be a little tricky to relate hung -HTTP_STREAM_JOBs to CONNECT_JOBs. +a CONNECT_JOB actually connects. This is so the highest priority pending +HTTP_STREAM_JOB gets the first available socket (which may be a new socket, or +an old one that's freed up). For this reason, it can be a little tricky to +relate hung HTTP_STREAM_JOBs to CONNECT_JOBs. * Each CONNECT_JOB belongs to a "group", which has a limit of 6 connections. If -all CONNECT_JOBs beling to a group (The CONNECT_JOB's description field) are +all CONNECT_JOBs belonging to a group (the CONNECT_JOB's description field) are stalled waiting on an available socket, the group probably has 6 sockets that -that are hung - either hung trying to connect, or used by stalled requests and +that are hung -- either hung trying to connect, or used by stalled requests and thus outside the socket pool's control. * There's a limit on number of DNS resolutions that can be started at once. If
diff --git a/net/net.gypi b/net/net.gypi index 79e7e02..cb983a25 100644 --- a/net/net.gypi +++ b/net/net.gypi
@@ -2400,6 +2400,14 @@ 'data/ssl/certificates/client_4.pem', 'data/ssl/certificates/client_4.pk8', 'data/ssl/certificates/client_4_ca.pem', + 'data/ssl/certificates/client_5.key', + 'data/ssl/certificates/client_5.pem', + 'data/ssl/certificates/client_5.pk8', + 'data/ssl/certificates/client_5_ca.pem', + 'data/ssl/certificates/client_6.key', + 'data/ssl/certificates/client_6.pem', + 'data/ssl/certificates/client_6.pk8', + 'data/ssl/certificates/client_6_ca.pem', 'data/ssl/certificates/client_root_ca.pem', 'data/ssl/certificates/comodo.chain.pem', 'data/ssl/certificates/crit-codeSigning-chain.pem',
diff --git a/net/spdy/spdy_protocol.h b/net/spdy/spdy_protocol.h index f71d6b2c..bbd959a 100644 --- a/net/spdy/spdy_protocol.h +++ b/net/spdy/spdy_protocol.h
@@ -38,6 +38,9 @@ // flow control). const SpdyStreamId kSessionFlowControlStreamId = 0; +// Max stream id. +const SpdyStreamId kMaxStreamId = 0x7fffffff; + // The maximum possible frame payload size allowed by the spec. const uint32_t kSpdyMaxFrameSizeLimit = (1 << 24) - 1;
diff --git a/net/ssl/ssl_platform_key_android_unittest.cc b/net/ssl/ssl_platform_key_android_unittest.cc index 118de12..3fb6800 100644 --- a/net/ssl/ssl_platform_key_android_unittest.cc +++ b/net/ssl/ssl_platform_key_android_unittest.cc
@@ -35,14 +35,13 @@ typedef base::android::ScopedJavaLocalRef<jobject> ScopedJava; -// Resize a string to |size| bytes of data, then return its data buffer -// address cast as an 'unsigned char*', as expected by OpenSSL functions. +// Resize a string to |size| bytes of data, then return its data buffer address +// cast as an 'uint8_t*', as expected by OpenSSL functions. // |str| the target string. // |size| the number of bytes to write into the string. -// Return the string's new buffer in memory, as an 'unsigned char*' -// pointer. -unsigned char* OpenSSLWriteInto(std::string* str, size_t size) { - return reinterpret_cast<unsigned char*>(base::WriteInto(str, size + 1)); +// Return the string's new buffer in memory, as an 'uint8_t*' pointer. +uint8_t* OpenSSLWriteInto(std::string* str, size_t size) { + return reinterpret_cast<uint8_t*>(base::WriteInto(str, size + 1)); } bool ReadTestFile(const char* filename, std::string* pkcs8) { @@ -51,45 +50,12 @@ return base::ReadFileToString(file_path, pkcs8); } -// Load a given private key file into an EVP_PKEY. -// |filename| is the key file path. -// Returns a new EVP_PKEY on success, NULL on failure. -bssl::UniquePtr<EVP_PKEY> ImportPrivateKeyFile(const char* filename) { - std::string pkcs8; - if (!ReadTestFile(filename, &pkcs8)) - return nullptr; - +// Parses a PKCS#8 key into an OpenSSL private key object. +bssl::UniquePtr<EVP_PKEY> ImportPrivateKeyOpenSSL(const std::string& pkcs8) { crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); CBS cbs; CBS_init(&cbs, reinterpret_cast<const uint8_t*>(pkcs8.data()), pkcs8.size()); - bssl::UniquePtr<EVP_PKEY> pkey(EVP_parse_private_key(&cbs)); - if (!pkey) { - LOG(ERROR) << "Could not load private key file: " << filename; - return nullptr; - } - - return pkey; -} - -// Imports the public key from the specified test certificate. -bssl::UniquePtr<EVP_PKEY> ImportPublicKeyFromCertificateFile( - const char* filename) { - crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); - - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), filename); - if (!cert) { - LOG(ERROR) << "Could not open certificate file: " << filename; - return nullptr; - } - - bssl::UniquePtr<EVP_PKEY> pkey(X509_get_pubkey(cert->os_cert_handle())); - if (!pkey) { - LOG(ERROR) << "Could not load public key from certificate: " << filename; - return nullptr; - } - - return pkey; + return bssl::UniquePtr<EVP_PKEY>(EVP_parse_private_key(&cbs)); } // Retrieve a JNI local ref from encoded PKCS#8 data. @@ -107,140 +73,42 @@ return key; } -const char kTestRsaKeyFile[] = "client_1.pk8"; -const char kTestRsaCertificateFile[] = "client_1.pem"; - -// Retrieve a JNI local ref for our test RSA key. -ScopedJava GetRSATestKeyJava() { - std::string key; - if (!ReadTestFile(kTestRsaKeyFile, &key)) - return ScopedJava(); - return GetPKCS8PrivateKeyJava(android::PRIVATE_KEY_TYPE_RSA, key); -} - -const char kTestEcdsaKeyFile[] = "client_4.pk8"; -const char kTestEcdsaCertificateFile[] = "client_4.pem"; - -// Retrieve a JNI local ref for our test ECDSA key. -ScopedJava GetECDSATestKeyJava() { - std::string key; - if (!ReadTestFile(kTestEcdsaKeyFile, &key)) - return ScopedJava(); - return GetPKCS8PrivateKeyJava(android::PRIVATE_KEY_TYPE_ECDSA, key); -} - -// Call this function to verify that one message signed with our -// test ECDSA private key is correct. Since ECDSA signing introduces -// random elements in the signature, it is not possible to compare -// signature bits directly. However, one can use the public key -// to do the check. -bool VerifyTestECDSASignature(const base::StringPiece& message, - const base::StringPiece& signature) { +bool VerifyWithOpenSSL(const EVP_MD* md, + const base::StringPiece& digest, + EVP_PKEY* key, + const base::StringPiece& signature) { crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); - bssl::UniquePtr<EVP_PKEY> pkey = - ImportPublicKeyFromCertificateFile(kTestEcdsaCertificateFile); - if (!pkey) - return false; - - EC_KEY* pub_key = EVP_PKEY_get0_EC_KEY(pkey.get()); - if (!pub_key) { - LOG(ERROR) << "Could not get ECDSA public key"; + bssl::UniquePtr<EVP_PKEY_CTX> ctx(EVP_PKEY_CTX_new(key, nullptr)); + if (!ctx || !EVP_PKEY_verify_init(ctx.get()) || + !EVP_PKEY_CTX_set_signature_md(ctx.get(), md) || + !EVP_PKEY_verify( + ctx.get(), reinterpret_cast<const uint8_t*>(signature.data()), + signature.size(), reinterpret_cast<const uint8_t*>(digest.data()), + digest.size())) { return false; } - const unsigned char* digest = - reinterpret_cast<const unsigned char*>(message.data()); - int digest_len = static_cast<int>(message.size()); - const unsigned char* sigbuf = - reinterpret_cast<const unsigned char*>(signature.data()); - int siglen = static_cast<int>(signature.size()); - - if (!ECDSA_verify(0, digest, digest_len, sigbuf, siglen, pub_key)) { - LOG(ERROR) << "ECDSA_verify() failed"; - return false; - } return true; } -// Sign a message with OpenSSL, return the result as a string. -// |message| is the message to be signed. -// |openssl_key| is an OpenSSL EVP_PKEY to use. -// |result| receives the result. -// Returns true on success, false otherwise. -bool SignWithOpenSSL(int hash_nid, - const base::StringPiece& message, - EVP_PKEY* openssl_key, +bool SignWithOpenSSL(const EVP_MD* md, + const base::StringPiece& digest, + EVP_PKEY* key, std::string* result) { crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); - RSA* rsa = EVP_PKEY_get0_RSA(openssl_key); - if (!rsa) { - LOG(ERROR) << "Could not get RSA from EVP_PKEY"; + size_t sig_len; + bssl::UniquePtr<EVP_PKEY_CTX> ctx(EVP_PKEY_CTX_new(key, nullptr)); + if (!ctx || !EVP_PKEY_sign_init(ctx.get()) || + !EVP_PKEY_CTX_set_signature_md(ctx.get(), md) || + !EVP_PKEY_sign(ctx.get(), OpenSSLWriteInto(result, EVP_PKEY_size(key)), + &sig_len, reinterpret_cast<const uint8_t*>(digest.data()), + digest.size())) { return false; } - const unsigned char* digest = - reinterpret_cast<const unsigned char*>(message.data()); - unsigned int digest_len = static_cast<unsigned int>(message.size()); - - // With RSA, the signature will always be RSA_size() bytes. - size_t max_signature_size = static_cast<size_t>(RSA_size(rsa)); - std::string signature; - unsigned char* p = OpenSSLWriteInto(&signature, max_signature_size); - unsigned int p_len = 0; - if (!RSA_sign(hash_nid, digest, digest_len, p, &p_len, rsa)) { - LOG(ERROR) << "RSA_sign() failed"; - return false; - } - - size_t signature_size = static_cast<size_t>(p_len); - if (signature_size == 0) { - LOG(ERROR) << "Signature is empty!"; - return false; - } - if (signature_size > max_signature_size) { - LOG(ERROR) << "Signature size mismatch, actual " << signature_size - << ", expected <= " << max_signature_size; - return false; - } - signature.resize(signature_size); - result->swap(signature); - return true; -} - -// Check that a generated signature for a given message matches -// OpenSSL output byte-by-byte. -// |message| is the input message. -// |signature| is the generated signature for the message. -// |openssl_key| is a raw EVP_PKEY for the same private key than the -// one which was used to generate the signature. -// Returns true on success, false otherwise. -bool CompareSignatureWithOpenSSL(int hash_nid, - const base::StringPiece& message, - const base::StringPiece& signature, - EVP_PKEY* openssl_key) { - std::string openssl_signature; - if (!SignWithOpenSSL(hash_nid, message, openssl_key, &openssl_signature)) - return false; - - if (signature.size() != openssl_signature.size()) { - LOG(ERROR) << "Signature size mismatch, actual " << signature.size() - << ", expected " << openssl_signature.size(); - return false; - } - for (size_t n = 0; n < signature.size(); ++n) { - if (openssl_signature[n] != signature[n]) { - LOG(ERROR) << "Signature byte mismatch at index " << n << "actual " - << signature[n] << ", expected " << openssl_signature[n]; - LOG(ERROR) << "Actual signature : " - << base::HexEncode(signature.data(), signature.size()); - LOG(ERROR) << "Expected signature: " - << base::HexEncode(openssl_signature.data(), - openssl_signature.size()); - return false; - } - } + result->resize(sig_len); return true; } @@ -282,81 +150,84 @@ {"SHA-512", NID_sha512, SSLPrivateKey::Hash::SHA512}, }; +struct TestKey { + const char* cert_file; + const char* key_file; + android::PrivateKeyType android_key_type; + SSLPrivateKey::Type key_type; +}; + +static const TestKey kTestKeys[] = { + {"client_1.pem", "client_1.pk8", android::PRIVATE_KEY_TYPE_RSA, + SSLPrivateKey::Type::RSA}, + {"client_4.pem", "client_4.pk8", android::PRIVATE_KEY_TYPE_ECDSA, + SSLPrivateKey::Type::ECDSA_P256}, + {"client_5.pem", "client_5.pk8", android::PRIVATE_KEY_TYPE_ECDSA, + SSLPrivateKey::Type::ECDSA_P384}, + {"client_6.pem", "client_6.pk8", android::PRIVATE_KEY_TYPE_ECDSA, + SSLPrivateKey::Type::ECDSA_P521}, +}; + } // namespace -TEST(SSLPlatformKeyAndroid, RSA) { +class SSLPlatformKeyAndroidTest : public testing::TestWithParam<TestKey> {}; + +TEST_P(SSLPlatformKeyAndroidTest, SignHashes) { crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); + const TestKey& test_key = GetParam(); scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), kTestRsaCertificateFile); + ImportCertFromFile(GetTestCertsDirectory(), test_key.cert_file); ASSERT_TRUE(cert); - ScopedJava rsa_key = GetRSATestKeyJava(); - ASSERT_FALSE(rsa_key.is_null()); + + std::string key_bytes; + ASSERT_TRUE(ReadTestFile(test_key.key_file, &key_bytes)); + ScopedJava java_key = + GetPKCS8PrivateKeyJava(test_key.android_key_type, key_bytes); + ASSERT_FALSE(java_key.is_null()); scoped_refptr<SSLPrivateKey> wrapper_key = - WrapJavaPrivateKey(cert.get(), rsa_key); + WrapJavaPrivateKey(cert.get(), java_key); ASSERT_TRUE(wrapper_key); - bssl::UniquePtr<EVP_PKEY> openssl_key = ImportPrivateKeyFile(kTestRsaKeyFile); + bssl::UniquePtr<EVP_PKEY> openssl_key = ImportPrivateKeyOpenSSL(key_bytes); ASSERT_TRUE(openssl_key); // Check that the wrapper key returns the correct length and type. - EXPECT_EQ(SSLPrivateKey::Type::RSA, wrapper_key->GetType()); + EXPECT_EQ(test_key.key_type, wrapper_key->GetType()); EXPECT_EQ(static_cast<size_t>(EVP_PKEY_size(openssl_key.get())), wrapper_key->GetMaxSignatureLengthInBytes()); // Test signing against each hash. for (const auto& hash : kHashes) { - SCOPED_TRACE(hash.name); - - const EVP_MD* md = EVP_get_digestbynid(hash.nid); - ASSERT_TRUE(md); - std::string digest(EVP_MD_size(md), 'a'); - - std::string signature; - DoKeySigningWithWrapper(wrapper_key.get(), hash.hash, digest, &signature); - ASSERT_TRUE(CompareSignatureWithOpenSSL(hash.nid, digest, signature, - openssl_key.get())); - } -} - -TEST(SSLPlatformKeyAndroid, ECDSA) { - crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); - - scoped_refptr<X509Certificate> cert = - ImportCertFromFile(GetTestCertsDirectory(), kTestEcdsaCertificateFile); - ASSERT_TRUE(cert); - ScopedJava ecdsa_key = GetECDSATestKeyJava(); - ASSERT_FALSE(ecdsa_key.is_null()); - - scoped_refptr<SSLPrivateKey> wrapper_key = - WrapJavaPrivateKey(cert.get(), ecdsa_key); - ASSERT_TRUE(wrapper_key); - - bssl::UniquePtr<EVP_PKEY> openssl_key = - ImportPrivateKeyFile(kTestEcdsaKeyFile); - ASSERT_TRUE(openssl_key); - - // Check that the wrapper key returns the correct length and type. - EXPECT_EQ(SSLPrivateKey::Type::ECDSA_P256, wrapper_key->GetType()); - EXPECT_EQ(static_cast<size_t>(EVP_PKEY_size(openssl_key.get())), - wrapper_key->GetMaxSignatureLengthInBytes()); - - // Test signing against each hash. - for (const auto& hash : kHashes) { - // ECDSA does not sign MD5-SHA1. - if (hash.nid == NID_md5_sha1) + // Only RSA signs MD5-SHA1. + if (test_key.key_type != SSLPrivateKey::Type::RSA && + hash.nid == NID_md5_sha1) { continue; + } SCOPED_TRACE(hash.name); + const EVP_MD* md = EVP_get_digestbynid(hash.nid); ASSERT_TRUE(md); std::string digest(EVP_MD_size(md), 'a'); std::string signature; DoKeySigningWithWrapper(wrapper_key.get(), hash.hash, digest, &signature); - ASSERT_TRUE(VerifyTestECDSASignature(digest, signature)); + EXPECT_TRUE(VerifyWithOpenSSL(md, digest, openssl_key.get(), signature)); + + // RSA signing is deterministic, so further check the signature matches. + if (test_key.key_type == SSLPrivateKey::Type::RSA) { + std::string openssl_signature; + ASSERT_TRUE( + SignWithOpenSSL(md, digest, openssl_key.get(), &openssl_signature)); + EXPECT_EQ(openssl_signature, signature); + } } } +INSTANTIATE_TEST_CASE_P(, + SSLPlatformKeyAndroidTest, + testing::ValuesIn(kTestKeys)); + } // namespace net
diff --git a/net/ssl/ssl_platform_key_util.cc b/net/ssl/ssl_platform_key_util.cc index 6c76220..39af9eb 100644 --- a/net/ssl/ssl_platform_key_util.cc +++ b/net/ssl/ssl_platform_key_util.cc
@@ -88,7 +88,7 @@ *out_type = SSLPrivateKey::Type::ECDSA_P384; break; case NID_secp521r1: - *out_type = SSLPrivateKey::Type::ECDSA_P384; + *out_type = SSLPrivateKey::Type::ECDSA_P521; break; default: LOG(ERROR) << "Unsupported curve type " << curve;
diff --git a/net/ssl/ssl_platform_key_util_unittest.cc b/net/ssl/ssl_platform_key_util_unittest.cc index 1e7b9d3..8a00034 100644 --- a/net/ssl/ssl_platform_key_util_unittest.cc +++ b/net/ssl/ssl_platform_key_util_unittest.cc
@@ -31,6 +31,10 @@ return GetClientCertInfo(cert.get(), out_type, out_max_length); } +size_t BitsToBytes(size_t bits) { + return (bits + 7) / 8; +} + } // namespace TEST(SSLPlatformKeyUtil, GetClientCertInfo) { @@ -43,7 +47,15 @@ ASSERT_TRUE(GetClientCertInfoFromFile("client_4.pem", &type, &max_length)); EXPECT_EQ(SSLPrivateKey::Type::ECDSA_P256, type); - EXPECT_EQ(ECDSA_SIG_max_len(256u / 8u), max_length); + EXPECT_EQ(ECDSA_SIG_max_len(BitsToBytes(256)), max_length); + + ASSERT_TRUE(GetClientCertInfoFromFile("client_5.pem", &type, &max_length)); + EXPECT_EQ(SSLPrivateKey::Type::ECDSA_P384, type); + EXPECT_EQ(ECDSA_SIG_max_len(BitsToBytes(384)), max_length); + + ASSERT_TRUE(GetClientCertInfoFromFile("client_6.pem", &type, &max_length)); + EXPECT_EQ(SSLPrivateKey::Type::ECDSA_P521, type); + EXPECT_EQ(ECDSA_SIG_max_len(BitsToBytes(521)), max_length); } } // namespace net
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 1f13d6c..f25d37ec 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -228,6 +228,10 @@ # define SK_DISABLE_COLOR_XFORM_PIPELINE #endif +#ifndef SK_SUPPORT_EXOTIC_CLIPOPS +# define SK_SUPPORT_EXOTIC_CLIPOPS +#endif + #ifndef SK_SUPPORT_LEGACY_IMAGE_ENCODER_CLASS # define SK_SUPPORT_LEGACY_IMAGE_ENCODER_CLASS #endif
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 1087293..7364569 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -13553,6 +13553,25 @@ }, { "args": [ + "--test-launcher-batch-limit=400", + "--deqp-egl-display-type=angle-d3d11" + ], + "name": "angle_deqp_gles3_d3d11_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6613", + "os": "Windows-2008ServerR2-SP1" + } + ], + "shards": 12 + }, + "test": "angle_deqp_gles3_tests", + "use_xvfb": false + }, + { + "args": [ "--use-gpu-in-tests", "--test-launcher-retry-limit=0" ],
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 4a8ce94..0764442 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -5,6 +5,1374 @@ "isolated_scripts": [ { "args": [ + "battor.power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases_no_chrome_trace", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases_no_chrome_trace", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases_no_chrome_trace", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases_no_chrome_trace.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.steady_state", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.steady_state.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.trivial_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.trivial_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.bindings", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.bindings", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.bindings", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.bindings.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.blink_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.blink_gc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.blink_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.blink_gc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.canvas", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.canvas", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.canvas", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.canvas.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.css", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.css", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.css", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.css.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.dom", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.dom.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.events", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.events", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.events", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.events.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.layout", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.layout", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.layout", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.layout.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint_slimmingpaintinvalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint_slimmingpaintinvalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.parser", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.parser", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.parser", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.parser.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.pywebsocket", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.pywebsocket", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.pywebsocket", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.pywebsocket.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.shadow_dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.shadow_dom", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.shadow_dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.shadow_dom.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg_slimmingpaintinvalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg_slimmingpaintinvalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.xml_http_request", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.xml_http_request", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.xml_http_request", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.xml_http_request.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.key_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.key_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blob_storage.blob_storage", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blob_storage.blob_storage", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blob_storage.blob_storage", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blob_storage.blob_storage.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "dromaeo.cssqueryjquery", "-v", "--upload-results", @@ -21,7 +1389,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device1", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -50,6 +1418,91 @@ "dimension_sets": [ { "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoreattr", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoreattr", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoreattr", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoreattr.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoremodify", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoremodify", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", "id": "build245-m4--device1", "os": "Android", "pool": "Chrome-perf" @@ -62,6 +1515,2828 @@ }, { "args": [ + "dromaeo.domcoremodify", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoremodify.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcorequery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcorequery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcorequery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcorequery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoretraverse", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoretraverse", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoretraverse", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoretraverse.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstylejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstylejquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstylejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstylejquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstyleprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstyleprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstyleprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstyleprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraversejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraversejquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraversejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraversejquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraverseprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraverseprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraverseprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraverseprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.noisy_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.noisy_benchmark_1", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.noisy_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.noisy_benchmark_1.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.stable_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.stable_benchmark_1", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.stable_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.stable_benchmark_1.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "image_decoding.image_decoding_measurement", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "image_decoding.image_decoding_measurement", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "image_decoding.image_decoding_measurement", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "image_decoding.image_decoding_measurement.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "indexeddb_perf", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "indexeddb_perf", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "indexeddb_perf", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "indexeddb_perf.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jetstream", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jetstream", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jetstream", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jetstream.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jitter", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jitter", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jitter", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jitter.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "kraken", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "kraken", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "kraken", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "kraken.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.cluster_telemetry", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.cluster_telemetry", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.cluster_telemetry", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.cluster_telemetry.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.android.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.android.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.android.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.android.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS4kOnly.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS4kOnly.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS4kOnly.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS4kOnly.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.media_cns_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.media_cns_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.media_cns_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.media_cns_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.mse_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.mse_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.mse_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.mse_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases_extra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases_extra", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases_extra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases_extra.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.blink_memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.blink_memory_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.blink_memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.blink_memory_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.dual_browser_test", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.dual_browser_test.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_dual_browser_test", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_dual_browser_test.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_background_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_background_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_background_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_background_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile_stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile_stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "octane", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "octane", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "octane", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "octane.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.blink_perf_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.blink_perf_stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.blink_perf_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.blink_perf_stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.tough_animation_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.tough_animation_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.basic_oopif", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.basic_oopif.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ar_fa_he", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ar_fa_he", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ar_fa_he", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ar_fa_he.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_es_fr_pt-BR", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_es_fr_pt-BR", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_es_fr_pt-BR", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_es_fr_pt-BR.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "page_cycler_v2.intl_hi_ru", "-v", "--upload-results", @@ -78,7 +4353,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device2", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -107,6 +4382,34 @@ "dimension_sets": [ { "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ja_zh", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ja_zh", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", "id": "build245-m4--device2", "os": "Android", "pool": "Chrome-perf" @@ -119,6 +4422,2543 @@ }, { "args": [ + "page_cycler_v2.intl_ja_zh", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ja_zh.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ko_th_vi", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ko_th_vi", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ko_th_vi", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ko_th_vi.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.top_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.top_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.tough_layout_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.tough_layout_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.tough_layout_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.tough_layout_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.typical_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.typical_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2_site_isolation.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2_site_isolation.basic_oopif", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2_site_isolation.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2_site_isolation.basic_oopif.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.android_acceptance", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.android_acceptance", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.android_acceptance", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.android_acceptance.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.typical_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.typical_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.steady_state", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.steady_state.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.trivial_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.trivial_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile_reload", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile_reload", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile_reload", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile_reload.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.partial_invalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.partial_invalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.partial_invalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.partial_invalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.gpu_rasterization.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.gpu_rasterization.key_mobile_sites_repaint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.gpu_rasterization.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.key_mobile_sites_repaint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.key_mobile_sites_repaint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "robohornet_pro", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "robohornet_pro", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "robohornet_pro", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "robohornet_pro.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "scheduler.tough_scheduling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "scheduler.tough_scheduling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "scheduler.tough_scheduling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "scheduler.tough_scheduling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker_micro_benchmark", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker_micro_benchmark", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker_micro_benchmark", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker_micro_benchmark.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.desktop_tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.desktop_tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.desktop_tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.desktop_tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_filters_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_filters_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_path_rendering_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_path_rendering_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.image_decoding_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.image_decoding_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_desktop_move_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_desktop_move_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_desktop_move_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_desktop_move_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.maps", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.maps", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.maps", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.maps.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.pathological_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.pathological_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.pathological_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.pathological_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.scrolling_tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.scrolling_tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.scrolling_tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.scrolling_tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.simple_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.simple_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.sync_scroll.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "smoothness.top_25_smooth", "-v", "--upload-results", @@ -135,7 +6975,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device3", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -164,6 +7004,205 @@ "dimension_sets": [ { "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_animation_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_animation_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_canvas_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_canvas_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_canvas_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_canvas_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_filters_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", "id": "build245-m4--device3", "os": "Android", "pool": "Chrome-perf" @@ -176,6 +7215,1232 @@ }, { "args": [ + "smoothness.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_filters_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_image_decode_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_image_decode_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_image_decode_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_image_decode_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_path_rendering_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_path_rendering_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_texture_upload_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_texture_upload_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_texture_upload_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_texture_upload_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "spaceport", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "spaceport", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "spaceport", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "spaceport.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer-ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer-ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.cold.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.cold.startup_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.cold.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.cold.startup_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.warm.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.warm.startup_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.warm.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.warm.startup_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.chrome_signin", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.chrome_signin", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.chrome_signin", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.chrome_signin.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure_tracing", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure_tracing", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure_tracing", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure_tracing.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "sunspider", "-v", "--upload-results", @@ -192,7 +8457,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device4", + "id": "build245-m4--device6", "os": "Android", "pool": "Chrome-perf" } @@ -221,6 +8486,34 @@ "dimension_sets": [ { "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", "id": "build245-m4--device4", "os": "Android", "pool": "Chrome-perf" @@ -233,6 +8526,206 @@ }, { "args": [ + "system_health.common_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "system_health.webview_startup", "-v", "--upload-results", @@ -249,7 +8742,7 @@ "dimension_sets": [ { "android_devices": "1", - "id": "build245-m4--device5", + "id": "build245-m4--device7", "os": "Android", "pool": "Chrome-perf" } @@ -278,6 +8771,2172 @@ "dimension_sets": [ { "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.webview_startup_multiprocess", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.webview_startup_multiprocess", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.webview_startup_multiprocess", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.webview_startup_multiprocess.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.five_blank_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.five_blank_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.five_blank_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.five_blank_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_energy_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_energy_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_energy_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_energy_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_image_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_image_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_image_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_image_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.typical_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.typical_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.character", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.character", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.character", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.character.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.direction", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.direction", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.direction", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.direction.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_hit_test_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_hit_test_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_hit_test_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_hit_test_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_idle_power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_idle_power_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_idle_power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_idle_power_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device7", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_noop_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_noop_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_noop_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_noop_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.simple_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.simple_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_compositor_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_compositor_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_compositor_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_compositor_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_background_memory_infra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_background_memory_infra", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_background_memory_infra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_background_memory_infra.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_debug_overhead", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_debug_overhead", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_debug_overhead", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_debug_overhead.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop_ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop_ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile_ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile_ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.detached_context_age_in_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.detached_context_age_in_gc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.detached_context_age_in_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.detached_context_age_in_gc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device4", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.google", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.google", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.google", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.google.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll-ignition_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll-ignition_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll-ignition_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll-ignition_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.mobile_infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.mobile_infinite_scroll_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.mobile_infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.mobile_infinite_scroll_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.runtime_stats.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.runtime_stats.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.runtime_stats.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.runtime_stats.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc-ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc-ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device3", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.datachannel", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.datachannel", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.datachannel", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.datachannel.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device2", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.getusermedia", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.getusermedia", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.getusermedia", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.getusermedia.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.peerconnection", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.peerconnection", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.peerconnection", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.peerconnection.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device6", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device1", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.webrtc_smoothness", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=android-chromium" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.webrtc_smoothness", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "id": "build245-m4--device5", + "os": "Android", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.webrtc_smoothness", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.webrtc_smoothness.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", "id": "build245-m4--device5", "os": "Android", "pool": "Chrome-perf" @@ -301,7 +10960,1375 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build48-b4", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases_no_chrome_trace", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases_no_chrome_trace", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.power_cases_no_chrome_trace", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.power_cases_no_chrome_trace.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.steady_state", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.steady_state.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.trivial_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "battor.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "battor.trivial_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.bindings", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.bindings", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.bindings", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.bindings.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.blink_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.blink_gc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.blink_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.blink_gc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.canvas", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.canvas", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.canvas", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.canvas.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.css", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.css", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.css", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.css.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.dom", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.dom.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.events", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.events", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.events", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.events.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.layout", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.layout", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.layout", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.layout.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint_slimmingpaintinvalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.paint_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.paint_slimmingpaintinvalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.parser", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.parser", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.parser", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.parser.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.pywebsocket", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.pywebsocket", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.pywebsocket", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.pywebsocket.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.shadow_dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.shadow_dom", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.shadow_dom", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.shadow_dom.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg_slimmingpaintinvalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.svg_slimmingpaintinvalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.svg_slimmingpaintinvalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.xml_http_request", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.xml_http_request", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_perf.xml_http_request", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_perf.xml_http_request.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.key_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.key_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blink_style.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blink_style.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blob_storage.blob_storage", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blob_storage.blob_storage", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "blob_storage.blob_storage", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "blob_storage.blob_storage.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -320,7 +12347,7 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build47-b4", + "id": "build136-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -388,6 +12415,918 @@ } }, { + "args": [ + "dromaeo.domcoreattr", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoreattr", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoreattr", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoreattr.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoremodify", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoremodify", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoremodify", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoremodify.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcorequery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcorequery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcorequery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcorequery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoretraverse", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoretraverse", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.domcoretraverse", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.domcoretraverse.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibattrprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibattrprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibeventprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibeventprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyjquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyjquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyjquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibmodifyprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibmodifyprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstylejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstylejquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstylejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstylejquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstyleprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstyleprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibstyleprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibstyleprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraversejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraversejquery", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraversejquery", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraversejquery.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraverseprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraverseprototype", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dromaeo.jslibtraverseprototype", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dromaeo.jslibtraverseprototype.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.noisy_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.noisy_benchmark_1", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.noisy_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.noisy_benchmark_1.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.stable_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.stable_benchmark_1", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "dummy_benchmark.stable_benchmark_1", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "dummy_benchmark.stable_benchmark_1.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { "args": [], "isolate_name": "gpu_perftests", "name": "gpu_perftests", @@ -396,7 +13335,520 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build47-b4", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.gpu_rasterization.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "gpu_times.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "gpu_times.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "image_decoding.image_decoding_measurement", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "image_decoding.image_decoding_measurement", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "image_decoding.image_decoding_measurement", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "image_decoding.image_decoding_measurement.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "indexeddb_perf", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "indexeddb_perf", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "indexeddb_perf", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "indexeddb_perf.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jetstream", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jetstream", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jetstream", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jetstream.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jitter", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jitter", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "jitter", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "jitter.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "kraken", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "kraken", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "kraken", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "kraken.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -415,6 +13867,889 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.cluster_telemetry", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.cluster_telemetry", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.cluster_telemetry", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.cluster_telemetry.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "loading.mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "loading.mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.android.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.android.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.android.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.android.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS4kOnly.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS4kOnly.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.chromeOS4kOnly.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.chromeOS4kOnly.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.media_cns_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.media_cns_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.media_cns_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.media_cns_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.mse_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.mse_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.mse_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.mse_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases_extra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases_extra", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "media.tough_video_cases_extra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "media.tough_video_cases_extra.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.blink_memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.blink_memory_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.blink_memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.blink_memory_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.dual_browser_test", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.dual_browser_test.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_dual_browser_test", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_dual_browser_test", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_dual_browser_test.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_background_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_background_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_background_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_background_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.long_running_idle_gmail_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.long_running_idle_gmail_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "memory.top_10_mobile_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile_stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build47-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -427,6 +14762,605 @@ }, { "args": [ + "memory.top_10_mobile_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "memory.top_10_mobile_stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "octane", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "octane", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "octane", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "octane.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.blink_perf_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.blink_perf_stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.blink_perf_stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.blink_perf_stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.tough_animation_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oilpan_gc_times.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oilpan_gc_times.tough_animation_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "oortonline_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "oortonline_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.basic_oopif", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.basic_oopif.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ar_fa_he", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ar_fa_he", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ar_fa_he", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ar_fa_he.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_es_fr_pt-BR", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_es_fr_pt-BR", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_es_fr_pt-BR", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_es_fr_pt-BR.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "page_cycler_v2.intl_hi_ru", "-v", "--upload-results", @@ -443,7 +15377,7 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build48-b4", + "id": "build143-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -472,6 +15406,148 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ja_zh", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ja_zh", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ja_zh", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ja_zh.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ko_th_vi", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ko_th_vi", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.intl_ko_th_vi", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.intl_ko_th_vi.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.top_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build48-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -483,6 +15559,206 @@ } }, { + "args": [ + "page_cycler_v2.top_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.top_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.tough_layout_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.tough_layout_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.tough_layout_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.tough_layout_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.typical_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2.typical_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2_site_isolation.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2_site_isolation.basic_oopif", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "page_cycler_v2_site_isolation.basic_oopif", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "page_cycler_v2_site_isolation.basic_oopif.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { "args": [], "isolate_name": "performance_browser_tests", "name": "performance_browser_tests", @@ -491,6 +15767,547 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.android_acceptance", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.android_acceptance", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.android_acceptance", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.android_acceptance.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.typical_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.gpu_rasterization.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.gpu_rasterization.typical_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.steady_state", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.steady_state", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.steady_state.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.trivial_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.trivial_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.trivial_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build48-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -503,6 +16320,1688 @@ }, { "args": [ + "power.typical_10_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile_reload", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile_reload", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "power.typical_10_mobile_reload", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "power.typical_10_mobile_reload.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.partial_invalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.partial_invalidation", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.partial_invalidation", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.partial_invalidation.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "rasterize_and_record_micro.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "rasterize_and_record_micro.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.gpu_rasterization.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.gpu_rasterization.key_mobile_sites_repaint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.gpu_rasterization.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.key_mobile_sites_repaint", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "repaint.key_mobile_sites_repaint", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "repaint.key_mobile_sites_repaint.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "robohornet_pro", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "robohornet_pro", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "robohornet_pro", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "robohornet_pro.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "scheduler.tough_scheduling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "scheduler.tough_scheduling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "scheduler.tough_scheduling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "scheduler.tough_scheduling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker_micro_benchmark", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker_micro_benchmark", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "service_worker.service_worker_micro_benchmark", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "service_worker.service_worker_micro_benchmark.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.desktop_tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.desktop_tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.desktop_tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.desktop_tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_filters_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_filters_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_path_rendering_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_path_rendering_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.gpu_rasterization_and_decoding.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.image_decoding_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.image_decoding_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.image_decoding_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_desktop_move_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_desktop_move_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_desktop_move_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_desktop_move_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.maps", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.maps", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.maps", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.maps.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.pathological_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.pathological_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.pathological_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.pathological_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.scrolling_tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.scrolling_tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.scrolling_tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.scrolling_tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.simple_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.simple_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.sync_scroll.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.sync_scroll.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "smoothness.top_25_smooth", "-v", "--upload-results", @@ -519,7 +18018,7 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build47-b4", + "id": "build148-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -548,6 +18047,1060 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build148-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_animation_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_animation_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_animation_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_canvas_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_canvas_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_canvas_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_canvas_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_filters_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_filters_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_filters_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_image_decode_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_image_decode_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_image_decode_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_image_decode_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_path_rendering_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_path_rendering_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_path_rendering_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_pinch_zoom_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_pinch_zoom_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_pinch_zoom_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_texture_upload_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_texture_upload_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_texture_upload_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_texture_upload_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_ad_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_ad_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_ad_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "smoothness.tough_webgl_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "smoothness.tough_webgl_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "spaceport", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "spaceport", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "spaceport", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "spaceport.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer-ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer-ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "speedometer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "speedometer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_ext.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_ext.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.cold.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.cold.startup_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.cold.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.cold.startup_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.warm.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.warm.startup_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "start_with_url.warm.startup_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "start_with_url.warm.startup_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build47-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -560,6 +19113,377 @@ }, { "args": [ + "startup.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.cold.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.cold.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.cold.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.large_profile.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.large_profile.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.blank_page", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.blank_page", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.blank_page.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.chrome_signin", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.chrome_signin", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "startup.warm.chrome_signin", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "startup.warm.chrome_signin.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure_tracing", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure_tracing", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "storage.indexeddb_endure_tracing", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "storage.indexeddb_endure_tracing.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ "sunspider", "-v", "--upload-results", @@ -576,7 +19500,7 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build48-b4", + "id": "build153-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -605,7 +19529,235 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build48-b4", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.common_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.common_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build136-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.memory_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.memory_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -633,7 +19785,7 @@ "dimension_sets": [ { "gpu": "8086:22b1", - "id": "build47-b4", + "id": "build140-b1", "os": "Windows-10-10586", "pool": "Chrome-perf" } @@ -662,6 +19814,604 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.webview_startup_multiprocess", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.webview_startup_multiprocess", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "system_health.webview_startup_multiprocess", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "system_health.webview_startup_multiprocess.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.five_blank_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.five_blank_pages", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.five_blank_pages", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.five_blank_pages.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.top_10", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.top_10", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.top_10.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_energy_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_energy_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_energy_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_energy_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_image_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_image_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.tough_image_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.tough_image_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build142-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.typical_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tab_switching.typical_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tab_switching.typical_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.character", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.character", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.character", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.character.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.direction", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.direction", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "text_selection.direction", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "text_selection.direction.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_hit_test_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_hit_test_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_hit_test_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_hit_test_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_idle_power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_idle_power_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_idle_power_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_idle_power_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build47-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -673,6 +20423,491 @@ } }, { + "args": [ + "thread_times.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_noop_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_noop_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_noop_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_noop_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_silk_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.key_silk_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.key_silk_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.polymer", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.polymer", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.polymer.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build140-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.simple_mobile_sites", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.simple_mobile_sites", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.simple_mobile_sites.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build150-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_compositor_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_compositor_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_compositor_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_compositor_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_scrolling_cases", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "thread_times.tough_scrolling_cases", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "thread_times.tough_scrolling_cases.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build47-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_background_memory_infra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_background_memory_infra", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_background_memory_infra", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_background_memory_infra.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build151-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_debug_overhead", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_debug_overhead", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "tracing.tracing_with_debug_overhead", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "tracing.tracing_with_debug_overhead.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { "args": [], "isolate_name": "tracing_perftests", "name": "tracing_perftests", @@ -681,6 +20916,689 @@ "dimension_sets": [ { "gpu": "8086:22b1", + "id": "build137-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build153-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop_ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_desktop_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_desktop_ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build154-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build155-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile_ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.browsing_mobile_ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.browsing_mobile_ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build143-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.detached_context_age_in_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.detached_context_age_in_gc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.detached_context_age_in_gc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.detached_context_age_in_gc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build139-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.google", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.google", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.google", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.google.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll-ignition_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll-ignition_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll-ignition_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll-ignition_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build144-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.infinite_scroll_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.key_mobile_sites_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.key_mobile_sites_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.key_mobile_sites_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build145-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.mobile_infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.mobile_infinite_scroll_tbmv2", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.mobile_infinite_scroll_tbmv2", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.mobile_infinite_scroll_tbmv2.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build138-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.runtime_stats.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.runtime_stats.top_25", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.runtime_stats.top_25", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.runtime_stats.top_25.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc-ignition", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", "id": "build48-b4", "os": "Windows-10-10586", "pool": "Chrome-perf" @@ -690,6 +21608,406 @@ "hard_timeout": 7200, "io_timeout": 3600 } + }, + { + "args": [ + "v8.todomvc-ignition", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc-ignition.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build48-b4", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.todomvc", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.todomvc.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build147-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.top_25_smooth", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "v8.top_25_smooth", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "v8.top_25_smooth.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.datachannel", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.datachannel", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.datachannel", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.datachannel.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.getusermedia", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.getusermedia", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.getusermedia", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.getusermedia.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build141-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.peerconnection", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.peerconnection", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.peerconnection", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.peerconnection.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build149-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.stress", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.stress", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.stress.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build146-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.webrtc_smoothness", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=release_x64" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.webrtc_smoothness", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } + }, + { + "args": [ + "webrtc.webrtc_smoothness", + "-v", + "--upload-results", + "--output-format=chartjson", + "--browser=reference", + "--output-trace-tag=_ref" + ], + "isolate_name": "telemetry_perf_tests", + "name": "webrtc.webrtc_smoothness.reference", + "override_compile_targets": [ + "telemetry_perf_tests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:22b1", + "id": "build152-b1", + "os": "Windows-10-10586", + "pool": "Chrome-perf" + } + ], + "expiration": 21600, + "hard_timeout": 7200, + "io_timeout": 3600 + } } ] },
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 index 819718f6..3c4848f 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -2163,6 +2163,9 @@ crbug.com/645667 compositing/clip-change.html [ Failure ] crbug.com/645667 compositing/layer-creation/iframe-clip-removed.html [ Failure ] +# Need to write SPv2 version of this code. +crbug.com/157218 compositing/overflow/border-radius-styles-with-composited-child.html [ Failure ] + # Notes about rebaselined tests: # # Rebaselined for small pixel differences.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 66b2f82..615648b 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -625,6 +625,12 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/trailing-float-with-content.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/float/vertical-move-relayout.html [ Skip ] crbug.com/635619 virtual/layout_ng/fast/block/float/width-update-after-clear.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top-2.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top-3.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top-4.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top-5.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top-6.html [ Skip ] +crbug.com/635619 virtual/layout_ng/fast/block/float/avoid-floats-when-negative-margin-top.html [ Skip ] # ====== LayoutNG-only failures until here ====== # Requires ServiceWorkerNavigationPreload feature enabled. Run under @@ -2262,3 +2268,9 @@ # Added 2016-12-12 crbug.com/610835 http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] crbug.com/610835 virtual/mojo-loading/http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ] + +# Added 2016-12-12 +crbug.com/673463 [ Linux ] fast/forms/associatedFormControls-leak-nodes.html [ Pass Failure ] + +# Added 2016-12-12 +crbug.com/673539 [ Linux ] css3/filters/effect-contrast-hw.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.png new file mode 100644 index 0000000..249b8d4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.txt new file mode 100644 index 0000000..47100f7f --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child-expected.txt
@@ -0,0 +1,17 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,10) size 784x580 +layer at (18,10) size 108x108 clip at (22,14) size 100x100 + LayoutBlockFlow {DIV} at (10,0) size 108x108 [bgcolor=#ADD8E6] [border: (4px solid #000000)] +layer at (18,128) size 108x108 clip at (22,132) size 100x100 + LayoutBlockFlow {DIV} at (10,118) size 108x108 [bgcolor=#ADD8E6] [border: (4px dashed #000000)] +layer at (18,246) size 108x108 clip at (22,250) size 100x100 + LayoutBlockFlow {DIV} at (10,236) size 108x108 [bgcolor=#ADD8E6] [border: (4px solid #FF00007F)] +layer at (22,14) size 96x96 + LayoutBlockFlow {DIV} at (4,4) size 96x96 [bgcolor=#008000] +layer at (22,132) size 96x96 + LayoutBlockFlow {DIV} at (4,4) size 96x96 [bgcolor=#008000] +layer at (22,250) size 96x96 + LayoutBlockFlow {DIV} at (4,4) size 96x96 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child.html b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child.html new file mode 100644 index 0000000..37087f0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/overflow/border-radius-styles-with-composited-child.html
@@ -0,0 +1,41 @@ +<style> + +.outer { + border: 4px solid black; + width: 100px; + height: 100px; + border-radius: 40px; + background-color: lightblue; + overflow: hidden; + margin: 10px; +} + +.inner { + width: 80px; + height: 80px; + background-color: green; + padding: .5em; + will-change: transform; +} + +.dashed { + border-style: dashed; +} + +.transparent { + border-color: rgba(255,0,0,0.5); +} + +</style> + +<div class = "outer"> + <div class = "inner"></div> +</div> + +<div class = "outer dashed"> + <div class = "inner"></div> +</div> + +<div class = "outer transparent"> + <div class = "inner"></div> +</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor-expected.html b/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor-expected.html new file mode 100644 index 0000000..580191f --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor-expected.html
@@ -0,0 +1,14 @@ +<style> +.outermost { + border: 4px solid #000; + border-radius: 40px; + width: 200px; + height: 200px; + overflow: hidden; +} + +</style> + +<div class="outermost"> +</div> +
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor.html b/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor.html new file mode 100644 index 0000000..786c5ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/overflow/empty-composited-child-of-border-radius-ancestor.html
@@ -0,0 +1,24 @@ +<style> +.outermost { + border: 4px solid #000; + border-radius: 40px; + width: 200px; + height: 200px; + overflow: hidden; +} + +.inner { + width: 200px; + height: 200px; + position: relative; + left: 50px; + top: 50px; + will-change: transform; +} +</style> + +<div class="outermost"> + <div class="inner"> + </div> +</div> +
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2.html new file mode 100644 index 0000000..8042753 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-2.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div class="float"></div> + <br clear=all> + <div style="width: 20px; height; 1px"></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3.html new file mode 100644 index 0000000..0111b37 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-3.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div> + <div class="float"></div> + <br clear=all> + </div> + <div style="width: 20px; height; 1px"></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4.html new file mode 100644 index 0000000..14f119a --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-4.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div> + <div class="float"></div> + <br clear=all> + </div> + <div style="float:left;"></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5.html new file mode 100644 index 0000000..9e711bd3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-5.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div> + <div class="float"></div> + <br clear=all> + </div> + <div style="position:absolute;"></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6.html new file mode 100644 index 0000000..1c58540 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-6.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div> + <div class="float"></div> + <br clear=all> + </div> + <div style="overflow:hidden;"></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-expected.txt b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-expected.txt new file mode 100644 index 0000000..9f54bd13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top-expected.txt
@@ -0,0 +1,4 @@ +crbug.com/666487: There should be a green square below. + + +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top.html b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top.html new file mode 100644 index 0000000..2ff4b736 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/block/float/avoid-floats-when-negative-margin-top.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { float: left; width: 50px; height: 100px; background: green;} +.content { overflow: hidden; margin-top: -100px; width: 50px; height: 100px; background: green;} +.container { width: 100px; background: red;} +</style> +<p>crbug.com/666487: There should be a green square below.</p> +<div class="container"> + <div class="float"></div> + <br clear=all> + <div></div> + <div class="content" data-offset-x=50></div> +</div> +<script src="../../../resources/check-layout.js"></script> +<script> +checkLayout('.content'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-radius-with-composited-child.html b/third_party/WebKit/LayoutTests/fast/borders/border-radius-with-composited-child.html index 16fd438..1e8782d 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/border-radius-with-composited-child.html +++ b/third_party/WebKit/LayoutTests/fast/borders/border-radius-with-composited-child.html
@@ -1,6 +1,6 @@ <!DOCTYPE HTML> -<p>Below there should be a solid black circle.</p> +<p>Below there should be a solid green circle with a black border and no red.</p> <br> -<div style="position:relative; z-index:1; overflow:hidden; margin-top:100px; width:200px; height:200px; border-radius:50%; border:10px solid black; background:black;"> - <div style="transform:translateZ(0); width:300px; height:300px; margin-left:-50px; margin-top:-50px; background:black;"></div> +<div style="position:relative; z-index:1; overflow:hidden; margin-top:100px; width:200px; height:200px; border-radius:50%; border:10px solid black; background:red;"> + <div style="transform:translateZ(0); width:300px; height:300px; margin-left:-50px; margin-top:-50px; background:green;"></div> </div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/dynamic/change-second-row-height.html b/third_party/WebKit/LayoutTests/fast/multicol/dynamic/change-second-row-height.html new file mode 100644 index 0000000..17202ea --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/multicol/dynamic/change-second-row-height.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<p>The word "HEST" should be seen below.</p> +<div style="position:relative; columns:2; column-gap:0; column-fill:auto; width:400px; height:40px; line-height:20px; orphans:1; widows:1;"> + <div id="inner" style="columns:2; column-gap:0; column-fill:auto; height:80px;"> + <div> + <br> + <br> + <br> + <br> + <br> + <span id="elm">HEST</span><br> + </div> + </div> +</div> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<script> +test(() => { + var inner = document.getElementById("inner"); + var elm = document.getElementById("elm"); + assert_equals(elm.offsetLeft, 200); + document.body.offsetLeft; + inner.style.height = "72px"; + assert_equals(elm.offsetLeft, 300); +}, "Change inner multicol height, which only affects the second row."); +</script>
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png index 54ff006c..d607997 100644 --- a/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt index 9501ac5..ca7947be 100644 --- a/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt
@@ -1,5 +1,16 @@ layer at (0,0) size 480x360 LayoutView at (0,0) size 480x360 layer at (0,0) size 480x360 - LayoutBlockFlow {HTML} at (0,0) size 480x360 - LayoutBlockFlow {BODY} at (8,8) size 464x344 + LayoutSVGRoot {svg} at (0,0) size 480x360 + LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 + LayoutSVGContainer {g} at (160,140) size 160x80 + LayoutSVGContainer {g} at (-60,-20) size 160x80 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,160.00)}] + LayoutSVGContainer {g} at (-60,-20) size 160x80 + LayoutSVGEllipse {circle} at (-40,-40) size 80x80 [transform={m=((2.00,0.00)(0.00,1.00)) t=(20.00,20.00)}] [fill={[type=SOLID] [color=#FF0000]}] [cx=0.00] [cy=0.00] [r=40.00] + LayoutSVGContainer {g} at (-40,-40) size 80x80 [transform={m=((2.00,0.00)(0.00,1.00)) t=(20.00,20.00)}] + LayoutSVGEllipse {circle} at (-40,-40) size 80x80 [fill={[type=SOLID] [color=#00FF00]}] [cx=0.00] [cy=0.00] [r=40.00] + LayoutSVGContainer {g} at (10,311) size 231x36 + LayoutSVGText {text} at (10,311) size 231x36 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (10,311) size 231x36 + chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.7 $" + LayoutSVGRect {rect} at (1,1) size 478x358 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png index 7659089..615d698f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.txt index 89b3ca3..fd7a43ae 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.txt
@@ -4,11 +4,11 @@ LayoutBlockFlow {HTML} at (0,0) size 800x400 LayoutBlockFlow {BODY} at (8,16) size 784x376 LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 255x19 - text run at (0,0) width 255: "Below there should be a solid black circle." + LayoutText {#text} at (0,0) size 446x19 + text run at (0,0) width 446: "Below there should be a solid green circle with a black border and no red." LayoutBlockFlow (anonymous) at (0,36) size 784x20 LayoutBR {BR} at (0,0) size 0x19 layer at (8,172) size 220x220 clip at (18,182) size 200x200 scrollWidth 250 scrollHeight 250 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,156) size 220x220 [bgcolor=#000000] [border: (10px solid #000000)] + LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,156) size 220x220 [bgcolor=#FF0000] [border: (10px solid #000000)] layer at (-32,132) size 300x300 backgroundClip at (18,182) size 200x200 clip at (18,182) size 200x200 - LayoutBlockFlow {DIV} at (-40,-40) size 300x300 + LayoutBlockFlow {DIV} at (-40,-40) size 300x300 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png index 3121adf..b936637 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.png index 667be4d..dd51cdc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.txt index 52b99ab0..981b686 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-with-composited-child-expected.txt
@@ -4,11 +4,11 @@ LayoutBlockFlow {HTML} at (0,0) size 800x396 LayoutBlockFlow {BODY} at (8,16) size 784x372 LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 272x18 - text run at (0,0) width 272: "Below there should be a solid black circle." + LayoutText {#text} at (0,0) size 473x18 + text run at (0,0) width 473: "Below there should be a solid green circle with a black border and no red." LayoutBlockFlow (anonymous) at (0,34) size 784x18 LayoutBR {BR} at (0,0) size 0x18 layer at (8,168) size 220x220 clip at (18,178) size 200x200 scrollWidth 250 scrollHeight 250 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,152) size 220x220 [bgcolor=#000000] [border: (10px solid #000000)] + LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,152) size 220x220 [bgcolor=#FF0000] [border: (10px solid #000000)] layer at (-32,128) size 300x300 backgroundClip at (18,178) size 200x200 clip at (18,178) size 200x200 - LayoutBlockFlow {DIV} at (-40,-40) size 300x300 + LayoutBlockFlow {DIV} at (-40,-40) size 300x300 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/clip/overflow-border-radius-composited-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/clip/overflow-border-radius-composited-expected.png index ee32eca..4bf08438 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/clip/overflow-border-radius-composited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/clip/overflow-border-radius-composited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.png index e78d1de6..566c0b5c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.txt index b9168fc1..9be3ba9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-with-composited-child-expected.txt
@@ -4,11 +4,11 @@ LayoutBlockFlow {HTML} at (0,0) size 800x396 LayoutBlockFlow {BODY} at (8,16) size 784x372 LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 272x17 - text run at (0,0) width 272: "Below there should be a solid black circle." + LayoutText {#text} at (0,0) size 473x17 + text run at (0,0) width 473: "Below there should be a solid green circle with a black border and no red." LayoutBlockFlow (anonymous) at (0,34) size 784x18 LayoutBR {BR} at (0,0) size 0x17 layer at (8,168) size 220x220 clip at (18,178) size 200x200 scrollWidth 250 scrollHeight 250 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,152) size 220x220 [bgcolor=#000000] [border: (10px solid #000000)] + LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (0,152) size 220x220 [bgcolor=#FF0000] [border: (10px solid #000000)] layer at (-32,128) size 300x300 backgroundClip at (18,178) size 200x200 clip at (18,178) size 200x200 - LayoutBlockFlow {DIV} at (-40,-40) size 300x300 + LayoutBlockFlow {DIV} at (-40,-40) size 300x300 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/clip/overflow-border-radius-composited-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/clip/overflow-border-radius-composited-expected.png index bf9eaea3..3c48d1f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/clip/overflow-border-radius-composited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/clip/overflow-border-radius-composited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom-expected.html b/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom-expected.html new file mode 100644 index 0000000..5fc78bb --- /dev/null +++ b/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom-expected.html
@@ -0,0 +1,2 @@ +<!DOCTYPE html> +<div style="width: 200px; height: 100px; background-color: green"></div>
diff --git a/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom.html b/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom.html new file mode 100644 index 0000000..e795309 --- /dev/null +++ b/third_party/WebKit/LayoutTests/svg/transforms/text-with-transform-and-zoom.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<script src="../../resources/ahem.js"></script> +<svg height="100" width="100" style="zoom: 2" fill="green" font-family="Ahem" font-size="50px"> + <text transform="translate(-50,-40)" x="50" y="80">X</text> + <text style="transform: translate(-50px, -40px)" x="100" y="80">X</text> +</svg>
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp index aace7e2..183a6f5 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp
@@ -61,17 +61,7 @@ visitor->trace(m_code); } -ScheduledAction::~ScheduledAction() { - // Verify that owning DOMTimer has eagerly disposed. - DCHECK(m_info.IsEmpty()); -} - -void ScheduledAction::dispose() { - m_code.dispose(); - m_info.Clear(); - m_function.clear(); - m_scriptState.clear(); -} +ScheduledAction::~ScheduledAction() {} void ScheduledAction::execute(ExecutionContext* context) { if (context->isDocument()) {
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h index b65d36ee..28a80e4 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h
@@ -56,8 +56,6 @@ static ScheduledAction* create(ScriptState*, const String& handler); ~ScheduledAction(); - void dispose(); - DECLARE_TRACE(); void execute(ExecutionContext*);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp index ef9de04..9c7f78f 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp
@@ -36,13 +36,6 @@ ScriptSourceCode::~ScriptSourceCode() {} -void ScriptSourceCode::dispose() { - m_source = String(); - m_resource = nullptr; - m_streamer = nullptr; - m_url = KURL(); -} - DEFINE_TRACE(ScriptSourceCode) { visitor->trace(m_resource); visitor->trace(m_streamer);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h index 15651270..3af0431 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h
@@ -56,7 +56,6 @@ ScriptSourceCode(ScriptStreamer*, ScriptResource*); ~ScriptSourceCode(); - void dispose(); DECLARE_TRACE(); bool isEmpty() const { return m_source.isEmpty(); } @@ -66,13 +65,13 @@ bool isNull() const { return m_source.isNull(); } const String& source() const { return m_source; } - ScriptResource* resource() const { return m_resource; } + ScriptResource* resource() const { return m_resource.get(); } const KURL& url() const; int startLine() const { return m_startPosition.m_line.oneBasedInt(); } const TextPosition& startPosition() const { return m_startPosition; } String sourceMapUrl() const; - ScriptStreamer* streamer() const { return m_streamer; } + ScriptStreamer* streamer() const { return m_streamer.get(); } private: void treatNullSourceAsEmpty();
diff --git a/third_party/WebKit/Source/core/dom/BUILD.gn b/third_party/WebKit/Source/core/dom/BUILD.gn index 55c3620..874b587d 100644 --- a/third_party/WebKit/Source/core/dom/BUILD.gn +++ b/third_party/WebKit/Source/core/dom/BUILD.gn
@@ -155,8 +155,6 @@ "IgnoreDestructiveWriteCountIncrementer.h", "IncrementLoadEventDelayCount.cpp", "IncrementLoadEventDelayCount.h", - "IntersectionGeometry.cpp", - "IntersectionGeometry.h", "IntersectionObservation.cpp", "IntersectionObservation.h", "IntersectionObserver.cpp",
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index b40ae4a..ad7cb11 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -409,7 +409,9 @@ m_evaluateMediaQueriesOnStyleRecalc(false), m_pendingSheetLayout(NoLayoutWithPendingSheets), m_frame(initializer.frame()), - m_domWindow(m_frame ? m_frame->localDOMWindow() : 0), + // TODO(dcheng): Why does this need both a LocalFrame and LocalDOMWindow + // pointer? + m_domWindow(m_frame ? m_frame->domWindow() : nullptr), m_importsController(this, initializer.importsController()), m_contextFeatures(ContextFeatures::defaultSwitch()), m_wellFormed(false), @@ -499,10 +501,10 @@ m_fetcher = m_frame->loader().documentLoader()->fetcher(); FrameFetchContext::provideDocumentToContext(m_fetcher->context(), this); + // TODO(dcheng): Why does this need to check that DOMWindow is non-null? CustomElementRegistry* registry = - m_frame->localDOMWindow() - ? m_frame->localDOMWindow()->maybeCustomElements() - : nullptr; + m_frame->domWindow() ? m_frame->domWindow()->maybeCustomElements() + : nullptr; if (registry && m_registrationContext) registry->entangle(m_registrationContext); } else if (m_importsController) { @@ -3028,11 +3030,10 @@ DocumentLoadTiming& timing = documentLoader->timing(); DCHECK(timing.navigationStart()); timing.markUnloadEventStart(); - m_frame->localDOMWindow()->dispatchEvent(unloadEvent, this); + m_frame->domWindow()->dispatchEvent(unloadEvent, this); timing.markUnloadEventEnd(); } else { - m_frame->localDOMWindow()->dispatchEvent(unloadEvent, - m_frame->document()); + m_frame->domWindow()->dispatchEvent(unloadEvent, m_frame->document()); } } m_loadEventProgress = UnloadEventHandled;
diff --git a/third_party/WebKit/Source/core/dom/IntersectionGeometry.cpp b/third_party/WebKit/Source/core/dom/IntersectionGeometry.cpp deleted file mode 100644 index 1956b7b6..0000000 --- a/third_party/WebKit/Source/core/dom/IntersectionGeometry.cpp +++ /dev/null
@@ -1,241 +0,0 @@ -// Copyright 2016 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 "core/dom/IntersectionGeometry.h" - -#include "core/dom/Element.h" -#include "core/dom/ElementRareData.h" -#include "core/frame/FrameView.h" -#include "core/frame/LocalFrame.h" -#include "core/layout/LayoutBox.h" -#include "core/layout/LayoutView.h" -#include "core/layout/api/LayoutAPIShim.h" -#include "core/layout/api/LayoutViewItem.h" -#include "core/paint/PaintLayer.h" - -namespace blink { - -namespace { - -bool isContainingBlockChainDescendant(LayoutObject* descendant, - LayoutObject* ancestor) { - LocalFrame* ancestorFrame = ancestor->document().frame(); - LocalFrame* descendantFrame = descendant->document().frame(); - - if (ancestor->isLayoutView()) - return descendantFrame && descendantFrame->tree().top() == ancestorFrame; - - if (ancestorFrame != descendantFrame) - return false; - - while (descendant && descendant != ancestor) - descendant = descendant->containingBlock(); - return descendant; -} - -void mapRectUpToDocument(LayoutRect& rect, - const LayoutObject& layoutObject, - const Document& document) { - FloatQuad mappedQuad = layoutObject.localToAbsoluteQuad( - FloatQuad(FloatRect(rect)), UseTransforms | ApplyContainerFlip); - rect = LayoutRect(mappedQuad.boundingBox()); -} - -void mapRectDownToDocument(LayoutRect& rect, - LayoutBoxModelObject& layoutObject, - const Document& document) { - FloatQuad mappedQuad = document.layoutView()->ancestorToLocalQuad( - &layoutObject, FloatQuad(FloatRect(rect)), - UseTransforms | ApplyContainerFlip | TraverseDocumentBoundaries); - rect = LayoutRect(mappedQuad.boundingBox()); -} - -LayoutUnit computeMargin(const Length& length, LayoutUnit referenceLength) { - if (length.type() == Percent) { - return LayoutUnit( - static_cast<int>(referenceLength.toFloat() * length.percent() / 100.0)); - } - DCHECK_EQ(length.type(), Fixed); - return LayoutUnit(length.intValue()); -} - -} // namespace - -IntersectionGeometry::IntersectionGeometry( - Node* root, - Element* target, - const Vector<Length>& rootMargin, - ReportRootBounds shouldReportRootBounds) - : m_root(root), - m_target(target), - m_rootMargin(rootMargin), - m_shouldReportRootBounds(shouldReportRootBounds) { - DCHECK(m_target); - DCHECK(rootMargin.isEmpty() || rootMargin.size() == 4); -} - -IntersectionGeometry::~IntersectionGeometry() {} - -Element* IntersectionGeometry::root() const { - if (m_root && !m_root->isDocumentNode()) - return toElement(m_root); - return nullptr; -} - -LayoutObject* IntersectionGeometry::getRootLayoutObject() const { - DCHECK(m_root); - if (m_root->isDocumentNode()) { - return LayoutAPIShim::layoutObjectFrom( - toDocument(m_root)->layoutViewItem()); - } - return toElement(m_root)->layoutObject(); -} - -void IntersectionGeometry::initializeGeometry() { - initializeTargetRect(); - m_intersectionRect = m_targetRect; - initializeRootRect(); - m_doesIntersect = true; -} - -void IntersectionGeometry::initializeTargetRect() { - LayoutObject* targetLayoutObject = m_target->layoutObject(); - DCHECK(targetLayoutObject && targetLayoutObject->isBoxModelObject()); - m_targetRect = LayoutRect( - toLayoutBoxModelObject(targetLayoutObject)->borderBoundingBox()); -} - -void IntersectionGeometry::initializeRootRect() { - LayoutObject* rootLayoutObject = getRootLayoutObject(); - if (rootLayoutObject->isLayoutView()) { - m_rootRect = LayoutRect( - toLayoutView(rootLayoutObject)->frameView()->visibleContentRect()); - } else if (rootLayoutObject->isBox() && rootLayoutObject->hasOverflowClip()) { - m_rootRect = LayoutRect(toLayoutBox(rootLayoutObject)->contentBoxRect()); - } else { - m_rootRect = LayoutRect( - toLayoutBoxModelObject(rootLayoutObject)->borderBoundingBox()); - } - applyRootMargin(); -} - -void IntersectionGeometry::applyRootMargin() { - if (m_rootMargin.isEmpty()) - return; - - // TODO(szager): Make sure the spec is clear that left/right margins are - // resolved against width and not height. - LayoutUnit topMargin = computeMargin(m_rootMargin[0], m_rootRect.height()); - LayoutUnit rightMargin = computeMargin(m_rootMargin[1], m_rootRect.width()); - LayoutUnit bottomMargin = computeMargin(m_rootMargin[2], m_rootRect.height()); - LayoutUnit leftMargin = computeMargin(m_rootMargin[3], m_rootRect.width()); - - m_rootRect.setX(m_rootRect.x() - leftMargin); - m_rootRect.setWidth(m_rootRect.width() + leftMargin + rightMargin); - m_rootRect.setY(m_rootRect.y() - topMargin); - m_rootRect.setHeight(m_rootRect.height() + topMargin + bottomMargin); -} - -void IntersectionGeometry::clipToRoot() { - // Map and clip rect into root element coordinates. - // TODO(szager): the writing mode flipping needs a test. - LayoutBox* rootLayoutObject = toLayoutBox(getRootLayoutObject()); - LayoutObject* targetLayoutObject = m_target->layoutObject(); - - m_doesIntersect = targetLayoutObject->mapToVisualRectInAncestorSpace( - rootLayoutObject, m_intersectionRect, EdgeInclusive); - if (rootLayoutObject->hasOverflowClip()) - m_intersectionRect.move(-rootLayoutObject->scrolledContentOffset()); - - if (!m_doesIntersect) - return; - LayoutRect rootClipRect(m_rootRect); - rootLayoutObject->flipForWritingMode(rootClipRect); - m_doesIntersect &= m_intersectionRect.inclusiveIntersect(rootClipRect); -} - -void IntersectionGeometry::mapTargetRectToTargetFrameCoordinates() { - LayoutObject& targetLayoutObject = *m_target->layoutObject(); - Document& targetDocument = m_target->document(); - LayoutSize scrollPosition = - LayoutSize(targetDocument.view()->getScrollOffset()); - mapRectUpToDocument(m_targetRect, targetLayoutObject, targetDocument); - m_targetRect.move(-scrollPosition); -} - -void IntersectionGeometry::mapRootRectToRootFrameCoordinates() { - LayoutObject& rootLayoutObject = *getRootLayoutObject(); - Document& rootDocument = rootLayoutObject.document(); - LayoutSize scrollPosition = - LayoutSize(rootDocument.view()->getScrollOffset()); - mapRectUpToDocument(m_rootRect, rootLayoutObject, - rootLayoutObject.document()); - m_rootRect.move(-scrollPosition); -} - -void IntersectionGeometry::mapRootRectToTargetFrameCoordinates() { - LayoutObject& rootLayoutObject = *getRootLayoutObject(); - Document& targetDocument = m_target->document(); - LayoutSize scrollPosition = - LayoutSize(targetDocument.view()->getScrollOffset()); - - if (&targetDocument == &rootLayoutObject.document()) { - mapRectUpToDocument(m_intersectionRect, rootLayoutObject, targetDocument); - } else { - mapRectDownToDocument(m_intersectionRect, - toLayoutBoxModelObject(rootLayoutObject), - targetDocument); - } - - m_intersectionRect.move(-scrollPosition); -} - -void IntersectionGeometry::computeGeometry() { - // In the first few lines here, before initializeGeometry is called, "return - // true" effectively means "if the previous observed state was that root and - // target were intersecting, then generate a notification indicating that they - // are no longer intersecting." This happens, for example, when root or - // target is removed from the DOM tree and not reinserted before the next - // frame is generated, or display:none is set on the root or target. - if (!m_target->isConnected()) - return; - Element* rootElement = root(); - if (rootElement && !rootElement->isConnected()) - return; - - LayoutObject* rootLayoutObject = getRootLayoutObject(); - if (!rootLayoutObject || !rootLayoutObject->isBoxModelObject()) - return; - // TODO(szager): Support SVG - LayoutObject* targetLayoutObject = m_target->layoutObject(); - if (!targetLayoutObject) - return; - if (!targetLayoutObject->isBoxModelObject() && !targetLayoutObject->isText()) - return; - if (!isContainingBlockChainDescendant(targetLayoutObject, rootLayoutObject)) - return; - - initializeGeometry(); - - clipToRoot(); - - mapTargetRectToTargetFrameCoordinates(); - - if (m_doesIntersect) - mapRootRectToTargetFrameCoordinates(); - else - m_intersectionRect = LayoutRect(); - - // Small optimization: if we're not going to report root bounds, don't bother - // transforming them to the frame. - if (m_shouldReportRootBounds == ReportRootBounds::kShouldReportRootBounds) - mapRootRectToRootFrameCoordinates(); -} - -DEFINE_TRACE(IntersectionGeometry) { - visitor->trace(m_root); - visitor->trace(m_target); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/IntersectionGeometry.h b/third_party/WebKit/Source/core/dom/IntersectionGeometry.h deleted file mode 100644 index ba94456..0000000 --- a/third_party/WebKit/Source/core/dom/IntersectionGeometry.h +++ /dev/null
@@ -1,73 +0,0 @@ -// Copyright 2016 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 IntersectionGeometry_h -#define IntersectionGeometry_h - -#include "platform/Length.h" -#include "platform/geometry/LayoutRect.h" -#include "platform/heap/Handle.h" -#include "wtf/Vector.h" - -namespace blink { - -class Node; -class Element; -class LayoutObject; - -class IntersectionGeometry final - : public GarbageCollectedFinalized<IntersectionGeometry> { - public: - enum ReportRootBounds { - kShouldReportRootBounds, - kShouldNotReportRootBounds, - }; - - IntersectionGeometry(Node* root, - Element* target, - const Vector<Length>& rootMargin, - ReportRootBounds shouldReportRootBounds); - ~IntersectionGeometry(); - - void computeGeometry(); - LayoutRect targetRect() const { return m_targetRect; } - LayoutRect intersectionRect() const { return m_intersectionRect; } - LayoutRect rootRect() const { return m_rootRect; } - bool doesIntersect() const { return m_doesIntersect; } - - IntRect intersectionIntRect() const { - return pixelSnappedIntRect(m_intersectionRect); - } - - IntRect targetIntRect() const { return pixelSnappedIntRect(m_targetRect); } - - IntRect rootIntRect() const { return pixelSnappedIntRect(m_rootRect); } - - DECLARE_TRACE(); - - private: - void initializeGeometry(); - void initializeTargetRect(); - void initializeRootRect(); - void clipToRoot(); - void mapTargetRectToTargetFrameCoordinates(); - void mapRootRectToRootFrameCoordinates(); - void mapRootRectToTargetFrameCoordinates(); - Element* root() const; - LayoutObject* getRootLayoutObject() const; - void applyRootMargin(); - - Member<Node> m_root; - Member<Element> m_target; - const Vector<Length> m_rootMargin; - const ReportRootBounds m_shouldReportRootBounds; - LayoutRect m_targetRect; - LayoutRect m_intersectionRect; - LayoutRect m_rootRect; - bool m_doesIntersect = false; -}; - -} // namespace blink - -#endif // IntersectionGeometry_h
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp b/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp index f6d3ceaa..a179b02 100644 --- a/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp +++ b/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp
@@ -6,18 +6,16 @@ #include "core/dom/ElementRareData.h" #include "core/dom/IntersectionObserver.h" +#include "core/layout/IntersectionGeometry.h" namespace blink { -IntersectionObservation::IntersectionObservation( - IntersectionObserver& observer, - Element& target, - IntersectionGeometry::ReportRootBounds shouldReportRootBounds) +IntersectionObservation::IntersectionObservation(IntersectionObserver& observer, + Element& target, + bool shouldReportRootBounds) : m_observer(observer), m_target(&target), - m_shouldReportRootBounds( - shouldReportRootBounds == - IntersectionGeometry::ReportRootBounds::kShouldReportRootBounds), + m_shouldReportRootBounds(shouldReportRootBounds), m_lastThresholdIndex(0) {} void IntersectionObservation::computeIntersectionObservations( @@ -29,11 +27,10 @@ rootMargin[1] = m_observer->rightMargin(); rootMargin[2] = m_observer->bottomMargin(); rootMargin[3] = m_observer->leftMargin(); + Node* rootNode = m_observer->rootNode(); IntersectionGeometry geometry( - m_observer->rootNode(), target(), rootMargin, - m_shouldReportRootBounds - ? IntersectionGeometry::ReportRootBounds::kShouldReportRootBounds - : IntersectionGeometry::ReportRootBounds::kShouldNotReportRootBounds); + rootNode && !rootNode->isDocumentNode() ? toElement(rootNode) : nullptr, + *target(), rootMargin, m_shouldReportRootBounds); geometry.computeGeometry(); // Some corner cases for threshold index:
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObservation.h b/third_party/WebKit/Source/core/dom/IntersectionObservation.h index 3b1ec65d..68fe7337 100644 --- a/third_party/WebKit/Source/core/dom/IntersectionObservation.h +++ b/third_party/WebKit/Source/core/dom/IntersectionObservation.h
@@ -6,7 +6,6 @@ #define IntersectionObservation_h #include "core/dom/DOMHighResTimeStamp.h" -#include "core/dom/IntersectionGeometry.h" #include "platform/heap/Handle.h" namespace blink { @@ -17,10 +16,9 @@ class IntersectionObservation final : public GarbageCollected<IntersectionObservation> { public: - IntersectionObservation( - IntersectionObserver&, - Element&, - IntersectionGeometry::ReportRootBounds shouldReportRootBounds); + IntersectionObservation(IntersectionObserver&, + Element&, + bool shouldReportRootBounds); IntersectionObserver& observer() const { return *m_observer; } Element* target() const { return m_target; }
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp index 09e1dc56f..bb69ebb0 100644 --- a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp +++ b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
@@ -270,11 +270,8 @@ isDOMDescendant = (targetFrame->tree().top() == rootFrame); } - IntersectionObservation* observation = new IntersectionObservation( - *this, *target, - shouldReportRootBounds - ? IntersectionGeometry::ReportRootBounds::kShouldReportRootBounds - : IntersectionGeometry::ReportRootBounds::kShouldNotReportRootBounds); + IntersectionObservation* observation = + new IntersectionObservation(*this, *target, shouldReportRootBounds); target->ensureIntersectionObserverData().addObservation(*observation); m_observations.add(observation);
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementRegistryTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementRegistryTest.cpp index fbb93b6c..fc29919 100644 --- a/third_party/WebKit/Source/core/dom/custom/CustomElementRegistryTest.cpp +++ b/third_party/WebKit/Source/core/dom/custom/CustomElementRegistryTest.cpp
@@ -35,7 +35,7 @@ Document& document() { return m_page->document(); } CustomElementRegistry& registry() { - return *m_page->frame().localDOMWindow()->customElements(); + return *m_page->frame().domWindow()->customElements(); } ScriptState* scriptState() {
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp index 672589a..d414e65 100644 --- a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp +++ b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp
@@ -208,7 +208,7 @@ // register a definition std::unique_ptr<DummyPageHolder> holder(DummyPageHolder::create()); CustomElementRegistry* registry = - holder->frame().localDOMWindow()->customElements(); + holder->frame().domWindow()->customElements(); NonThrowableExceptionState shouldNotThrow; { CEReactionsScope reactions;
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp index 6cf39773..efaf58b 100644 --- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp +++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
@@ -276,7 +276,7 @@ notifyAccessibilityForSelectionChange(); notifyCompositorForSelectionChange(); notifyEventHandlerForSelectionChange(); - m_frame->localDOMWindow()->enqueueDocumentEvent( + m_frame->domWindow()->enqueueDocumentEvent( Event::create(EventTypeNames::selectionchange)); }
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp index 3450d97..e54aa91 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -103,6 +103,18 @@ return !originB->isSameSchemeHostPort(originA.get()); } +void addRedirectsToTimingInfo(Resource* resource, ResourceTimingInfo* info) { + // Store redirect responses that were packed inside the final response. + const auto& responses = resource->response().redirectResponses(); + for (size_t i = 0; i < responses.size(); ++i) { + const KURL& newURL = i + 1 < responses.size() + ? KURL(responses[i + 1].url()) + : resource->resourceRequest().url(); + bool crossOrigin = IsCrossOrigin(responses[i].url(), newURL); + info->addRedirect(responses[i], crossOrigin); + } +} + } // namespace static void RecordSriResourceIntegrityMismatchEvent( @@ -597,7 +609,6 @@ resource->setLinkPreload(false); break; } - if (!resource) return nullptr; if (resource->getType() != factory.type()) { @@ -641,7 +652,6 @@ if (!startLoad(resource)) return nullptr; - scopedResourceLoadTracker.resourceLoadContinuesBeyondScope(); DCHECK(!resource->errorOccurred() || @@ -757,7 +767,7 @@ return resource; } -void ResourceFetcher::storeResourceTimingInitiatorInformation( +void ResourceFetcher::storePerformanceTimingInitiatorInformation( Resource* resource) { const AtomicString& fetchInitiator = resource->options().initiatorInfo.name; if (fetchInitiator == FetchInitiatorTypeNames::internal) @@ -771,6 +781,14 @@ ? resource->resourceRequest().navigationStartTime() : monotonicallyIncreasingTime(); + // This buffer is created and populated for providing transferSize + // and redirect timing opt-in information. + if (isMainResource) { + DCHECK(!m_navigationTimingInfo); + m_navigationTimingInfo = + ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); + } + std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); @@ -782,8 +800,9 @@ } if (!isMainResource || - context().updateTimingInfoForIFrameNavigation(info.get())) + context().updateTimingInfoForIFrameNavigation(info.get())) { m_resourceTimingInfoMap.add(resource, std::move(info)); + } } ResourceFetcher::RevalidationPolicy @@ -1125,6 +1144,10 @@ return m_archive ? m_archive->mainResource() : nullptr; } +ResourceTimingInfo* ResourceFetcher::getNavigationTimingInfo() { + return m_navigationTimingInfo.get(); +} + void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, DidFinishLoadingReason finishReason) { @@ -1143,18 +1166,19 @@ DCHECK(finishReason == DidFinishFirstPartInMultipart || !m_nonBlockingLoaders.contains(resource->loader())); + if (resource->getType() == Resource::MainResource) { + DCHECK(m_navigationTimingInfo); + // Store redirect responses that were packed inside the final response. + addRedirectsToTimingInfo(resource, m_navigationTimingInfo.get()); + if (resource->response().isHTTP()) { + m_navigationTimingInfo->addFinalTransferSize( + encodedDataLength == -1 ? 0 : encodedDataLength); + } + } if (std::unique_ptr<ResourceTimingInfo> info = m_resourceTimingInfoMap.take(resource)) { // Store redirect responses that were packed inside the final response. - const Vector<ResourceResponse>& responses = - resource->response().redirectResponses(); - for (size_t i = 0; i < responses.size(); ++i) { - const KURL& newURL = i + 1 < responses.size() - ? KURL(responses[i + 1].url()) - : resource->resourceRequest().url(); - bool crossOrigin = IsCrossOrigin(responses[i].url(), newURL); - info->addRedirect(responses[i], crossOrigin); - } + addRedirectsToTimingInfo(resource, info.get()); if (resource->response().isHTTP() && resource->response().httpStatusCode() < 400) { @@ -1326,7 +1350,7 @@ else m_nonBlockingLoaders.add(loader); - storeResourceTimingInitiatorInformation(resource); + storePerformanceTimingInitiatorInformation(resource); resource->setFetcherSecurityOrigin(sourceOrigin); loader->activateCacheAwareLoadingIfNeeded(request); @@ -1419,6 +1443,13 @@ bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url()); it->value->addRedirect(redirectResponse, crossOrigin); } + + if (resource->getType() == Resource::MainResource) { + DCHECK(m_navigationTimingInfo); + bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url()); + m_navigationTimingInfo->addRedirect(redirectResponse, crossOrigin); + } + newRequest.setAllowStoredCredentials(resource->options().allowCredentials == AllowStoredCredentials); willSendRequest(resource->identifier(), newRequest, redirectResponse,
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h index efe804a..08972762 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
@@ -152,6 +152,9 @@ void reloadLoFiImages(); + // Calling this method before main document resource is fetched is invalid. + ResourceTimingInfo* getNavigationTimingInfo(); + // This is only exposed for testing purposes. HeapListHashSet<Member<Resource>>* preloads() { return m_preloads.get(); } @@ -171,7 +174,7 @@ Resource* createResourceForLoading(FetchRequest&, const String& charset, const ResourceFactory&); - void storeResourceTimingInitiatorInformation(Resource*); + void storePerformanceTimingInitiatorInformation(Resource*); ResourceLoadPriority computeLoadPriority(Resource::Type, const FetchRequest&, ResourcePriority::VisibilityStatus); @@ -237,6 +240,8 @@ HeapHashMap<Member<Resource>, std::unique_ptr<ResourceTimingInfo>>; ResourceTimingInfoMap m_resourceTimingInfoMap; + std::unique_ptr<ResourceTimingInfo> m_navigationTimingInfo; + Vector<std::unique_ptr<ResourceTimingInfo>> m_scheduledResourceTimingReports; HeapHashSet<Member<ResourceLoader>> m_loaders;
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp index 80ff9d0..83c82de 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
@@ -144,6 +144,47 @@ memoryCache()->remove(resource); } +TEST_F(ResourceFetcherTest, NavigationTimingInfo) { + KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); + ResourceResponse response; + response.setURL(url); + response.setHTTPStatusCode(200); + + ResourceFetcher* fetcher = ResourceFetcher::create( + MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); + ResourceRequest resourceRequest(url); + resourceRequest.setFrameType(WebURLRequest::FrameTypeNested); + resourceRequest.setRequestContext(WebURLRequest::RequestContextForm); + FetchRequest fetchRequest = + FetchRequest(resourceRequest, FetchInitiatorInfo()); + Platform::current()->getURLLoaderMockFactory()->registerURL( + url, WebURLResponse(), ""); + Resource* resource = + RawResource::fetchMainResource(fetchRequest, fetcher, SubstituteData()); + resource->responseReceived(response, nullptr); + EXPECT_EQ(resource->getType(), Resource::MainResource); + + ResourceTimingInfo* navigationTimingInfo = fetcher->getNavigationTimingInfo(); + ASSERT_TRUE(navigationTimingInfo); + long long encodedDataLength = 123; + resource->loader()->didFinishLoading(0.0, encodedDataLength, 0); + EXPECT_EQ(navigationTimingInfo->transferSize(), encodedDataLength); + + // When there are redirects. + KURL redirectURL(ParsedURLString, "http://127.0.0.1:8000/redirect.html"); + ResourceResponse redirectResponse; + redirectResponse.setURL(redirectURL); + redirectResponse.setHTTPStatusCode(200); + long long redirectEncodedDataLength = 123; + redirectResponse.setEncodedDataLength(redirectEncodedDataLength); + ResourceRequest redirectResourceRequest(url); + fetcher->willFollowRedirect(resource, redirectResourceRequest, + redirectResponse); + EXPECT_EQ(navigationTimingInfo->transferSize(), + encodedDataLength + redirectEncodedDataLength); + Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); +} + TEST_F(ResourceFetcherTest, VaryOnBack) { MockFetchContext* context = MockFetchContext::create(MockFetchContext::kShouldLoadNewResource);
diff --git a/third_party/WebKit/Source/core/frame/DOMTimer.cpp b/third_party/WebKit/Source/core/frame/DOMTimer.cpp index a6140804..0a4bc85 100644 --- a/third_party/WebKit/Source/core/frame/DOMTimer.cpp +++ b/third_party/WebKit/Source/core/frame/DOMTimer.cpp
@@ -47,7 +47,7 @@ static const double minimumInterval = 0.004; static inline bool shouldForwardUserGesture(int interval, int nestingLevel) { - return UserGestureIndicator::processingUserGesture() && + return UserGestureIndicator::processingUserGestureThreadSafe() && interval <= maxIntervalForUserGestureForwarding && nestingLevel == 1; // Gestures should not be forwarded to nested timers. @@ -90,8 +90,11 @@ m_nestingLevel(context->timers()->timerNestingLevel() + 1), m_action(action) { ASSERT(timeoutID > 0); - if (shouldForwardUserGesture(interval, m_nestingLevel)) + if (shouldForwardUserGesture(interval, m_nestingLevel)) { + // Thread safe because shouldForwardUserGesture will only return true if + // execution is on the the main thread. m_userGestureToken = UserGestureIndicator::currentToken(); + } InspectorInstrumentation::asyncTaskScheduled( context, singleShot ? "setTimeout" : "setInterval", this, !singleShot); @@ -107,10 +110,7 @@ startRepeating(intervalMilliseconds, BLINK_FROM_HERE); } -DOMTimer::~DOMTimer() { - if (m_action) - m_action->dispose(); -} +DOMTimer::~DOMTimer() {} void DOMTimer::stop() { InspectorInstrumentation::asyncTaskCanceled(getExecutionContext(), this); @@ -118,8 +118,6 @@ // Need to release JS objects potentially protected by ScheduledAction // because they can form circular references back to the ExecutionContext // which will cause a memory leak. - if (m_action) - m_action->dispose(); m_action = nullptr; SuspendableTimer::stop(); } @@ -177,8 +175,6 @@ executionContext->timers()->setTimerNestingLevel(0); // Eagerly unregister as ExecutionContext observer. clearContext(); - // Eagerly clear out |action|'s resources. - action->dispose(); } WebTaskRunner* DOMTimer::timerTaskRunner() const {
diff --git a/third_party/WebKit/Source/core/frame/DOMWindowProperty.cpp b/third_party/WebKit/Source/core/frame/DOMWindowProperty.cpp index 312beaa..fef480ff 100644 --- a/third_party/WebKit/Source/core/frame/DOMWindowProperty.cpp +++ b/third_party/WebKit/Source/core/frame/DOMWindowProperty.cpp
@@ -38,7 +38,7 @@ if (m_frame) { // FIXME: Need to figure out what to do with DOMWindowProperties on // remote DOM windows. - m_frame->localDOMWindow()->registerProperty(this); + m_frame->domWindow()->registerProperty(this); } }
diff --git a/third_party/WebKit/Source/core/frame/Frame.cpp b/third_party/WebKit/Source/core/frame/Frame.cpp index 9680704..aa43af8 100644 --- a/third_party/WebKit/Source/core/frame/Frame.cpp +++ b/third_party/WebKit/Source/core/frame/Frame.cpp
@@ -64,6 +64,7 @@ visitor->trace(m_treeNode); visitor->trace(m_host); visitor->trace(m_owner); + visitor->trace(m_domWindow); visitor->trace(m_client); }
diff --git a/third_party/WebKit/Source/core/frame/Frame.h b/third_party/WebKit/Source/core/frame/Frame.h index 098c603..2abf68fc 100644 --- a/third_party/WebKit/Source/core/frame/Frame.h +++ b/third_party/WebKit/Source/core/frame/Frame.h
@@ -74,7 +74,6 @@ virtual bool isLocalFrame() const = 0; virtual bool isRemoteFrame() const = 0; - virtual DOMWindow* domWindow() const = 0; virtual WindowProxy* windowProxy(DOMWrapperWorld&) = 0; virtual void navigate(Document& originDocument, @@ -107,6 +106,8 @@ void setOwner(FrameOwner* owner) { m_owner = owner; } HTMLFrameOwnerElement* deprecatedLocalOwner() const; + DOMWindow* domWindow() const { return m_domWindow; } + FrameTree& tree() const; ChromeClient& chromeClient() const; @@ -153,6 +154,7 @@ Member<FrameHost> m_host; Member<FrameOwner> m_owner; + Member<DOMWindow> m_domWindow; bool m_isDetaching = false;
diff --git a/third_party/WebKit/Source/core/frame/FrameClient.h b/third_party/WebKit/Source/core/frame/FrameClient.h index 4af7581..6b8af79 100644 --- a/third_party/WebKit/Source/core/frame/FrameClient.h +++ b/third_party/WebKit/Source/core/frame/FrameClient.h
@@ -35,8 +35,6 @@ virtual void frameFocused() const = 0; - virtual BlameContext* frameBlameContext() { return nullptr; } - virtual ~FrameClient() {} DEFINE_INLINE_VIRTUAL_TRACE() {}
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp index 603823a..b3d3098 100644 --- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp +++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
@@ -532,7 +532,7 @@ if (!frames[i]->isLocalFrame()) continue; toLocalFrame(frames[i].get()) - ->localDOMWindow() + ->domWindow() ->dispatchEvent(Event::create(EventTypeNames::orientationchange)); } }
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.cpp b/third_party/WebKit/Source/core/frame/LocalFrame.cpp index eff2a0c..c5b21581 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrame.cpp +++ b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
@@ -349,10 +349,6 @@ Supplementable<LocalFrame>::trace(visitor); } -DOMWindow* LocalFrame::domWindow() const { - return m_domWindow.get(); -} - WindowProxy* LocalFrame::windowProxy(DOMWrapperWorld& world) { return m_script->windowProxy(world); } @@ -429,9 +425,9 @@ script().clearForClose(); setView(nullptr); - m_host->eventHandlerRegistry().didRemoveAllEventHandlers(*localDOMWindow()); + m_host->eventHandlerRegistry().didRemoveAllEventHandlers(*domWindow()); - localDOMWindow()->frameDestroyed(); + domWindow()->frameDestroyed(); // TODO: Page should take care of updating focus/scrolling instead of Frame. // TODO: It's unclear as to why this is called more than once, but it is, @@ -474,7 +470,7 @@ targetFrameDescription + " from frame with URL '" + document()->url().getString() + "'. " + reason + "\n"; - localDOMWindow()->printErrorMessage(message); + domWindow()->printErrorMessage(message); } WindowProxyManager* LocalFrame::getWindowProxyManager() const { @@ -500,6 +496,10 @@ inputMethodController().documentAttached(document()); } +LocalDOMWindow* LocalFrame::domWindow() const { + return toLocalDOMWindow(m_domWindow); +} + void LocalFrame::setDOMWindow(LocalDOMWindow* domWindow) { // TODO(haraken): Update this comment. // Oilpan: setDOMWindow() cannot be used when finalizing. Which @@ -519,8 +519,8 @@ if (domWindow) script().clearWindowProxy(); - if (m_domWindow) - m_domWindow->reset(); + if (this->domWindow()) + this->domWindow()->reset(); m_domWindow = domWindow; }
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.h b/third_party/WebKit/Source/core/frame/LocalFrame.h index c979b7b..fb15870 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrame.h +++ b/third_party/WebKit/Source/core/frame/LocalFrame.h
@@ -106,7 +106,6 @@ // Frame overrides: ~LocalFrame() override; DECLARE_VIRTUAL_TRACE(); - DOMWindow* domWindow() const override; WindowProxy* windowProxy(DOMWrapperWorld&) override; void navigate(Document& originDocument, const KURL&, @@ -125,7 +124,7 @@ void detachChildren(); void documentAttached(); - LocalDOMWindow* localDOMWindow() const; + LocalDOMWindow* domWindow() const; void setDOMWindow(LocalDOMWindow*); FrameView* view() const; Document* document() const; @@ -249,7 +248,6 @@ Member<NavigationScheduler> m_navigationScheduler; Member<FrameView> m_view; - Member<LocalDOMWindow> m_domWindow; // Usually 0. Non-null if this is the top frame of PagePopup. Member<Element> m_pagePopupOwner; @@ -279,10 +277,6 @@ m_loader.init(); } -inline LocalDOMWindow* LocalFrame::localDOMWindow() const { - return m_domWindow.get(); -} - inline FrameLoader& LocalFrame::loader() const { return m_loader; }
diff --git a/third_party/WebKit/Source/core/frame/RemoteDOMWindow.h b/third_party/WebKit/Source/core/frame/RemoteDOMWindow.h index 2507461..13c6538 100644 --- a/third_party/WebKit/Source/core/frame/RemoteDOMWindow.h +++ b/third_party/WebKit/Source/core/frame/RemoteDOMWindow.h
@@ -7,6 +7,7 @@ #include "core/frame/DOMWindow.h" #include "core/frame/RemoteFrame.h" +#include "wtf/Assertions.h" namespace blink { @@ -109,6 +110,12 @@ Member<RemoteFrame> m_frame; }; +DEFINE_TYPE_CASTS(RemoteDOMWindow, + DOMWindow, + x, + x->isRemoteDOMWindow(), + x.isRemoteDOMWindow()); + } // namespace blink #endif // DOMWindow_h
diff --git a/third_party/WebKit/Source/core/frame/RemoteFrame.cpp b/third_party/WebKit/Source/core/frame/RemoteFrame.cpp index 4abb8f84..730c0173 100644 --- a/third_party/WebKit/Source/core/frame/RemoteFrame.cpp +++ b/third_party/WebKit/Source/core/frame/RemoteFrame.cpp
@@ -30,8 +30,9 @@ FrameOwner* owner) : Frame(client, host, owner), m_securityContext(RemoteSecurityContext::create()), - m_domWindow(RemoteDOMWindow::create(*this)), - m_windowProxyManager(WindowProxyManager::create(*this)) {} + m_windowProxyManager(WindowProxyManager::create(*this)) { + m_domWindow = RemoteDOMWindow::create(*this); +} RemoteFrame* RemoteFrame::create(RemoteFrameClient* client, FrameHost* host, @@ -46,15 +47,10 @@ DEFINE_TRACE(RemoteFrame) { visitor->trace(m_view); visitor->trace(m_securityContext); - visitor->trace(m_domWindow); visitor->trace(m_windowProxyManager); Frame::trace(visitor); } -DOMWindow* RemoteFrame::domWindow() const { - return m_domWindow.get(); -} - WindowProxy* RemoteFrame::windowProxy(DOMWrapperWorld& world) { WindowProxy* windowProxy = m_windowProxyManager->windowProxy(world); ASSERT(windowProxy); @@ -155,7 +151,7 @@ // persistent strong references to RemoteDOMWindow will prevent the GCing // of all these objects. Break the cycle by notifying of detachment. if (!m_view) - m_domWindow->frameDetached(); + toRemoteDOMWindow(m_domWindow)->frameDetached(); } void RemoteFrame::createView() {
diff --git a/third_party/WebKit/Source/core/frame/RemoteFrame.h b/third_party/WebKit/Source/core/frame/RemoteFrame.h index 9d55b14..9c1c8094 100644 --- a/third_party/WebKit/Source/core/frame/RemoteFrame.h +++ b/third_party/WebKit/Source/core/frame/RemoteFrame.h
@@ -15,7 +15,6 @@ class Event; class IntRect; class LocalFrame; -class RemoteDOMWindow; class RemoteFrameClient; class RemoteFrameView; class WebLayer; @@ -30,7 +29,6 @@ // Frame overrides: DECLARE_VIRTUAL_TRACE(); - DOMWindow* domWindow() const override; WindowProxy* windowProxy(DOMWrapperWorld&) override; void navigate(Document& originDocument, const KURL&, @@ -81,7 +79,6 @@ Member<RemoteFrameView> m_view; Member<RemoteSecurityContext> m_securityContext; - Member<RemoteDOMWindow> m_domWindow; Member<WindowProxyManager> m_windowProxyManager; WebLayer* m_webLayer = nullptr; };
diff --git a/third_party/WebKit/Source/core/html/AutoplayUmaHelperTest.cpp b/third_party/WebKit/Source/core/html/AutoplayUmaHelperTest.cpp index 77f75ad..f5be095 100644 --- a/third_party/WebKit/Source/core/html/AutoplayUmaHelperTest.cpp +++ b/third_party/WebKit/Source/core/html/AutoplayUmaHelperTest.cpp
@@ -45,37 +45,34 @@ return toHTMLVideoElement(*element); } - MockAutoplayUmaHelper& umaHelper() { - return *(static_cast<MockAutoplayUmaHelper*>( - mediaElement().m_autoplayUmaHelper.get())); - } + MockAutoplayUmaHelper& umaHelper() { return *m_umaHelper; } std::unique_ptr<DummyPageHolder>& pageHolder() { return m_pageHolder; } - MOCK_METHOD0(TestEnded, void()); - private: void SetUp() override { m_pageHolder = DummyPageHolder::create(IntSize(800, 600)); document().documentElement()->setInnerHTML("<video id=video></video>", ASSERT_NO_EXCEPTION); HTMLMediaElement& element = mediaElement(); - element.m_autoplayUmaHelper = new MockAutoplayUmaHelper(&element); + m_umaHelper = new MockAutoplayUmaHelper(&element); + element.m_autoplayUmaHelper = m_umaHelper; } + void TearDown() override { m_umaHelper.clear(); } + std::unique_ptr<DummyPageHolder> m_pageHolder; + Persistent<MockAutoplayUmaHelper> m_umaHelper; }; TEST_F(AutoplayUmaHelperTest, VisibilityChangeWhenUnload) { - // This is to avoid handleContextDestroyed() to be called during TearDown(). - EXPECT_CALL(*this, TestEnded()) - .After(EXPECT_CALL(umaHelper(), handleContextDestroyed())); + EXPECT_CALL(umaHelper(), handleContextDestroyed()); mediaElement().setMuted(true); umaHelper().onAutoplayInitiated(AutoplaySource::Attribute); umaHelper().handlePlayingEvent(); pageHolder().reset(); - TestEnded(); + ::testing::Mock::VerifyAndClear(&umaHelper()); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp index 3dc61ac..6bea516 100644 --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -39,7 +39,6 @@ #include "core/dom/ElementTraversal.h" #include "core/dom/ElementVisibilityObserver.h" #include "core/dom/Fullscreen.h" -#include "core/dom/IntersectionGeometry.h" #include "core/dom/TaskRunnerHelper.h" #include "core/dom/shadow/ShadowRoot.h" #include "core/events/Event.h" @@ -66,6 +65,7 @@ #include "core/html/track/VideoTrack.h" #include "core/html/track/VideoTrackList.h" #include "core/inspector/ConsoleMessage.h" +#include "core/layout/IntersectionGeometry.h" #include "core/layout/LayoutMedia.h" #include "core/layout/api/LayoutViewItem.h" #include "core/layout/compositing/PaintLayerCompositor.h" @@ -4069,9 +4069,9 @@ void HTMLMediaElement::checkViewportIntersectionChanged() { // TODO(xjz): Early return if we not in tab mirroring. - IntersectionGeometry geometry( - document().frame()->localFrameRoot()->document(), this, Vector<Length>(), - IntersectionGeometry::ReportRootBounds::kShouldReportRootBounds); + bool shouldReportRootBounds = true; + IntersectionGeometry geometry(nullptr, *this, Vector<Length>(), + shouldReportRootBounds); geometry.computeGeometry(); IntRect intersectRect = geometry.intersectionIntRect(); if (m_currentIntersectRect == intersectRect)
diff --git a/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp b/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp index 9873d8db..28b344e 100644 --- a/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp +++ b/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp
@@ -98,7 +98,7 @@ LocalFrame& frame = m_dummyPageHolder->frame(); frame.document()->shutdown(); DocumentInit init(KURL(), &frame); - frame.localDOMWindow()->installNewDocument("image/jpeg", init); + frame.domWindow()->installNewDocument("image/jpeg", init); } void ImageDocumentTest::createDocument(int viewWidth, int viewHeight) {
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn index fad269e2..24b609a 100644 --- a/third_party/WebKit/Source/core/layout/BUILD.gn +++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -39,6 +39,8 @@ "HitTestingTransformState.h", "ImageQualityController.cpp", "ImageQualityController.h", + "IntersectionGeometry.cpp", + "IntersectionGeometry.h", "LayoutAnalyzer.cpp", "LayoutAnalyzer.h", "LayoutBR.cpp",
diff --git a/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp b/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp new file mode 100644 index 0000000..8274879 --- /dev/null +++ b/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp
@@ -0,0 +1,215 @@ +// Copyright 2016 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 "core/layout/IntersectionGeometry.h" + +#include "core/frame/FrameView.h" +#include "core/frame/LocalFrame.h" +#include "core/html/HTMLFrameOwnerElement.h" +#include "core/layout/LayoutBox.h" +#include "core/layout/LayoutView.h" +#include "core/layout/api/LayoutAPIShim.h" +#include "core/layout/api/LayoutViewItem.h" +#include "core/paint/PaintLayer.h" + +namespace blink { + +namespace { + +bool isContainingBlockChainDescendant(LayoutObject* descendant, + LayoutObject* ancestor) { + LocalFrame* ancestorFrame = ancestor->document().frame(); + LocalFrame* descendantFrame = descendant->document().frame(); + if (ancestorFrame != descendantFrame) + return false; + + while (descendant && descendant != ancestor) + descendant = descendant->containingBlock(); + return descendant; +} + +void mapRectUpToDocument(LayoutRect& rect, + const LayoutObject& descendant, + const Document& document) { + FloatQuad mappedQuad = descendant.localToAncestorQuad( + FloatQuad(FloatRect(rect)), document.layoutView(), + UseTransforms | ApplyContainerFlip); + rect = LayoutRect(mappedQuad.boundingBox()); +} + +void mapRectDownToDocument(LayoutRect& rect, + LayoutBoxModelObject* ancestor, + const Document& document) { + FloatQuad mappedQuad = document.layoutView()->ancestorToLocalQuad( + ancestor, FloatQuad(FloatRect(rect)), + UseTransforms | ApplyContainerFlip | TraverseDocumentBoundaries); + rect = LayoutRect(mappedQuad.boundingBox()); +} + +LayoutUnit computeMargin(const Length& length, LayoutUnit referenceLength) { + if (length.type() == Percent) { + return LayoutUnit( + static_cast<int>(referenceLength.toFloat() * length.percent() / 100.0)); + } + DCHECK_EQ(length.type(), Fixed); + return LayoutUnit(length.intValue()); +} + +LayoutView* localRootView(Element& element) { + LocalFrame* frame = element.document().frame(); + LocalFrame* frameRoot = frame ? frame->localFrameRoot() : nullptr; + return frameRoot ? frameRoot->contentLayoutObject() : nullptr; +} + +} // namespace + +IntersectionGeometry::IntersectionGeometry(Element* root, + Element& target, + const Vector<Length>& rootMargin, + bool shouldReportRootBounds) + : m_root(root ? root->layoutObject() : localRootView(target)), + m_target(target.layoutObject()), + m_rootMargin(rootMargin), + m_doesIntersect(0), + m_shouldReportRootBounds(shouldReportRootBounds), + m_rootIsImplicit(!root), + m_canComputeGeometry(initializeCanComputeGeometry(root, target)) { + if (m_canComputeGeometry) + initializeGeometry(); +} + +IntersectionGeometry::~IntersectionGeometry() {} + +bool IntersectionGeometry::initializeCanComputeGeometry(Element* root, + Element& target) const { + DCHECK(m_rootMargin.isEmpty() || m_rootMargin.size() == 4); + if (root && !root->isConnected()) + return false; + if (!m_root || !m_root->isBox()) + return false; + if (!target.isConnected()) + return false; + if (!m_target || (!m_target->isBoxModelObject() && !m_target->isText())) + return false; + if (root && !isContainingBlockChainDescendant(m_target, m_root)) + return false; + return true; +} + +void IntersectionGeometry::initializeGeometry() { + initializeTargetRect(); + m_intersectionRect = m_targetRect; + initializeRootRect(); +} + +void IntersectionGeometry::initializeTargetRect() { + m_targetRect = + LayoutRect(toLayoutBoxModelObject(target())->borderBoundingBox()); +} + +void IntersectionGeometry::initializeRootRect() { + // TODO(szager): In OOPIF, m_root will be the LayoutView of the + // localFrameRoot(). Once viewport intersection support lands, + // add a call to mapToVisualRectInAncestorSpace to map the rect up to + // top-level frame coordinates. + if (m_root->isLayoutView()) { + m_rootRect = + LayoutRect(toLayoutView(m_root)->frameView()->visibleContentRect()); + } else if (m_root->isBox() && m_root->hasOverflowClip()) { + m_rootRect = LayoutRect(toLayoutBox(m_root)->contentBoxRect()); + } else { + m_rootRect = + LayoutRect(toLayoutBoxModelObject(m_root)->borderBoundingBox()); + } + applyRootMargin(); +} + +void IntersectionGeometry::applyRootMargin() { + if (m_rootMargin.isEmpty()) + return; + + // TODO(szager): Make sure the spec is clear that left/right margins are + // resolved against width and not height. + LayoutUnit topMargin = computeMargin(m_rootMargin[0], m_rootRect.height()); + LayoutUnit rightMargin = computeMargin(m_rootMargin[1], m_rootRect.width()); + LayoutUnit bottomMargin = computeMargin(m_rootMargin[2], m_rootRect.height()); + LayoutUnit leftMargin = computeMargin(m_rootMargin[3], m_rootRect.width()); + + m_rootRect.setX(m_rootRect.x() - leftMargin); + m_rootRect.setWidth(m_rootRect.width() + leftMargin + rightMargin); + m_rootRect.setY(m_rootRect.y() - topMargin); + m_rootRect.setHeight(m_rootRect.height() + topMargin + bottomMargin); +} + +void IntersectionGeometry::clipToRoot() { + // Map and clip rect into root element coordinates. + // TODO(szager): the writing mode flipping needs a test. + // TODO(szager): Once the OOPIF viewport intersection code lands, + // use nullptr for ancestor to map to the top frame. + LayoutBox* ancestor = toLayoutBox(m_root); + m_doesIntersect = m_target->mapToVisualRectInAncestorSpace( + ancestor, m_intersectionRect, EdgeInclusive); + if (ancestor && ancestor->hasOverflowClip()) + m_intersectionRect.move(-ancestor->scrolledContentOffset()); + if (!m_doesIntersect) + return; + LayoutRect rootClipRect(m_rootRect); + if (ancestor) + ancestor->flipForWritingMode(rootClipRect); + m_doesIntersect &= m_intersectionRect.inclusiveIntersect(rootClipRect); +} + +void IntersectionGeometry::mapTargetRectToTargetFrameCoordinates() { + Document& targetDocument = m_target->document(); + LayoutSize scrollPosition = + LayoutSize(targetDocument.view()->getScrollOffset()); + mapRectUpToDocument(m_targetRect, *m_target, targetDocument); + m_targetRect.move(-scrollPosition); +} + +void IntersectionGeometry::mapRootRectToRootFrameCoordinates() { + Document& rootDocument = m_root->document(); + if (!rootIsImplicit()) + mapRectUpToDocument(m_rootRect, *m_root, rootDocument); + // TODO(szager): When OOPIF support lands, this scroll offset adjustment + // will probably be wrong. + LayoutSize scrollPosition = + LayoutSize(rootDocument.view()->getScrollOffset()); + m_rootRect.move(-scrollPosition); +} + +void IntersectionGeometry::mapIntersectionRectToTargetFrameCoordinates() { + Document& targetDocument = m_target->document(); + if (rootIsImplicit()) { + LocalFrame* targetFrame = targetDocument.frame(); + Frame* rootFrame = targetFrame->tree().top(); + LayoutSize scrollPosition = + LayoutSize(targetDocument.view()->getScrollOffset()); + if (targetFrame != rootFrame) + mapRectDownToDocument(m_intersectionRect, nullptr, targetDocument); + m_intersectionRect.move(-scrollPosition); + } else { + LayoutSize scrollPosition = + LayoutSize(targetDocument.view()->getScrollOffset()); + mapRectUpToDocument(m_intersectionRect, *m_root, m_root->document()); + m_intersectionRect.move(-scrollPosition); + } +} + +void IntersectionGeometry::computeGeometry() { + if (!canComputeGeometry()) + return; + clipToRoot(); + mapTargetRectToTargetFrameCoordinates(); + if (m_doesIntersect) + mapIntersectionRectToTargetFrameCoordinates(); + else + m_intersectionRect = LayoutRect(); + // Small optimization: if we're not going to report root bounds, don't bother + // transforming them to the frame. + if (shouldReportRootBounds()) + mapRootRectToRootFrameCoordinates(); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/IntersectionGeometry.h b/third_party/WebKit/Source/core/layout/IntersectionGeometry.h new file mode 100644 index 0000000..6244ddd --- /dev/null +++ b/third_party/WebKit/Source/core/layout/IntersectionGeometry.h
@@ -0,0 +1,88 @@ +// Copyright 2016 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 IntersectionGeometry_h +#define IntersectionGeometry_h + +#include "platform/Length.h" +#include "platform/geometry/LayoutRect.h" +#include "platform/heap/Handle.h" +#include "wtf/Vector.h" + +namespace blink { + +class Element; +class LayoutObject; + +// Computes the intersection between an ancestor (root) element and a +// descendant (target) element, with overflow and CSS clipping applied, but not +// paint occlusion. +// +// If the root argument to the constructor is null, computes the intersection +// of the target with the top-level frame viewport (AKA the "implicit root"). +class IntersectionGeometry { + STACK_ALLOCATED() + public: + IntersectionGeometry(Element* root, + Element& target, + const Vector<Length>& rootMargin, + bool shouldReportRootBounds); + ~IntersectionGeometry(); + + void computeGeometry(); + + LayoutObject* root() const { return m_root; } + LayoutObject* target() const { return m_target; } + + // Client rect in the coordinate system of the frame containing target. + LayoutRect targetRect() const { return m_targetRect; } + + // Client rect in the coordinate system of the frame containing target. + LayoutRect intersectionRect() const { return m_intersectionRect; } + + // Client rect in the coordinate system of the frame containing root. + LayoutRect rootRect() const { return m_rootRect; } + + bool doesIntersect() const { return m_doesIntersect; } + + IntRect intersectionIntRect() const { + return pixelSnappedIntRect(m_intersectionRect); + } + + IntRect targetIntRect() const { return pixelSnappedIntRect(m_targetRect); } + + IntRect rootIntRect() const { return pixelSnappedIntRect(m_rootRect); } + + private: + bool initializeCanComputeGeometry(Element* root, Element& target) const; + void initializeGeometry(); + void initializeTargetRect(); + void initializeRootRect(); + void clipToRoot(); + void mapTargetRectToTargetFrameCoordinates(); + void mapRootRectToRootFrameCoordinates(); + void mapIntersectionRectToTargetFrameCoordinates(); + void applyRootMargin(); + + // Returns true iff it's possible to compute an intersection between root + // and target. + bool canComputeGeometry() const { return m_canComputeGeometry; } + bool rootIsImplicit() const { return m_rootIsImplicit; } + bool shouldReportRootBounds() const { return m_shouldReportRootBounds; } + + LayoutObject* m_root; + LayoutObject* m_target; + const Vector<Length> m_rootMargin; + LayoutRect m_targetRect; + LayoutRect m_intersectionRect; + LayoutRect m_rootRect; + unsigned m_doesIntersect : 1; + const unsigned m_shouldReportRootBounds : 1; + const unsigned m_rootIsImplicit : 1; + const unsigned m_canComputeGeometry : 1; +}; + +} // namespace blink + +#endif // IntersectionGeometry_h
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp index 03b3619..da28bc8 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -1709,10 +1709,10 @@ LayoutObject* prev = child.previousSibling(); LayoutBlockFlow* previousBlockFlow = - prev && prev->isLayoutBlockFlow() && - !prev->isFloatingOrOutOfFlowPositioned() - ? toLayoutBlockFlow(prev) - : 0; + prev && prev->isLayoutBlockFlow() ? toLayoutBlockFlow(prev) : nullptr; + bool previousBlockFlowCanSelfCollapse = + previousBlockFlow && + !previousBlockFlow->isFloatingOrOutOfFlowPositioned(); // If the child's previous sibling is a self-collapsing block that cleared a // float then its top border edge has been set at the bottom border edge of // the float. Since we want to collapse the child's top margin with the self- @@ -1720,7 +1720,8 @@ // height to match the margin top of the self-collapsing block. If the // resulting collapsed margin leaves the child still intruding into the float // then we will want to clear it. - if (!marginInfo.canCollapseWithMarginBefore() && previousBlockFlow && + if (!marginInfo.canCollapseWithMarginBefore() && + previousBlockFlowCanSelfCollapse && marginInfo.lastChildIsSelfCollapsingBlockWithClearance()) setLogicalHeight( logicalHeight() - @@ -1801,18 +1802,28 @@ setLogicalHeight(logicalHeight() + (logicalTop - oldLogicalTop)); } - if (previousBlockFlow) { - // If |child| is a self-collapsing block it may have collapsed into a - // previous sibling and although it hasn't reduced the height of the parent - // yet any floats from the parent will now overhang. + // If |child| has moved up into previous siblings it needs to avoid or clear + // any floats they contain. + if (logicalTop < beforeCollapseLogicalTop) { LayoutUnit oldLogicalHeight = logicalHeight(); setLogicalHeight(logicalTop); - if (!previousBlockFlow->avoidsFloats() && - (previousBlockFlow->logicalTop() + - previousBlockFlow->lowestFloatLogicalBottom()) > logicalTop) - addOverhangingFloats(previousBlockFlow, false); + while (previousBlockFlow) { + auto lowestFloat = previousBlockFlow->logicalTop() + + previousBlockFlow->lowestFloatLogicalBottom(); + if (lowestFloat > logicalTop) + addOverhangingFloats(previousBlockFlow, false); + else + break; + LayoutObject* prev = previousBlockFlow->previousSibling(); + if (prev && prev->isLayoutBlockFlow()) + previousBlockFlow = toLayoutBlockFlow(prev); + else + previousBlockFlow = nullptr; + } setLogicalHeight(oldLogicalHeight); + } + if (previousBlockFlowCanSelfCollapse) { // If |child|'s previous sibling is or contains a self-collapsing block that // cleared a float and margin collapsing resulted in |child| moving up // into the margin area of the self-collapsing block then the float it
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp index 894f7d8..f061939e 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -2257,6 +2257,13 @@ return false; } + // If the box paints into its own backing, we can assume that it's painting + // may have some effect. For example, honoring the border-radius clip on + // a composited child paints into a mask for an otherwise non-painting + // element, because children of that element will require the mask. + if (hasLayer() && layer()->compositingState() == PaintsIntoOwnBacking) + return false; + return true; } @@ -4720,6 +4727,7 @@ // just marking and bailing here. if (child.isFloating()) return true; + const LayoutFlowThread* flowThread = child.flowThreadContainingBlock(); LayoutUnit logicalTop = child.logicalTop(); // Figure out if we really need to force re-layout of the child. We only need // to do this if there's a chance that we need to recalculate pagination @@ -4733,6 +4741,10 @@ // location as before. if (child.offsetToNextPage() != remainingSpace) return true; + // If column height isn't guaranteed to be uniform, we have no way of + // telling what has happened after the first break. + if (flowThread && flowThread->mayHaveNonUniformPageLogicalHeight()) + return true; } else if (logicalHeight > remainingSpace) { // Last time we laid out this child, we didn't need to break, but now we // have to. So we need to relayout. @@ -4747,7 +4759,6 @@ // It seems that we can skip layout of this child, but we need to ask the flow // thread for permission first. We currently cannot skip over objects // containing column spanners. - LayoutFlowThread* flowThread = child.flowThreadContainingBlock(); return flowThread && !flowThread->canSkipLayout(child); }
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlowThread.h b/third_party/WebKit/Source/core/layout/LayoutFlowThread.h index 594eafd9..354991c 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFlowThread.h +++ b/third_party/WebKit/Source/core/layout/LayoutFlowThread.h
@@ -141,6 +141,7 @@ LayoutUnit contentLogicalHeight) const; virtual bool isPageLogicalHeightKnown() const { return true; } + virtual bool mayHaveNonUniformPageLogicalHeight() const = 0; bool pageLogicalSizeChanged() const { return m_pageLogicalSizeChanged; } // Return the visual bounding box based on the supplied flow-thread bounding
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp index 807fe96..f532eda6 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
@@ -365,6 +365,15 @@ return false; } +bool LayoutMultiColumnFlowThread::mayHaveNonUniformPageLogicalHeight() const { + const LayoutMultiColumnSet* columnSet = firstMultiColumnSet(); + if (!columnSet) + return false; + if (columnSet->nextSiblingMultiColumnSet()) + return true; + return enclosingFragmentationContext(); +} + LayoutSize LayoutMultiColumnFlowThread::flowThreadTranslationAtOffset( LayoutUnit offsetInFlowThread, PageBoundaryRule rule,
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h index a1ad047..8264eb4 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h
@@ -216,6 +216,7 @@ virtual bool needsNewWidth() const; bool isPageLogicalHeightKnown() const final; + bool mayHaveNonUniformPageLogicalHeight() const final; LayoutSize flowThreadTranslationAtOffset(LayoutUnit, PageBoundaryRule,
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp index d238b39..2d831e1e 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -202,7 +202,7 @@ } } - updateClippingLayers(false, false); + updateClippingLayers(false, false, false); updateOverflowControlsLayers(false, false, false, false); updateChildTransformLayer(false); updateForegroundLayer(false); @@ -246,6 +246,7 @@ m_graphicsLayer->removeFromParent(); m_ancestorClippingLayer = nullptr; + m_ancestorClippingMaskLayer = nullptr; m_graphicsLayer = nullptr; m_foregroundLayer = nullptr; m_backgroundLayer = nullptr; @@ -472,29 +473,34 @@ m_owningLayer.getSquashingDisallowedReasons()); } -bool CompositedLayerMapping:: - owningLayerClippedByLayerNotAboveCompositedAncestor( - const PaintLayer* scrollParent) { +void CompositedLayerMapping:: + owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( + const PaintLayer* scrollParent, + bool& owningLayerIsClipped, + bool& owningLayerIsMasked) { + owningLayerIsClipped = false; + owningLayerIsMasked = false; + if (!m_owningLayer.parent()) - return false; + return; const PaintLayer* compositingAncestor = m_owningLayer.enclosingLayerWithCompositedLayerMapping(ExcludeSelf); if (!compositingAncestor) - return false; + return; const LayoutObject* clippingContainer = m_owningLayer.clippingContainer(); if (!clippingContainer) - return false; + return; if (clippingContainer->enclosingLayer() == scrollParent) - return false; + return; if (clippingContainer->enclosingLayer()->hasRootScrollerAsDescendant()) - return false; + return; if (compositingAncestor->layoutObject()->isDescendantOf(clippingContainer)) - return false; + return; // We ignore overflow clip here; we want composited overflow content to // behave as if it lives in an unclipped universe so it can prepaint, etc. @@ -509,7 +515,14 @@ clipRectsContext.setIgnoreOverflowClip(); IntRect parentClipRect = pixelSnappedIntRect( m_owningLayer.clipper().backgroundClipRect(clipRectsContext).rect()); - return parentClipRect != LayoutRect::infiniteIntRect(); + owningLayerIsClipped = parentClipRect != LayoutRect::infiniteIntRect(); + + // TODO(schenney): CSS clips are not applied to composited children, and + // should be via mask or by compositing the parent too. + // https://bugs.chromium.org/p/chromium/issues/detail?id=615870 + DCHECK(clippingContainer->style()); + owningLayerIsMasked = + owningLayerIsClipped && clippingContainer->style()->hasBorderRadius(); } const PaintLayer* CompositedLayerMapping::scrollParent() { @@ -565,10 +578,12 @@ // layoutObject hierarchy, but a sibling in the z-order hierarchy. Further, // that sibling need not be composited at all. In such scenarios, an ancestor // clipping layer is necessary to apply the composited clip for this layer. - bool needsAncestorClip = - owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent); - - if (updateClippingLayers(needsAncestorClip, needsDescendantsClippingLayer)) + bool needsAncestorClip = false; + bool needsAncestorClippingMask = false; + owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( + scrollParent, needsAncestorClip, needsAncestorClippingMask); + if (updateClippingLayers(needsAncestorClip, needsAncestorClippingMask, + needsDescendantsClippingLayer)) layerConfigChanged = true; bool scrollingConfigChanged = false; @@ -1100,6 +1115,13 @@ m_ancestorClippingLayer->setOffsetFromLayoutObject( parentClipRect.location() - snappedOffsetFromCompositedAncestor); + if (m_ancestorClippingMaskLayer) { + m_ancestorClippingMaskLayer->setOffsetFromLayoutObject( + m_ancestorClippingLayer->offsetFromLayoutObject()); + m_ancestorClippingMaskLayer->setSize(m_ancestorClippingLayer->size()); + m_ancestorClippingMaskLayer->setNeedsDisplay(); + } + // The primary layer is then parented in, and positioned relative to this // clipping layer. graphicsLayerParentLocation = parentClipRect.location(); @@ -1651,6 +1673,9 @@ if (m_decorationOutlineLayer) m_decorationOutlineLayer->setDrawsContent(true); + if (m_ancestorClippingMaskLayer) + m_ancestorClippingMaskLayer->setDrawsContent(true); + if (m_maskLayer) m_maskLayer->setDrawsContent(true); @@ -1668,8 +1693,10 @@ } // Return true if the layers changed. -bool CompositedLayerMapping::updateClippingLayers(bool needsAncestorClip, - bool needsDescendantClip) { +bool CompositedLayerMapping::updateClippingLayers( + bool needsAncestorClip, + bool needsAncestorClippingMask, + bool needsDescendantClip) { bool layersChanged = false; if (needsAncestorClip) { @@ -1681,11 +1708,32 @@ layersChanged = true; } } else if (m_ancestorClippingLayer) { + if (m_ancestorClippingMaskLayer) { + m_ancestorClippingMaskLayer->removeFromParent(); + m_ancestorClippingMaskLayer = nullptr; + } m_ancestorClippingLayer->removeFromParent(); m_ancestorClippingLayer = nullptr; layersChanged = true; } + if (needsAncestorClippingMask) { + DCHECK(m_ancestorClippingLayer); + if (!m_ancestorClippingMaskLayer) { + m_ancestorClippingMaskLayer = + createGraphicsLayer(CompositingReasonLayerForAncestorClippingMask); + m_ancestorClippingMaskLayer->setPaintingPhase( + GraphicsLayerPaintAncestorClippingMask); + m_ancestorClippingLayer->setMaskLayer(m_ancestorClippingMaskLayer.get()); + layersChanged = true; + } + } else if (m_ancestorClippingMaskLayer) { + m_ancestorClippingMaskLayer->removeFromParent(); + m_ancestorClippingMaskLayer = nullptr; + m_ancestorClippingLayer->setMaskLayer(nullptr); + layersChanged = true; + } + if (needsDescendantClip) { // We don't need a child containment layer if we're the main frame layout // view layer. It's redundant as the frame clip above us will handle this @@ -1915,6 +1963,10 @@ (mode & ApplyToNonScrollingContentLayers)) && mapping->childClippingMaskLayer()) f(mapping->childClippingMaskLayer()); + if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) || + (mode & ApplyToNonScrollingContentLayers)) && + mapping->ancestorClippingMaskLayer()) + f(mapping->ancestorClippingMaskLayer()); if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers) || (mode & ApplyToNonScrollingContentLayers)) && @@ -1950,7 +2002,7 @@ // Some compositing reasons depend on the compositing state of ancestors. So // if we want a rendering context id for the context root, we cannot ask for // the id of its associated WebLayer now; it may not have one yet. We could do - // a second past after doing the compositing updates to get these ids, but + // a second pass after doing the compositing updates to get these ids, but // this would actually be harmful. We do not want to attach any semantic // meaning to the context id other than the fact that they group a number of // layers together for the sake of 3d sorting. So instead we will ask the @@ -2254,7 +2306,11 @@ void CompositedLayerMapping::updateClipParent(const PaintLayer* scrollParent) { const PaintLayer* clipParent = nullptr; - if (!owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent)) { + bool haveAncestorClipLayer = false; + bool haveAncestorMaskLayer = false; + owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( + scrollParent, haveAncestorClipLayer, haveAncestorMaskLayer); + if (!haveAncestorClipLayer) { clipParent = m_owningLayer.clipParent(); if (clipParent) clipParent = @@ -2794,6 +2850,8 @@ if (!(paintLayerFlags & PaintLayerPaintingOverflowContents)) { LayoutRect bounds = paintInfo.compositedBounds; bounds.move(paintInfo.paintLayer->subpixelAccumulation()); + if (paintLayerFlags & PaintLayerPaintingAncestorClippingMaskPhase) + bounds.move(offset); dirtyRect.intersect(pixelSnappedIntRect(bounds)); } else { dirtyRect.move( @@ -3071,6 +3129,8 @@ paintLayerFlags |= PaintLayerPaintingCompositingMaskPhase; if (graphicsLayerPaintingPhase & GraphicsLayerPaintChildClippingMask) paintLayerFlags |= PaintLayerPaintingChildClippingMaskPhase; + if (graphicsLayerPaintingPhase & GraphicsLayerPaintAncestorClippingMask) + paintLayerFlags |= PaintLayerPaintingAncestorClippingMaskPhase; if (graphicsLayerPaintingPhase & GraphicsLayerPaintOverflowContents) paintLayerFlags |= PaintLayerPaintingOverflowContents; if (graphicsLayerPaintingPhase & GraphicsLayerPaintCompositedScroll) @@ -3090,7 +3150,8 @@ graphicsLayer == m_maskLayer.get() || graphicsLayer == m_childClippingMaskLayer.get() || graphicsLayer == m_scrollingContentsLayer.get() || - graphicsLayer == m_decorationOutlineLayer.get()) { + graphicsLayer == m_decorationOutlineLayer.get() || + graphicsLayer == m_ancestorClippingMaskLayer.get()) { bool paintRootBackgroundOntoScrollingContentsLayer = m_backgroundPaintsOntoScrollingContentsLayer; DCHECK(!paintRootBackgroundOntoScrollingContentsLayer || @@ -3345,6 +3406,8 @@ ")"; } else if (graphicsLayer == m_ancestorClippingLayer.get()) { name = "Ancestor Clipping Layer"; + } else if (graphicsLayer == m_ancestorClippingMaskLayer.get()) { + name = "Ancestor Clipping Mask Layer"; } else if (graphicsLayer == m_foregroundLayer.get()) { name = m_owningLayer.debugName() + " (foreground) Layer"; } else if (graphicsLayer == m_backgroundLayer.get()) {
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h index 6ee087cb..3e98bde 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
@@ -117,6 +117,10 @@ return m_ancestorClippingLayer.get(); } + GraphicsLayer* ancestorClippingMaskLayer() const { + return m_ancestorClippingMaskLayer.get(); + } + GraphicsLayer* foregroundLayer() const { return m_foregroundLayer.get(); } GraphicsLayer* backgroundLayer() const { return m_backgroundLayer.get(); } @@ -383,6 +387,9 @@ void updateInternalHierarchy(); void updatePaintingPhases(); bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); + bool updateClippingLayers(bool needsAncestorClip, + bool needsAncestorClippingMask, + bool needsDescendantClip); bool updateChildTransformLayer(bool needsChildTransformLayer); bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool needsVerticalScrollbarLayer, @@ -477,10 +484,16 @@ const GraphicsLayerPaintInfo&, const Vector<GraphicsLayerPaintInfo>& layers); - // Return true if |m_owningLayer|'s compositing ancestor is not a descendant - // (inclusive) of the clipping container for |m_owningLayer|. - bool owningLayerClippedByLayerNotAboveCompositedAncestor( - const PaintLayer* scrollParent); + // Return true in |owningLayerIsClipped| iff |m_owningLayer|'s compositing + // ancestor is not a descendant (inclusive) of the clipping container for + // |m_owningLayer|. Return true in |owningLayerIsMasked| iff + // |owningLayerIsClipped| is true and |m_owningLayer|'s compositing ancestor + // is not a descendant (inclusive) of a container that applies a mask for + // |m_owningLayer|. + void owningLayerClippedOrMaskedByLayerNotAboveCompositedAncestor( + const PaintLayer* scrollParent, + bool& owningLayerIsClipped, + bool& owningLayerIsMasked); const PaintLayer* scrollParent(); @@ -529,9 +542,20 @@ // In this case B is clipped by another layer that doesn't happen to be its // ancestor: A. So we create an ancestor clipping layer for B, [+], which // ensures that B is clipped as if it had been A's descendant. + // In addition, the m_ancestorClippingLayer will have an associated + // mask layer if the ancestor, A, has a border radius that requires a + // rounded corner clip rect. The mask is not part of the layer tree; rather + // it is attached to the m_ancestorClippingLayer itself. + // + // Layers that require a CSS mask also have a mask layer attached to them. // Only used if we are clipped by an ancestor which is not a stacking context. std::unique_ptr<GraphicsLayer> m_ancestorClippingLayer; + + // Only used is there is an m_ancestorClippingLayer that also needs to apply + // a clipping mask (for CSS clips or border radius). + std::unique_ptr<GraphicsLayer> m_ancestorClippingMaskLayer; + std::unique_ptr<GraphicsLayer> m_graphicsLayer; // Only used if we have clipping on a stacking context with compositing
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp index b5087ac..f20e8160 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
@@ -1084,4 +1084,85 @@ } } +TEST_P(CompositedLayerMappingTest, AncestorClippingMaskLayerUpdates) { + setBodyInnerHTML( + "<style>" + "#ancestor { width: 100px; height: 100px; overflow: hidden; }" + "#child { width: 120px; height: 120px; background-color: green; }" + "</style>" + "<div id='ancestor'><div id='child'></div></div>"); + document().view()->updateAllLifecyclePhases(); + + Element* ancestor = document().getElementById("ancestor"); + ASSERT_TRUE(ancestor); + PaintLayer* ancestorPaintLayer = + toLayoutBoxModelObject(ancestor->layoutObject())->layer(); + ASSERT_TRUE(ancestorPaintLayer); + + CompositedLayerMapping* ancestorMapping = + ancestorPaintLayer->compositedLayerMapping(); + ASSERT_FALSE(ancestorMapping); + + Element* child = document().getElementById("child"); + ASSERT_TRUE(child); + PaintLayer* childPaintLayer = + toLayoutBoxModelObject(child->layoutObject())->layer(); + ASSERT_FALSE(childPaintLayer); + + // Making the child conposited causes creation of an AncestorClippingLayer. + child->setAttribute(HTMLNames::styleAttr, "will-change: transform"); + document().view()->updateAllLifecyclePhases(); + + childPaintLayer = toLayoutBoxModelObject(child->layoutObject())->layer(); + ASSERT_TRUE(childPaintLayer); + CompositedLayerMapping* childMapping = + childPaintLayer->compositedLayerMapping(); + ASSERT_TRUE(childMapping); + EXPECT_TRUE(childMapping->ancestorClippingLayer()); + EXPECT_FALSE(childMapping->ancestorClippingLayer()->maskLayer()); + EXPECT_FALSE(childMapping->ancestorClippingMaskLayer()); + + // Adding border radius to the ancestor requires an + // ancestorClippingMaskLayer for the child + ancestor->setAttribute(HTMLNames::styleAttr, "border-radius: 40px;"); + document().view()->updateAllLifecyclePhases(); + + childPaintLayer = toLayoutBoxModelObject(child->layoutObject())->layer(); + ASSERT_TRUE(childPaintLayer); + childMapping = childPaintLayer->compositedLayerMapping(); + ASSERT_TRUE(childMapping); + EXPECT_TRUE(childMapping->ancestorClippingLayer()); + EXPECT_TRUE(childMapping->ancestorClippingLayer()->maskLayer()); + EXPECT_TRUE(childMapping->ancestorClippingMaskLayer()); + + // Removing the border radius should remove the ancestorClippingMaskLayer + // for the child + ancestor->setAttribute(HTMLNames::styleAttr, "border-radius: 0px;"); + document().view()->updateAllLifecyclePhases(); + + childPaintLayer = toLayoutBoxModelObject(child->layoutObject())->layer(); + ASSERT_TRUE(childPaintLayer); + childMapping = childPaintLayer->compositedLayerMapping(); + ASSERT_TRUE(childMapping); + EXPECT_TRUE(childMapping->ancestorClippingLayer()); + EXPECT_FALSE(childMapping->ancestorClippingLayer()->maskLayer()); + EXPECT_FALSE(childMapping->ancestorClippingMaskLayer()); + + // Add border radius back so we can test one more case + ancestor->setAttribute(HTMLNames::styleAttr, "border-radius: 40px;"); + document().view()->updateAllLifecyclePhases(); + + // Now change the overflow to remove the need for an ancestor clip + // on the child + ancestor->setAttribute(HTMLNames::styleAttr, "overflow: visible"); + document().view()->updateAllLifecyclePhases(); + + childPaintLayer = toLayoutBoxModelObject(child->layoutObject())->layer(); + ASSERT_TRUE(childPaintLayer); + childMapping = childPaintLayer->compositedLayerMapping(); + ASSERT_TRUE(childMapping); + EXPECT_FALSE(childMapping->ancestorClippingLayer()); + EXPECT_FALSE(childMapping->ancestorClippingMaskLayer()); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp index cd0ad37..06af2d1 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
@@ -148,6 +148,10 @@ return m_mainResource ? m_mainResource->identifier() : 0; } +ResourceTimingInfo* DocumentLoader::getNavigationTimingInfo() const { + return fetcher()->getNavigationTimingInfo(); +} + const ResourceRequest& DocumentLoader::originalRequest() const { return m_originalRequest; } @@ -764,8 +768,7 @@ if (!init.shouldReuseDefaultView()) frame->setDOMWindow(LocalDOMWindow::create(*frame)); - Document* document = - frame->localDOMWindow()->installNewDocument(mimeType, init); + Document* document = frame->domWindow()->installNewDocument(mimeType, init); if (!init.shouldReuseDefaultView()) frame->page()->chromeClient().installSupplements(*frame);
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.h b/third_party/WebKit/Source/core/loader/DocumentLoader.h index fd1ebf4..cf8dbc2 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.h +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.h
@@ -60,6 +60,7 @@ class DocumentInit; class LocalFrame; class FrameLoader; +class ResourceTimingInfo; class WebDocumentSubresourceFilter; struct ViewportDescriptionWrapper; @@ -79,6 +80,8 @@ LocalFrame* frame() const { return m_frame; } + ResourceTimingInfo* getNavigationTimingInfo() const; + virtual void detachFromFrame(); unsigned long mainResourceIdentifier() const;
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp index 928aa32..e6aa7c4 100644 --- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -322,9 +322,7 @@ InspectorInstrumentation:: documentThreadableLoaderFailedToStartLoadingForClient(m_document, m_client); - ThreadableLoaderClient* client = m_client; - clear(); - client->didFailAccessControlCheck(ResourceError( + dispatchDidFailAccessControlCheck(ResourceError( errorDomainBlinkInternal, 0, request.url().getString(), "Cross origin requests are only supported for protocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + ".")); @@ -334,9 +332,7 @@ // Non-secure origins may not make "external requests": // https://mikewest.github.io/cors-rfc1918/#integration-fetch if (!document().isSecureContext() && request.isExternalRequest()) { - ThreadableLoaderClient* client = m_client; - clear(); - client->didFailAccessControlCheck( + dispatchDidFailAccessControlCheck( ResourceError(errorDomainBlinkInternal, 0, request.url().getString(), "Requests to internal network resources are not allowed " "from non-secure contexts (see https://goo.gl/Y0ZkNV). " @@ -439,29 +435,20 @@ } void DocumentThreadableLoader::cancel() { - cancelWithError(ResourceError()); -} - -void DocumentThreadableLoader::cancelWithError(const ResourceError& error) { - // Cancel can re-enter and m_resource might be null here as a result. + // Cancel can re-enter, and therefore |resource()| might be null here as a + // result. if (!m_client || !resource()) { clear(); return; } - ResourceError errorForCallback = error; - if (errorForCallback.isNull()) { - // FIXME: This error is sent to the client in didFail(), so it should not be - // an internal one. Use FrameLoaderClient::cancelledError() instead. - errorForCallback = - ResourceError(errorDomainBlinkInternal, 0, - resource()->url().getString(), "Load cancelled"); - errorForCallback.setIsCancellation(true); - } + // FIXME: This error is sent to the client in didFail(), so it should not be + // an internal one. Use FrameLoaderClient::cancelledError() instead. + ResourceError error(errorDomainBlinkInternal, 0, resource()->url(), + "Load cancelled"); + error.setIsCancellation(true); - ThreadableLoaderClient* client = m_client; - clear(); - client->didFail(errorForCallback); + dispatchDidFail(error); } void DocumentThreadableLoader::setDefersLoading(bool value) { @@ -580,9 +567,7 @@ } if (!allowRedirect) { - ThreadableLoaderClient* client = m_client; - clear(); - client->didFailAccessControlCheck(ResourceError( + dispatchDidFailAccessControlCheck(ResourceError( errorDomainBlinkInternal, 0, redirectResponse.url().getString(), accessControlErrorDescription)); return false; @@ -809,9 +794,7 @@ accessControlErrorDescription, m_requestContext)) { reportResponseReceived(identifier, response); - ThreadableLoaderClient* client = m_client; - clear(); - client->didFailAccessControlCheck( + dispatchDidFailAccessControlCheck( ResourceError(errorDomainBlinkInternal, 0, response.url().getString(), accessControlErrorDescription)); return; @@ -868,7 +851,7 @@ m_checker.notifyFinished(resource); if (resource->errorOccurred()) { - handleError(resource->resourceError()); + dispatchDidFail(resource->resourceError()); } else { handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime()); } @@ -897,7 +880,16 @@ } void DocumentThreadableLoader::didTimeout(TimerBase* timer) { + DCHECK(m_async); DCHECK_EQ(timer, &m_timeoutTimer); + // clearResource() may be called in clear() and some other places. clear() + // calls stop() on |m_timeoutTimer|. In the other places, the resource is set + // again. If the creation fails, clear() is called. So, here, resource() is + // always non-nullptr. + DCHECK(resource()); + // When |m_client| is set to nullptr only in clear() where |m_timeoutTimer| + // is stopped. So, |m_client| is always non-nullptr here. + DCHECK(m_client); // Using values from net/base/net_error_list.h ERR_TIMED_OUT, Same as existing // FIXME above - this error should be coming from FrameLoaderClient to be @@ -905,7 +897,8 @@ static const int timeoutError = -7; ResourceError error("net", timeoutError, resource()->url(), String()); error.setIsTimeout(true); - cancelWithError(error); + + dispatchDidFail(error); } void DocumentThreadableLoader::loadFallbackRequestForServiceWorker() { @@ -941,12 +934,17 @@ // Prevent handleSuccessfulFinish() from bypassing access check. m_actualRequest = ResourceRequest(); + dispatchDidFailAccessControlCheck(error); +} + +void DocumentThreadableLoader::dispatchDidFailAccessControlCheck( + const ResourceError& error) { ThreadableLoaderClient* client = m_client; clear(); client->didFailAccessControlCheck(error); } -void DocumentThreadableLoader::handleError(const ResourceError& error) { +void DocumentThreadableLoader::dispatchDidFail(const ResourceError& error) { ThreadableLoaderClient* client = m_client; clear(); client->didFail(error);
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h index 8af7fc9..bf1fb5c 100644 --- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h +++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h
@@ -110,8 +110,6 @@ void dataDownloaded(Resource*, int) override; void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) override; - void cancelWithError(const ResourceError&); - // Notify Inspector and log to console about resource response. Use this // method if response is not going to be finished normally. void reportResponseReceived(unsigned long identifier, @@ -142,7 +140,9 @@ // Investigates the response for the preflight request. If successful, // the actual request will be made later in handleSuccessfulFinish(). void handlePreflightResponse(const ResourceResponse&); - void handleError(const ResourceError&); + + void dispatchDidFailAccessControlCheck(const ResourceError&); + void dispatchDidFail(const ResourceError&); void loadRequestAsync(const ResourceRequest&, ResourceLoaderOptions); void loadRequestSync(const ResourceRequest&, ResourceLoaderOptions);
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp index 4cbd51b..9c3c745 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -747,7 +747,7 @@ restoreScrollPositionAndViewState(); m_loadType = FrameLoadTypeStandard; - m_frame->localDOMWindow()->finishedLoading(); + m_frame->domWindow()->finishedLoading(); } Frame* parent = m_frame->tree().parent(); @@ -870,7 +870,7 @@ // If we were in the autoscroll/middleClickAutoscroll mode we want to stop // it before following the link to the anchor m_frame->eventHandler().stopAutoscroll(); - m_frame->localDOMWindow()->enqueueHashchangeEvent(oldURL, url); + m_frame->domWindow()->enqueueHashchangeEvent(oldURL, url); } m_documentLoader->setIsClientRedirect(clientRedirect == ClientRedirectPolicy::ClientRedirect); @@ -882,9 +882,9 @@ checkCompleted(); - m_frame->localDOMWindow()->statePopped( - stateObject ? std::move(stateObject) - : SerializedScriptValue::nullValue()); + m_frame->domWindow()->statePopped(stateObject + ? std::move(stateObject) + : SerializedScriptValue::nullValue()); if (historyLoadType == HistorySameDocumentLoad) restoreScrollPositionAndViewState();
diff --git a/third_party/WebKit/Source/core/loader/FrameLoaderClient.h b/third_party/WebKit/Source/core/loader/FrameLoaderClient.h index 79694244..c445ac17 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoaderClient.h +++ b/third_party/WebKit/Source/core/loader/FrameLoaderClient.h
@@ -342,6 +342,8 @@ // Overwrites the given URL to use an HTML5 embed if possible. An empty URL is // returned if the URL is not overriden. virtual KURL overrideFlashEmbedWithHTML(const KURL&) { return KURL(); } + + virtual BlameContext* frameBlameContext() { return nullptr; } }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/PingLoader.cpp b/third_party/WebKit/Source/core/loader/PingLoader.cpp index d32a134..956cc97 100644 --- a/third_party/WebKit/Source/core/loader/PingLoader.cpp +++ b/third_party/WebKit/Source/core/loader/PingLoader.cpp
@@ -187,9 +187,7 @@ }; class PingLoaderImpl : public GarbageCollectedFinalized<PingLoaderImpl>, - public DOMWindowProperty, private WebURLLoaderClient { - USING_GARBAGE_COLLECTED_MIXIN(PingLoaderImpl); WTF_MAKE_NONCOPYABLE(PingLoaderImpl); public: @@ -216,6 +214,7 @@ void didFailLoading(LocalFrame*); + WeakMember<LocalFrame> m_frame; std::unique_ptr<WebURLLoader> m_loader; Timer<PingLoaderImpl> m_timeout; String m_url; @@ -233,7 +232,7 @@ const AtomicString& initiator, StoredCredentials credentialsAllowed, bool isBeacon) - : DOMWindowProperty(frame), + : m_frame(frame), m_timeout(this, &PingLoaderImpl::timeout), m_url(request.url()), m_identifier(createUniqueIdentifier()), @@ -313,9 +312,9 @@ if (!CrossOriginAccessControl::handleRedirect( m_origin, newRequest, redirectResponse, AllowStoredCredentials, options, errorDescription)) { - if (LocalFrame* localFrame = frame()) { - if (localFrame->document()) { - localFrame->document()->addConsoleMessage(ConsoleMessage::create( + if (m_frame) { + if (m_frame->document()) { + m_frame->document()->addConsoleMessage(ConsoleMessage::create( JSMessageSource, ErrorMessageLevel, errorDescription)); } } @@ -331,31 +330,31 @@ } void PingLoaderImpl::didReceiveResponse(const WebURLResponse& response) { - if (LocalFrame* frame = this->frame()) { + if (m_frame) { TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); const ResourceResponse& resourceResponse = response.toResourceResponse(); - InspectorInstrumentation::didReceiveResourceResponse(frame, m_identifier, 0, - resourceResponse, 0); - didFailLoading(frame); + InspectorInstrumentation::didReceiveResourceResponse( + m_frame, m_identifier, 0, resourceResponse, 0); + didFailLoading(m_frame); } dispose(); } void PingLoaderImpl::didReceiveData(const char*, int) { - if (LocalFrame* frame = this->frame()) { + if (m_frame) { TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); - didFailLoading(frame); + didFailLoading(m_frame); } dispose(); } void PingLoaderImpl::didFinishLoading(double, int64_t, int64_t) { - if (LocalFrame* frame = this->frame()) { + if (m_frame) { TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); - didFailLoading(frame); + didFailLoading(m_frame); } dispose(); } @@ -363,19 +362,19 @@ void PingLoaderImpl::didFail(const WebURLError& resourceError, int64_t, int64_t) { - if (LocalFrame* frame = this->frame()) { + if (m_frame) { TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); - didFailLoading(frame); + didFailLoading(m_frame); } dispose(); } void PingLoaderImpl::timeout(TimerBase*) { - if (LocalFrame* frame = this->frame()) { + if (m_frame) { TRACE_EVENT1("devtools.timeline", "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); - didFailLoading(frame); + didFailLoading(m_frame); } dispose(); } @@ -388,7 +387,7 @@ } DEFINE_TRACE(PingLoaderImpl) { - DOMWindowProperty::trace(visitor); + visitor->trace(m_frame); } void finishPingRequestInitialization(
diff --git a/third_party/WebKit/Source/core/loader/PingLoader.h b/third_party/WebKit/Source/core/loader/PingLoader.h index ae6d269..8b8dd8e 100644 --- a/third_party/WebKit/Source/core/loader/PingLoader.h +++ b/third_party/WebKit/Source/core/loader/PingLoader.h
@@ -34,7 +34,6 @@ #include "core/CoreExport.h" #include "core/fetch/ResourceLoaderOptions.h" -#include "core/frame/DOMWindowProperty.h" #include "platform/Timer.h" #include "platform/heap/Handle.h" #include "platform/heap/SelfKeepAlive.h"
diff --git a/third_party/WebKit/Source/core/page/Page.cpp b/third_party/WebKit/Source/core/page/Page.cpp index 0fb7492..c16fb04 100644 --- a/third_party/WebKit/Source/core/page/Page.cpp +++ b/third_party/WebKit/Source/core/page/Page.cpp
@@ -481,7 +481,7 @@ } for (unsigned i = 0; i < frames.size(); ++i) - frames[i]->localDOMWindow()->acceptLanguagesChanged(); + frames[i]->domWindow()->acceptLanguagesChanged(); } DEFINE_TRACE(Page) {
diff --git a/third_party/WebKit/Source/core/paint/FilterPainter.cpp b/third_party/WebKit/Source/core/paint/FilterPainter.cpp index 46e28f27..5646e1a 100644 --- a/third_party/WebKit/Source/core/paint/FilterPainter.cpp +++ b/third_party/WebKit/Source/core/paint/FilterPainter.cpp
@@ -56,7 +56,7 @@ if (clipRect.rect() != paintingInfo.paintDirtyRect || clipRect.hasRadius()) { m_clipRecorder = WTF::wrapUnique(new LayerClipRecorder( context, *layer.layoutObject(), DisplayItem::kClipLayerFilter, clipRect, - &paintingInfo, LayoutPoint(), paintFlags)); + paintingInfo.rootLayer, LayoutPoint(), paintFlags)); } if (!context.getPaintController().displayItemConstructionIsDisabled()) {
diff --git a/third_party/WebKit/Source/core/paint/LayerClipRecorder.cpp b/third_party/WebKit/Source/core/paint/LayerClipRecorder.cpp index bd8878a30..3d85217 100644 --- a/third_party/WebKit/Source/core/paint/LayerClipRecorder.cpp +++ b/third_party/WebKit/Source/core/paint/LayerClipRecorder.cpp
@@ -15,24 +15,22 @@ namespace blink { -LayerClipRecorder::LayerClipRecorder( - GraphicsContext& graphicsContext, - const LayoutBoxModelObject& layoutObject, - DisplayItem::Type clipType, - const ClipRect& clipRect, - const PaintLayerPaintingInfo* localPaintingInfo, - const LayoutPoint& fragmentOffset, - PaintLayerFlags paintFlags, - BorderRadiusClippingRule rule) +LayerClipRecorder::LayerClipRecorder(GraphicsContext& graphicsContext, + const LayoutBoxModelObject& layoutObject, + DisplayItem::Type clipType, + const ClipRect& clipRect, + const PaintLayer* clipRoot, + const LayoutPoint& fragmentOffset, + PaintLayerFlags paintFlags, + BorderRadiusClippingRule rule) : m_graphicsContext(graphicsContext), m_layoutObject(layoutObject), m_clipType(clipType) { IntRect snappedClipRect = pixelSnappedIntRect(clipRect.rect()); Vector<FloatRoundedRect> roundedRects; - if (localPaintingInfo && clipRect.hasRadius()) { - collectRoundedRectClips(*layoutObject.layer(), *localPaintingInfo, - graphicsContext, fragmentOffset, paintFlags, rule, - roundedRects); + if (clipRoot && clipRect.hasRadius()) { + collectRoundedRectClips(*layoutObject.layer(), clipRoot, graphicsContext, + fragmentOffset, paintFlags, rule, roundedRects); } m_graphicsContext.getPaintController().createAndAppend<ClipDisplayItem>( @@ -58,7 +56,7 @@ void LayerClipRecorder::collectRoundedRectClips( PaintLayer& paintLayer, - const PaintLayerPaintingInfo& localPaintingInfo, + const PaintLayer* clipRoot, GraphicsContext& context, const LayoutPoint& fragmentOffset, PaintLayerFlags paintFlags, @@ -79,14 +77,15 @@ // is properly clipped so that it can in turn clip the scrolled contents in // the compositor. if (layer->needsCompositedScrolling() && - !(paintFlags & PaintLayerPaintingChildClippingMaskPhase)) + !(paintFlags & PaintLayerPaintingChildClippingMaskPhase || + paintFlags & PaintLayerPaintingAncestorClippingMaskPhase)) break; if (layer->layoutObject()->hasOverflowClip() && layer->layoutObject()->style()->hasBorderRadius() && inContainingBlockChain(&paintLayer, layer)) { LayoutPoint delta(fragmentOffset); - layer->convertToLayerCoords(localPaintingInfo.rootLayer, delta); + layer->convertToLayerCoords(clipRoot, delta); // The PaintLayer's size is pixel-snapped if it is a LayoutBox. We can't // use a pre-snapped border rect for clipping, since @@ -99,7 +98,7 @@ LayoutRect(delta, size))); } - if (layer == localPaintingInfo.rootLayer) + if (layer == clipRoot) break; } }
diff --git a/third_party/WebKit/Source/core/paint/LayerClipRecorder.h b/third_party/WebKit/Source/core/paint/LayerClipRecorder.h index b8e3aca..7601ca2a0 100644 --- a/third_party/WebKit/Source/core/paint/LayerClipRecorder.h +++ b/third_party/WebKit/Source/core/paint/LayerClipRecorder.h
@@ -46,7 +46,7 @@ const LayoutBoxModelObject&, DisplayItem::Type, const ClipRect&, - const PaintLayerPaintingInfo* localPaintingInfo, + const PaintLayer* clipRoot, const LayoutPoint& fragmentOffset, PaintLayerFlags, BorderRadiusClippingRule = IncludeSelfForBorderRadius); @@ -55,7 +55,7 @@ private: void collectRoundedRectClips(PaintLayer&, - const PaintLayerPaintingInfo& localPaintingInfo, + const PaintLayer* clipRoot, GraphicsContext&, const LayoutPoint& fragmentOffset, PaintLayerFlags,
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h index 51232a6..df71e64 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
@@ -182,7 +182,7 @@ LayoutRect localClipRect(const PaintLayer* ancestorLayer) const; // Computes the same thing as backgroundRect in calculateRects(), but skips - // apllying CSS clip and the visualOverflowRect() of |m_layer|. + // applying CSS clip and the visualOverflowRect() of |m_layer|. ClipRect backgroundClipRect(const ClipRectsContext&) const; // This method figures out our layerBounds in coordinates relative to
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp index 18d5d0ad..e5cafe6 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -371,7 +371,8 @@ // scrolling contents and scrollbars. if (m_paintLayer.layoutObject()->hasClipPath() && (!m_paintLayer.needsCompositedScrolling() || - (paintFlags & PaintLayerPaintingChildClippingMaskPhase))) { + (paintFlags & (PaintLayerPaintingChildClippingMaskPhase | + PaintLayerPaintingAncestorClippingMaskPhase)))) { paintingInfo.ancestorHasClipPathClipping = true; LayoutRect referenceBox(m_paintLayer.boxForClipPath()); @@ -427,22 +428,51 @@ ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects; + LayoutPoint offsetToClipper; + PaintLayer* paintLayerForFragments = &m_paintLayer; + if (paintFlags & PaintLayerPaintingAncestorClippingMaskPhase) { + // Compute fragments and their clips with respect to the clipping + // container. The paint rect is in this layer's space, so convert it + // to the clipper's layer's space. The rootLayer is also changed to + // the clipper's layer to simplify coordinate system adjustments. + // The change to rootLayer must persist to correctly record the clips. + paintLayerForFragments = + m_paintLayer.clippingContainer()->enclosingLayer(); + localPaintingInfo.rootLayer = paintLayerForFragments; + m_paintLayer.convertToLayerCoords(localPaintingInfo.rootLayer, + offsetToClipper); + localPaintingInfo.paintDirtyRect.moveBy(offsetToClipper); + } + // TODO(trchen): We haven't decided how to handle visual fragmentation with // SPv2. Related thread // https://groups.google.com/a/chromium.org/forum/#!topic/graphics-dev/81XuWFf-mxM if (fragmentPolicy == ForceSingleFragment || - RuntimeEnabledFeatures::slimmingPaintV2Enabled()) - m_paintLayer.appendSingleFragmentIgnoringPagination( + RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { + paintLayerForFragments->appendSingleFragmentIgnoringPagination( layerFragments, localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); - else - m_paintLayer.collectFragments(layerFragments, localPaintingInfo.rootLayer, - localPaintingInfo.paintDirtyRect, cacheSlot, - IgnoreOverlayScrollbarSize, - respectOverflowClip, &offsetFromRoot, - localPaintingInfo.subPixelAccumulation); + } else { + paintLayerForFragments->collectFragments( + layerFragments, localPaintingInfo.rootLayer, + localPaintingInfo.paintDirtyRect, cacheSlot, + IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, + localPaintingInfo.subPixelAccumulation); + } + + if (paintFlags & PaintLayerPaintingAncestorClippingMaskPhase) { + // Fragment offsets have been computed in the clipping container's + // layer's coordinate system, but for the rest of painting we need + // them in the layer coordinate. So move them and the foreground rect + // that is also in the clipper's space. + LayoutSize negativeOffset(-offsetToClipper.x(), -offsetToClipper.y()); + for (auto& fragment : layerFragments) { + fragment.foregroundRect.move(negativeOffset); + fragment.paginationOffset.move(negativeOffset); + } + } if (shouldPaintContent) { // TODO(wangxianzhu): This is for old slow scrolling. Implement similar @@ -546,7 +576,8 @@ shouldPaintContent && m_paintLayer.layoutObject()->hasMask() && !selectionOnly; bool shouldPaintClippingMask = - (paintFlags & PaintLayerPaintingChildClippingMaskPhase) && + (paintFlags & (PaintLayerPaintingChildClippingMaskPhase | + PaintLayerPaintingAncestorClippingMaskPhase)) && shouldPaintContent && !selectionOnly; if (shouldPaintMask) @@ -721,7 +752,7 @@ UseCounter::ClipCssOfFixedPositionElement); clipRecorder.emplace(context, *parentLayer->layoutObject(), DisplayItem::kClipLayerParent, clipRectForFragment, - &paintingInfo, fragment.paginationOffset, + paintingInfo.rootLayer, fragment.paginationOffset, paintFlags); } } @@ -859,7 +890,7 @@ if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { clipRecorder.emplace(context, *m_paintLayer.layoutObject(), DisplayItem::kClipLayerOverflowControls, - fragment.backgroundRect, &localPaintingInfo, + fragment.backgroundRect, localPaintingInfo.rootLayer, fragment.paginationOffset, paintFlags); } @@ -909,9 +940,12 @@ break; } + // TODO(schenney): Nested border-radius clips are not applied to composited + // children, probably due to an incorrect clipRoot. + // https://bugs.chromium.org/p/chromium/issues/detail?id=672561 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), clipType, - clipRect, &paintingInfo, fragment.paginationOffset, - paintFlags, clippingRule); + clipRect, paintingInfo.rootLayer, + fragment.paginationOffset, paintFlags, clippingRule); } LayoutRect newCullRect(clipRect.rect()); @@ -983,7 +1017,8 @@ needsToClip(localPaintingInfo, layerFragments[0].foregroundRect)) { clipRecorder.emplace(context, *m_paintLayer.layoutObject(), DisplayItem::kClipLayerForeground, - layerFragments[0].foregroundRect, &localPaintingInfo, + layerFragments[0].foregroundRect, + localPaintingInfo.rootLayer, layerFragments[0].paginationOffset, paintFlags); clipState = HasClipped; }
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPaintingInfo.h b/third_party/WebKit/Source/core/paint/PaintLayerPaintingInfo.h index d907091..f0980bc 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerPaintingInfo.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerPaintingInfo.h
@@ -67,8 +67,9 @@ PaintLayerPaintingRootBackgroundOnly = 1 << 9, PaintLayerPaintingSkipRootBackground = 1 << 10, PaintLayerPaintingChildClippingMaskPhase = 1 << 11, - PaintLayerPaintingRenderingClipPathAsMask = 1 << 12, - PaintLayerPaintingCompositingDecorationPhase = 1 << 13, + PaintLayerPaintingAncestorClippingMaskPhase = 1 << 12, + PaintLayerPaintingRenderingClipPathAsMask = 1 << 13, + PaintLayerPaintingCompositingDecorationPhase = 1 << 14, PaintLayerPaintingCompositingAllPhases = (PaintLayerPaintingCompositingBackgroundPhase | PaintLayerPaintingCompositingForegroundPhase |
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGElement.cpp index 41faa266..967313ce 100644 --- a/third_party/WebKit/Source/core/svg/SVGElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGElement.cpp
@@ -331,42 +331,40 @@ TransformationMatrix transform; float zoom = style->effectiveZoom(); + FloatRect boundingBox = layoutObject()->objectBoundingBox(); + ComputedStyle::ApplyTransformOrigin applyTransformOrigin = + ComputedStyle::IncludeTransformOrigin; // SVGTextElements need special handling for the text positioning code. if (isSVGTextElement(this)) { - // Do not take into account SVG's zoom rules, transform-origin, or - // percentage values. + // Do not take into account transform-origin, or percentage values. + boundingBox = FloatRect(); + applyTransformOrigin = ComputedStyle::ExcludeTransformOrigin; + } + + // CSS transforms operate with pre-scaled lengths. To make this work with + // SVG (which applies the zoom factor globally, at the root level) we + // + // * pre-scale the bounding box (to bring it into the same space as the + // other CSS values) + // * invert the zoom factor (to effectively compute the CSS transform + // under a 1.0 zoom) + // + // Note: objectBoundingBox is an emptyRect for elements like pattern or + // clipPath. See the "Object bounding box units" section of + // http://dev.w3.org/csswg/css3-transforms/ + if (zoom != 1) { + boundingBox.scale(zoom); + transform.scale(1 / zoom); style->applyTransform( - transform, LayoutSize(0, 0), ComputedStyle::ExcludeTransformOrigin, + transform, boundingBox, applyTransformOrigin, ComputedStyle::IncludeMotionPath, ComputedStyle::IncludeIndependentTransformProperties); + transform.scale(zoom); } else { - // CSS transforms operate with pre-scaled lengths. To make this work with - // SVG (which applies the zoom factor globally, at the root level) we - // - // * pre-scale the bounding box (to bring it into the same space as the - // other CSS values) - // * invert the zoom factor (to effectively compute the CSS transform - // under a 1.0 zoom) - // - // Note: objectBoundingBox is an emptyRect for elements like pattern or - // clipPath. See the "Object bounding box units" section of - // http://dev.w3.org/csswg/css3-transforms/ - if (zoom != 1) { - FloatRect scaledBBox = layoutObject()->objectBoundingBox(); - scaledBBox.scale(zoom); - transform.scale(1 / zoom); - style->applyTransform( - transform, scaledBBox, ComputedStyle::IncludeTransformOrigin, - ComputedStyle::IncludeMotionPath, - ComputedStyle::IncludeIndependentTransformProperties); - transform.scale(zoom); - } else { - style->applyTransform( - transform, layoutObject()->objectBoundingBox(), - ComputedStyle::IncludeTransformOrigin, - ComputedStyle::IncludeMotionPath, - ComputedStyle::IncludeIndependentTransformProperties); - } + style->applyTransform( + transform, boundingBox, applyTransformOrigin, + ComputedStyle::IncludeMotionPath, + ComputedStyle::IncludeIndependentTransformProperties); } // Flatten any 3D transform. matrix = transform.toAffineTransform();
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp index 39a7e30..f4f2607a 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
@@ -336,12 +336,17 @@ DCHECK(frame); const DocumentLoader* documentLoader = frame->loader().documentLoader(); DCHECK(documentLoader); + const DocumentLoadTiming& documentLoadTiming = documentLoader->timing(); const DocumentTiming* documentTiming = frame->document() ? &(frame->document()->timing()) : nullptr; const ResourceResponse& finalResponse = documentLoader->response(); + ResourceTimingInfo* navigationTimingInfo = + documentLoader->getNavigationTimingInfo(); + if (!navigationTimingInfo) + return; ResourceLoadTiming* resourceLoadTiming = finalResponse.resourceLoadTiming(); // Don't create a navigation timing instance when @@ -352,8 +357,7 @@ double lastRedirectEndTime = documentLoadTiming.redirectEnd(); double finishTime = documentLoadTiming.loadEventEnd(); - // TODO(sunjian) Implement transfer size. crbug/663187 - unsigned long long transferSize = 0; + unsigned long long transferSize = navigationTimingInfo->transferSize(); unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); bool didReuseConnection = finalResponse.connectionReused();
diff --git a/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp b/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp index b8fb6995..c2aaba3 100644 --- a/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp +++ b/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp
@@ -84,8 +84,8 @@ // Re-create the FrameView if needed. if (hasView) frame->loader().client()->transitionToCommittedForNewPage(); - result = frame->localDOMWindow()->installNewDocument(sourceMIMEType, init, - forceXHTML); + result = frame->domWindow()->installNewDocument(sourceMIMEType, init, + forceXHTML); if (oldDocument) { DocumentXSLT::from(*result).setTransformSourceDocument(oldDocument);
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/BottomUpProfileDataGrid.js b/third_party/WebKit/Source/devtools/front_end/profiler/BottomUpProfileDataGrid.js index b94e7260..c1752f4 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/BottomUpProfileDataGrid.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/BottomUpProfileDataGrid.js
@@ -175,6 +175,7 @@ */ constructor(formatter, searchableView, rootProfileNode, total) { super(formatter, searchableView, total); + this.deepSearch = false; // Iterate each node in pre-order. var profileNodeUIDs = 0; @@ -291,28 +292,6 @@ /** * @override - * @param {!UI.SearchableView.SearchConfig} searchConfig - * @param {boolean} shouldJump - * @param {boolean=} jumpBackwards - */ - performSearch(searchConfig, shouldJump, jumpBackwards) { - this.searchCanceled(); - var matchesQuery = this._matchFunction(searchConfig); - if (!matchesQuery) - return; - - this._searchResults = []; - for (var current = this.children[0]; current; current = current.traverseNextNode(true, null, true)) { - if (matchesQuery(current)) - this._searchResults.push({profileNode: current}); - } - this._searchResultIndex = jumpBackwards ? 0 : this._searchResults.length - 1; - this._searchableView.updateSearchMatchesCount(this._searchResults.length); - this._searchableView.updateCurrentMatchIndex(this._searchResultIndex); - } - - /** - * @override */ populateChildren() { Profiler.BottomUpProfileDataGridNode._sharedPopulate(this);
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js index d489167..7577cb7 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js
@@ -33,12 +33,8 @@ * @unrestricted */ Profiler.ProfileFlameChartDataProvider = class { - /** - * @param {?SDK.Target} target - */ - constructor(target) { + constructor() { UI.FlameChartDataProvider.call(this); - this._target = target; this._colorGenerator = Profiler.ProfileFlameChartDataProvider.colorGenerator(); }
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js index 010d83c..657eb562 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileView.js
@@ -190,7 +190,7 @@ startRecordingProfile() { var target = UI.context.flavor(SDK.Target); - if (this._profileBeingRecorded || !target) + if (this.profileBeingRecorded() || !target) return; var profile = new Profiler.CPUProfileHeader(target, this); this.setProfileBeingRecorded(profile); @@ -203,7 +203,7 @@ stopRecordingProfile() { this._recording = false; - if (!this._profileBeingRecorded || !this._profileBeingRecorded.target()) + if (!this.profileBeingRecorded() || !this.profileBeingRecorded().target()) return; var recordedProfile; @@ -213,12 +213,12 @@ * @this {Profiler.CPUProfileType} */ function didStopProfiling(profile) { - if (!this._profileBeingRecorded) + if (!this.profileBeingRecorded()) return; console.assert(profile); - this._profileBeingRecorded.setProtocolProfile(profile); - this._profileBeingRecorded.updateStatus(''); - recordedProfile = this._profileBeingRecorded; + this.profileBeingRecorded().setProtocolProfile(profile); + this.profileBeingRecorded().updateStatus(''); + recordedProfile = this.profileBeingRecorded(); this.setProfileBeingRecorded(null); } @@ -229,7 +229,7 @@ this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete, recordedProfile); } - this._profileBeingRecorded.target() + this.profileBeingRecorded().target() .cpuProfilerModel.stopRecording() .then(didStopProfiling.bind(this)) .then(SDK.targetManager.resumeAllTargets.bind(SDK.targetManager)) @@ -332,8 +332,9 @@ * @param {?SDK.Target} target */ constructor(cpuProfile, target) { - super(target); + super(); this._cpuProfile = cpuProfile; + this._target = target; } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js index e10fb662..bcfb271a 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapProfileView.js
@@ -97,7 +97,7 @@ startRecordingProfile() { var target = UI.context.flavor(SDK.Target); - if (this._profileBeingRecorded || !target) + if (this.profileBeingRecorded() || !target) return; var profile = new Profiler.SamplingHeapProfileHeader(target, this); this.setProfileBeingRecorded(profile); @@ -110,7 +110,7 @@ stopRecordingProfile() { this._recording = false; - if (!this._profileBeingRecorded || !this._profileBeingRecorded.target()) + if (!this.profileBeingRecorded() || !this.profileBeingRecorded().target()) return; var recordedProfile; @@ -120,12 +120,12 @@ * @this {Profiler.SamplingHeapProfileType} */ function didStopProfiling(profile) { - if (!this._profileBeingRecorded) + if (!this.profileBeingRecorded()) return; console.assert(profile); - this._profileBeingRecorded.setProtocolProfile(profile); - this._profileBeingRecorded.updateStatus(''); - recordedProfile = this._profileBeingRecorded; + this.profileBeingRecorded().setProtocolProfile(profile); + this.profileBeingRecorded().updateStatus(''); + recordedProfile = this.profileBeingRecorded(); this.setProfileBeingRecorded(null); } @@ -136,7 +136,7 @@ this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete, recordedProfile); } - this._profileBeingRecorded.target() + this.profileBeingRecorded().target() .heapProfilerModel.stopSampling() .then(didStopProfiling.bind(this)) .then(SDK.targetManager.resumeAllTargets.bind(SDK.targetManager)) @@ -294,8 +294,9 @@ * @param {?SDK.Target} target */ constructor(profile, target) { - super(target); + super(); this._profile = profile; + this._target = target; } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js index 11f37c8..713fa52 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotView.js
@@ -1036,7 +1036,7 @@ * @this {Profiler.HeapSnapshotProfileType} */ function didTakeHeapSnapshot(error) { - var profile = this._profileBeingRecorded; + var profile = this.profileBeingRecorded(); profile.title = Common.UIString('Snapshot %d', profile.uid); profile._finishLoad(); this.setProfileBeingRecorded(null); @@ -1070,11 +1070,11 @@ } _resetProfiles() { - this._reset(); + this.reset(); } _snapshotReceived(profile) { - if (this._profileBeingRecorded === profile) + if (this.profileBeingRecorded() === profile) this.setProfileBeingRecorded(null); this.dispatchEventToListeners(Profiler.HeapSnapshotProfileType.SnapshotReceived, profile); } @@ -1150,7 +1150,7 @@ if (profileSamples.totalTime < data.timestamp - profileSamples.timestamps[0]) profileSamples.totalTime *= 2; this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate, this._profileSamples); - this._profileBeingRecorded.updateStatus(null, true); + this.profileBeingRecorded().updateStatus(null, true); } /** @@ -1194,15 +1194,15 @@ var target = UI.context.flavor(SDK.Target); this.setProfileBeingRecorded(new Profiler.HeapProfileHeader(target, this, undefined)); this._profileSamples = new Profiler.TrackingHeapSnapshotProfileType.Samples(); - this._profileBeingRecorded._profileSamples = this._profileSamples; + this.profileBeingRecorded()._profileSamples = this._profileSamples; this._recording = true; - this.addProfile(this._profileBeingRecorded); - this._profileBeingRecorded.updateStatus(Common.UIString('Recording\u2026')); + this.addProfile(/** @type {!Profiler.ProfileHeader} */ (this.profileBeingRecorded())); + this.profileBeingRecorded().updateStatus(Common.UIString('Recording\u2026')); this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.TrackingStarted); } _stopRecordingProfile() { - this._profileBeingRecorded.updateStatus(Common.UIString('Snapshotting\u2026')); + this.profileBeingRecorded().updateStatus(Common.UIString('Snapshotting\u2026')); /** * @param {?string} error * @this {Profiler.HeapSnapshotProfileType} @@ -1217,7 +1217,7 @@ this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete, profile); } - this._profileBeingRecorded.target().heapProfilerAgent().stopTrackingHeapObjects( + this.profileBeingRecorded().target().heapProfilerAgent().stopTrackingHeapObjects( true, didTakeHeapSnapshot.bind(this)); this._recording = false; this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.TrackingStopped); @@ -1453,7 +1453,7 @@ notifySnapshotReceived() { this._fulfillLoad(this._snapshotProxy); - this._profileType._snapshotReceived(this); + this.profileType()._snapshotReceived(this); if (this.canSaveToFile()) this.dispatchEventToListeners(Profiler.ProfileHeader.Events.ProfileReceived); } @@ -1494,7 +1494,7 @@ this._updateSaveProgress(0, 1); } } - this._fileName = this._fileName || 'Heap-' + new Date().toISO8601Compact() + this._profileType.fileExtension(); + this._fileName = this._fileName || 'Heap-' + new Date().toISO8601Compact() + this.profileType().fileExtension(); fileOutputStream.open(this._fileName, onOpen.bind(this)); }
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/ProfileDataGrid.js b/third_party/WebKit/Source/devtools/front_end/profiler/ProfileDataGrid.js index 9c50155..bd6cb3f 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/ProfileDataGrid.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/ProfileDataGrid.js
@@ -332,6 +332,7 @@ this.total = total; this.lastComparator = null; this.childrenByCallUID = new Map(); + this.deepSearch = true; } /** @@ -547,7 +548,8 @@ return; this._searchResults = []; - for (var current = this.children[0]; current; current = current.traverseNextNode(false, null, false)) { + const deepSearch = this.deepSearch; + for (var current = this.children[0]; current; current = current.traverseNextNode(!deepSearch, null, !deepSearch)) { if (matchesQuery(current)) this._searchResults.push({profileNode: current}); }
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/ProfileView.js b/third_party/WebKit/Source/devtools/front_end/profiler/ProfileView.js index c30218d..567ace99 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/ProfileView.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/ProfileView.js
@@ -419,8 +419,8 @@ this._jsonifiedProfile = null; this.updateStatus(Common.UIString('Loaded'), false); - if (this._profileType.profileBeingRecorded() === this) - this._profileType.setProfileBeingRecorded(null); + if (this.profileType().profileBeingRecorded() === this) + this.profileType().setProfileBeingRecorded(null); } /** @@ -512,7 +512,7 @@ } } this._fileName = this._fileName || - `${this._profileType.typeName()}-${new Date().toISO8601Compact()}${this._profileType.fileExtension()}`; + `${this.profileType().typeName()}-${new Date().toISO8601Compact()}${this.profileType().fileExtension()}`; fileOutputStream.open(this._fileName, onOpenForSave.bind(this)); }
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js index d30c0f9..8113259 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js
@@ -220,12 +220,9 @@ profileBeingRecordedRemoved() { } - _reset() { - var profiles = this._profiles.slice(0); - for (var i = 0; i < profiles.length; ++i) - this._disposeProfile(profiles[i]); + reset() { + this._profiles.slice(0).forEach(this._disposeProfile.bind(this)); this._profiles = []; - this._nextProfileUid = 1; } @@ -598,9 +595,7 @@ } _reset() { - var types = Profiler.ProfileTypeRegistry.instance.profileTypes(); - for (var i = 0; i < types.length; i++) - types[i]._reset(); + Profiler.ProfileTypeRegistry.instance.profileTypes().forEach(type => type.reset()); delete this.visibleView;
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js index 3180034..275dad9 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js +++ b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
@@ -950,22 +950,9 @@ this.listItemElement.draggable = true; this.listItemElement.addEventListener('click', this._onclick.bind(this), false); this.listItemElement.addEventListener('contextmenu', this._handleContextMenuEvent.bind(this), false); - this.listItemElement.addEventListener('mousedown', this._onmousedown.bind(this), false); this.listItemElement.addEventListener('dragstart', this._ondragstart.bind(this), false); } - _onmousedown(event) { - if (event.which === 1) // Warm-up data for drag'n'drop - this._uiSourceCode.requestContent().then(callback.bind(this)); - /** - * @param {?string} content - * @this {Sources.NavigatorSourceTreeElement} - */ - function callback(content) { - this._warmedUpContent = content; - } - } - _shouldRenameOnMouseDown() { if (!this._uiSourceCode.canRename()) return false; @@ -992,10 +979,12 @@ } } + /** + * @param {!DragEvent} event + */ _ondragstart(event) { - event.dataTransfer.setData('text/plain', this._warmedUpContent); + event.dataTransfer.setData('text/plain', this._uiSourceCode.url()); event.dataTransfer.effectAllowed = 'copy'; - return true; } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/text_editor/CodeMirrorTextEditor.js b/third_party/WebKit/Source/devtools/front_end/text_editor/CodeMirrorTextEditor.js index acd1700..0310ab6 100644 --- a/third_party/WebKit/Source/devtools/front_end/text_editor/CodeMirrorTextEditor.js +++ b/third_party/WebKit/Source/devtools/front_end/text_editor/CodeMirrorTextEditor.js
@@ -172,6 +172,8 @@ this._needsRefresh = true; + this._readOnly = false; + this._mimeType = ''; if (options.mimeType) this.setMimeType(options.mimeType); @@ -711,6 +713,10 @@ * @param {boolean} readOnly */ setReadOnly(readOnly) { + if (this._readOnly === readOnly) + return; + this.clearPositionHighlight(); + this._readOnly = readOnly; this.element.classList.toggle('CodeMirror-readonly', readOnly); this._codeMirror.setOption('readOnly', readOnly); } @@ -903,8 +909,10 @@ return; this.scrollLineIntoView(lineNumber); if (shouldHighlight) { - this._codeMirror.addLineClass(this._highlightedLine, null, 'cm-highlight'); - this._clearHighlightTimeout = setTimeout(this.clearPositionHighlight.bind(this), 2000); + this._codeMirror.addLineClass( + this._highlightedLine, null, this._readOnly ? 'cm-readonly-highlight' : 'cm-highlight'); + if (!this._readOnly) + this._clearHighlightTimeout = setTimeout(this.clearPositionHighlight.bind(this), 2000); } this.setSelection(Common.TextRange.createFromLocation(lineNumber, columnNumber)); } @@ -914,8 +922,10 @@ clearTimeout(this._clearHighlightTimeout); delete this._clearHighlightTimeout; - if (this._highlightedLine) - this._codeMirror.removeLineClass(this._highlightedLine, null, 'cm-highlight'); + if (this._highlightedLine) { + this._codeMirror.removeLineClass( + this._highlightedLine, null, this._readOnly ? 'cm-readonly-highlight' : 'cm-highlight'); + } delete this._highlightedLine; }
diff --git a/third_party/WebKit/Source/devtools/front_end/text_editor/cmdevtools.css b/third_party/WebKit/Source/devtools/front_end/text_editor/cmdevtools.css index 969daea..c143868 100644 --- a/third_party/WebKit/Source/devtools/front_end/text_editor/cmdevtools.css +++ b/third_party/WebKit/Source/devtools/front_end/text_editor/cmdevtools.css
@@ -70,6 +70,14 @@ to { background-color: transparent; } } +.cm-readonly-highlight { + background-color: rgb(255, 255, 120); +} + +.-theme-with-dark-background .cm-readonly-highlight { + background-color: hsla(133, 100%, 30%, 0.5); +} + .cm-highlight.cm-execution-line { -webkit-animation: fadeout-execution-line 1s 0s; } @@ -378,11 +386,11 @@ top: -9px; } -.CodeMirror .text-editor-line-with-warning:not(.cm-execution-line) { +.CodeMirror .text-editor-line-with-warning:not(.cm-execution-line):not(.cm-readonly-highlight) { background-color: rgba(241, 230, 0, 0.1); } -.CodeMirror .text-editor-line-with-error:not(.cm-execution-line) { +.CodeMirror .text-editor-line-with-error:not(.cm-execution-line):not(.cm-readonly-highlight) { background-color: rgba(255, 0, 0, 0.05); }
diff --git a/third_party/WebKit/Source/modules/budget/BudgetService.cpp b/third_party/WebKit/Source/modules/budget/BudgetService.cpp index afd12a2..fda4afeb 100644 --- a/third_party/WebKit/Source/modules/budget/BudgetService.cpp +++ b/third_party/WebKit/Source/modules/budget/BudgetService.cpp
@@ -65,10 +65,7 @@ scriptState, DOMException::create(SecurityError, errorMessage)); mojom::blink::BudgetOperationType type = stringToOperationType(operation); - if (type == mojom::blink::BudgetOperationType::INVALID_OPERATION) - return ScriptPromise::rejectWithDOMException( - scriptState, DOMException::create(NotSupportedError, - "Invalid operation type specified")); + DCHECK_NE(type, mojom::blink::BudgetOperationType::INVALID_OPERATION); ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); @@ -129,10 +126,7 @@ DCHECK(m_service); mojom::blink::BudgetOperationType type = stringToOperationType(operation); - if (type == mojom::blink::BudgetOperationType::INVALID_OPERATION) - return ScriptPromise::rejectWithDOMException( - scriptState, DOMException::create(NotSupportedError, - "Invalid operation type specified")); + DCHECK_NE(type, mojom::blink::BudgetOperationType::INVALID_OPERATION); String errorMessage; if (!scriptState->getExecutionContext()->isSecureContext(errorMessage))
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp b/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp index 56498780..4c8d400 100644 --- a/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp +++ b/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp
@@ -22,7 +22,7 @@ PaintWorkletTest() : m_page(DummyPageHolder::create()) {} PaintWorklet* paintWorklet() { - return WindowPaintWorklet::from(*m_page->frame().localDOMWindow()) + return WindowPaintWorklet::from(*m_page->frame().domWindow()) .paintWorklet(); }
diff --git a/third_party/WebKit/Source/modules/gamepad/NavigatorGamepad.cpp b/third_party/WebKit/Source/modules/gamepad/NavigatorGamepad.cpp index f99ab0b..546499b 100644 --- a/third_party/WebKit/Source/modules/gamepad/NavigatorGamepad.cpp +++ b/third_party/WebKit/Source/modules/gamepad/NavigatorGamepad.cpp
@@ -174,7 +174,7 @@ this, &NavigatorGamepad::dispatchOneEvent)) { if (frame) - frame->localDOMWindow()->registerEventListenerObserver(this); + frame->domWindow()->registerEventListenerObserver(this); } NavigatorGamepad::~NavigatorGamepad() {}
diff --git a/third_party/WebKit/Source/modules/permissions/Permissions.cpp b/third_party/WebKit/Source/modules/permissions/Permissions.cpp index 873b4452..0050013 100644 --- a/third_party/WebKit/Source/modules/permissions/Permissions.cpp +++ b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
@@ -156,7 +156,7 @@ service->RequestPermission( std::move(descriptor), scriptState->getExecutionContext()->getSecurityOrigin(), - UserGestureIndicator::processingUserGesture(), + UserGestureIndicator::processingUserGestureThreadSafe(), convertToBaseCallback(WTF::bind( &Permissions::taskComplete, wrapPersistent(this), wrapPersistent(resolver), WTF::passed(std::move(descriptorCopy))))); @@ -247,7 +247,7 @@ service->RequestPermissions( std::move(internalPermissions), scriptState->getExecutionContext()->getSecurityOrigin(), - UserGestureIndicator::processingUserGesture(), + UserGestureIndicator::processingUserGestureThreadSafe(), convertToBaseCallback( WTF::bind(&Permissions::batchTaskComplete, wrapPersistent(this), wrapPersistent(resolver),
diff --git a/third_party/WebKit/Source/modules/storage/StorageArea.cpp b/third_party/WebKit/Source/modules/storage/StorageArea.cpp index 9e3bb551..3271d940 100644 --- a/third_party/WebKit/Source/modules/storage/StorageArea.cpp +++ b/third_party/WebKit/Source/modules/storage/StorageArea.cpp
@@ -174,14 +174,14 @@ if (!frame->isLocalFrame()) continue; LocalFrame* localFrame = toLocalFrame(frame); - LocalDOMWindow* localWindow = localFrame->localDOMWindow(); + LocalDOMWindow* localWindow = localFrame->domWindow(); Storage* storage = DOMWindowStorage::from(*localWindow).optionalLocalStorage(); if (storage && localFrame->document()->getSecurityOrigin()->canAccess( securityOrigin) && !isEventSource(storage, sourceAreaInstance)) - localFrame->localDOMWindow()->enqueueWindowEvent( + localFrame->domWindow()->enqueueWindowEvent( StorageEvent::create(EventTypeNames::storage, key, oldValue, newValue, pageURL, storage)); } @@ -225,14 +225,14 @@ if (!frame->isLocalFrame()) continue; LocalFrame* localFrame = toLocalFrame(frame); - LocalDOMWindow* localWindow = localFrame->localDOMWindow(); + LocalDOMWindow* localWindow = localFrame->domWindow(); Storage* storage = DOMWindowStorage::from(*localWindow).optionalSessionStorage(); if (storage && localFrame->document()->getSecurityOrigin()->canAccess( securityOrigin) && !isEventSource(storage, sourceAreaInstance)) - localFrame->localDOMWindow()->enqueueWindowEvent(StorageEvent::create( + localFrame->domWindow()->enqueueWindowEvent(StorageEvent::create( EventTypeNames::storage, key, oldValue, newValue, pageURL, storage)); } if (InspectorDOMStorageAgent* agent =
diff --git a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp index a932c52..95e5b353 100644 --- a/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp +++ b/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
@@ -82,11 +82,11 @@ // runtime flag. if (!isFeatureEnabledInFrame(blink::kVibrateFeature, frame)) { if (RuntimeEnabledFeatures::featurePolicyEnabled()) { - frame->localDOMWindow()->printErrorMessage( + frame->domWindow()->printErrorMessage( "Navigator.vibrate() is not enabled in feature policy for this " "frame."); } else { - frame->localDOMWindow()->printErrorMessage( + frame->domWindow()->printErrorMessage( "A call of navigator.vibrate will be no-op inside cross-origin " "iframes: https://www.chromestatus.com/feature/5682658461876224."); }
diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp index 68a6c6b..a076fa5 100644 --- a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp +++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp
@@ -97,7 +97,7 @@ NavigatorVR::NavigatorVR(LocalFrame* frame) : DOMWindowProperty(frame), PageVisibilityObserver(frame->page()) { - frame->localDOMWindow()->registerEventListenerObserver(this); + frame->domWindow()->registerEventListenerObserver(this); } NavigatorVR::~NavigatorVR() {} @@ -107,17 +107,19 @@ } void NavigatorVR::enqueueVREvent(VRDisplayEvent* event) { - if (frame() && frame()->localDOMWindow()) { - frame()->localDOMWindow()->enqueueWindowEvent(event); + // TODO(dcheng): Why does this need to check both frame and domWindow? + if (frame() && frame()->domWindow()) { + frame()->domWindow()->enqueueWindowEvent(event); } } void NavigatorVR::dispatchVRGestureEvent(VRDisplayEvent* event) { - if (frame() && frame()->localDOMWindow()) { + // TODO(dcheng): Why does this need to check both frame and domWindow? + if (frame() && frame()->domWindow()) { UserGestureIndicator gestureIndicator( DocumentUserGestureToken::create(frame()->document())); - event->setTarget(frame()->localDOMWindow()); - frame()->localDOMWindow()->dispatchEvent(event); + event->setTarget(frame()->domWindow()); + frame()->domWindow()->dispatchEvent(event); } }
diff --git a/third_party/WebKit/Source/platform/UserGestureIndicator.cpp b/third_party/WebKit/Source/platform/UserGestureIndicator.cpp index 84433950..6311458 100644 --- a/third_party/WebKit/Source/platform/UserGestureIndicator.cpp +++ b/third_party/WebKit/Source/platform/UserGestureIndicator.cpp
@@ -42,7 +42,7 @@ m_timestamp(WTF::currentTime()), m_timeoutPolicy(Default), m_usageCallback(nullptr) { - if (status == NewGesture || !UserGestureIndicator::currentToken()) + if (status == NewGesture || !UserGestureIndicator::currentTokenThreadSafe()) m_consumableGestures++; } @@ -151,18 +151,18 @@ } bool UserGestureIndicator::processingUserGesture() { - if (auto* token = currentToken()) { - ASSERT(isMainThread()); + if (auto* token = currentToken()) return token->hasGestures(); - } - return false; } +bool UserGestureIndicator::processingUserGestureThreadSafe() { + return isMainThread() && processingUserGesture(); +} + // static bool UserGestureIndicator::consumeUserGesture() { if (auto* token = currentToken()) { - ASSERT(isMainThread()); if (token->consumeGesture()) { token->userGestureUtilized(); return true; @@ -171,11 +171,17 @@ return false; } -// static +bool UserGestureIndicator::consumeUserGestureThreadSafe() { + return isMainThread() && consumeUserGesture(); +} + UserGestureToken* UserGestureIndicator::currentToken() { - if (!isMainThread() || !s_rootToken) - return nullptr; + DCHECK(isMainThread()); return s_rootToken; } +UserGestureToken* UserGestureIndicator::currentTokenThreadSafe() { + return isMainThread() ? currentToken() : nullptr; +} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/UserGestureIndicator.h b/third_party/WebKit/Source/platform/UserGestureIndicator.h index 5cab2e0..4e4cebe2 100644 --- a/third_party/WebKit/Source/platform/UserGestureIndicator.h +++ b/third_party/WebKit/Source/platform/UserGestureIndicator.h
@@ -94,11 +94,17 @@ WTF_MAKE_NONCOPYABLE(UserGestureIndicator); public: + // Note: All *ThreadSafe methods are safe to call from any thread. Their + // non-suffixed counterparts *must* be called on the main thread. Consider + // always using the non-suffixed one unless the code really + // needs to be thread-safe + // Returns whether a user gesture is currently in progress. // Does not invoke the UserGestureUtilizedCallback. Consider calling // utilizeUserGesture instead if you know for sure that the return value // will have an effect. static bool processingUserGesture(); + static bool processingUserGestureThreadSafe(); // Indicates that a user gesture (if any) is being used, without preventing it // from being used again. Returns whether a user gesture is currently in @@ -111,8 +117,10 @@ // operations like creating a new process. // Like utilizeUserGesture, may invoke/clear any UserGestureUtilizedCallback. static bool consumeUserGesture(); + static bool consumeUserGestureThreadSafe(); static UserGestureToken* currentToken(); + static UserGestureToken* currentTokenThreadSafe(); explicit UserGestureIndicator(PassRefPtr<UserGestureToken>); ~UserGestureIndicator();
diff --git a/third_party/WebKit/Source/platform/graphics/CompositingReasons.cpp b/third_party/WebKit/Source/platform/graphics/CompositingReasons.cpp index b053de8..fdc3d2a 100644 --- a/third_party/WebKit/Source/platform/graphics/CompositingReasons.cpp +++ b/third_party/WebKit/Source/platform/graphics/CompositingReasons.cpp
@@ -127,6 +127,10 @@ "Secondary layer, to contain the mask contents"}, {CompositingReasonLayerForClippingMask, "layerForClippingMask", "Secondary layer, for clipping mask"}, + {CompositingReasonLayerForAncestorClippingMask, + "layerForAncestorClippingMask", + "Secondary layer, applies a clipping mask due to a sibling in the " + "composited layer tree"}, {CompositingReasonLayerForScrollingBlockSelection, "layerForScrollingBlockSelection", "Secondary layer, to house block selection gaps for composited scrolling "
diff --git a/third_party/WebKit/Source/platform/graphics/CompositingReasons.h b/third_party/WebKit/Source/platform/graphics/CompositingReasons.h index e0d8667..aff8adc 100644 --- a/third_party/WebKit/Source/platform/graphics/CompositingReasons.h +++ b/third_party/WebKit/Source/platform/graphics/CompositingReasons.h
@@ -84,16 +84,18 @@ const uint64_t CompositingReasonLayerForBackground = UINT64_C(1) << 44; const uint64_t CompositingReasonLayerForMask = UINT64_C(1) << 45; const uint64_t CompositingReasonLayerForClippingMask = UINT64_C(1) << 46; +const uint64_t CompositingReasonLayerForAncestorClippingMask = UINT64_C(1) + << 47; const uint64_t CompositingReasonLayerForScrollingBlockSelection = UINT64_C(1) - << 47; + << 48; // Composited layer painted on top of all other layers as decoration -const uint64_t CompositingReasonLayerForDecoration = UINT64_C(1) << 48; +const uint64_t CompositingReasonLayerForDecoration = UINT64_C(1) << 49; // Composited elements with inline transforms trigger assumed overlap so that // we can update their transforms quickly. -const uint64_t CompositingReasonInlineTransform = UINT64_C(1) << 49; +const uint64_t CompositingReasonInlineTransform = UINT64_C(1) << 50; -const uint64_t CompositingReasonCompositorProxy = UINT64_C(1) << 50; +const uint64_t CompositingReasonCompositorProxy = UINT64_C(1) << 51; // Various combinations of compositing reasons are defined here also, for more // intutive and faster bitwise logic.
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp index d2a9211..7816da4 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
@@ -738,6 +738,8 @@ paintingPhasesJSON->pushString("GraphicsLayerPaintMask"); if (m_paintingPhase & GraphicsLayerPaintChildClippingMask) paintingPhasesJSON->pushString("GraphicsLayerPaintChildClippingMask"); + if (m_paintingPhase & GraphicsLayerPaintAncestorClippingMask) + paintingPhasesJSON->pushString("GraphicsLayerPaintAncestorClippingMask"); if (m_paintingPhase & GraphicsLayerPaintOverflowContents) paintingPhasesJSON->pushString("GraphicsLayerPaintOverflowContents"); if (m_paintingPhase & GraphicsLayerPaintCompositedScroll)
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayerClient.h b/third_party/WebKit/Source/platform/graphics/GraphicsLayerClient.h index d5c81e5..c121f14 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayerClient.h +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayerClient.h
@@ -43,7 +43,8 @@ GraphicsLayerPaintOverflowContents = (1 << 3), GraphicsLayerPaintCompositedScroll = (1 << 4), GraphicsLayerPaintChildClippingMask = (1 << 5), - GraphicsLayerPaintDecoration = (1 << 6), + GraphicsLayerPaintAncestorClippingMask = (1 << 6), + GraphicsLayerPaintDecoration = (1 << 7), GraphicsLayerPaintAllWithOverflowClip = (GraphicsLayerPaintBackground | GraphicsLayerPaintForeground | GraphicsLayerPaintMask |
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp index d49378a..97bbe6a 100644 --- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp +++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -941,7 +941,7 @@ } unsigned WebLocalFrameImpl::unloadListenerCount() const { - return frame()->localDOMWindow()->pendingUnloadEventListeners(); + return frame()->domWindow()->pendingUnloadEventListeners(); } void WebLocalFrameImpl::replaceSelection(const WebString& text) { @@ -2062,7 +2062,7 @@ // Legacy window.orientation API if (RuntimeEnabledFeatures::orientationEventEnabled() && frame()->domWindow()) - frame()->localDOMWindow()->sendOrientationChangeEvent(); + frame()->domWindow()->sendOrientationChangeEvent(); } void WebLocalFrameImpl::didCallAddSearchProvider() { @@ -2179,7 +2179,7 @@ const WebSecurityOrigin& intendedTargetOrigin, const WebDOMEvent& event) { DCHECK(!event.isNull()); - frame()->localDOMWindow()->dispatchMessageEventWithOriginCheck( + frame()->domWindow()->dispatchMessageEventWithOriginCheck( intendedTargetOrigin.get(), event, SourceLocation::create(String(), 0, 0, nullptr)); }
diff --git a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp index 86336bd70..f7554080 100644 --- a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp +++ b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
@@ -304,7 +304,7 @@ m_popupClient->ownerElement().document().existingAXObjectCache()) cache->childrenChanged(&m_popupClient->ownerElement()); - DCHECK(frame->localDOMWindow()); + DCHECK(frame->domWindow()); PagePopupSupplement::install(*frame, *this, m_popupClient); DCHECK_EQ(m_popupClient->ownerElement().document().existingAXObjectCache(), frame->document()->existingAXObjectCache()); @@ -322,8 +322,7 @@ if (!m_page) return; ScriptForbiddenScope::AllowUserAgentScript allowScript; - if (LocalDOMWindow* window = - toLocalFrame(m_page->mainFrame())->localDOMWindow()) + if (LocalDOMWindow* window = toLocalFrame(m_page->mainFrame())->domWindow()) window->dispatchEvent(MessageEvent::create(message)); } @@ -545,7 +544,7 @@ } LocalDOMWindow* WebPagePopupImpl::window() { - return m_page->deprecatedLocalMainFrame()->localDOMWindow(); + return m_page->deprecatedLocalMainFrame()->domWindow(); } void WebPagePopupImpl::layoutAndPaintAsync(
diff --git a/third_party/WebKit/Source/web/WebUserGestureIndicator.cpp b/third_party/WebKit/Source/web/WebUserGestureIndicator.cpp index e1eaf1b..9e206ee 100644 --- a/third_party/WebKit/Source/web/WebUserGestureIndicator.cpp +++ b/third_party/WebKit/Source/web/WebUserGestureIndicator.cpp
@@ -40,8 +40,15 @@ return UserGestureIndicator::processingUserGesture(); } +bool WebUserGestureIndicator::isProcessingUserGestureThreadSafe() { + return UserGestureIndicator::processingUserGestureThreadSafe(); +} + +// TODO(csharrison): consumeUserGesture() and currentUserGestureToken() use +// the thread-safe API, which many callers probably do not need. Consider +// updating them if they are in any sort of critical path or called often. bool WebUserGestureIndicator::consumeUserGesture() { - return UserGestureIndicator::consumeUserGesture(); + return UserGestureIndicator::consumeUserGestureThreadSafe(); } bool WebUserGestureIndicator::processedUserGestureSinceLoad( @@ -51,7 +58,7 @@ } WebUserGestureToken WebUserGestureIndicator::currentUserGestureToken() { - return WebUserGestureToken(UserGestureIndicator::currentToken()); + return WebUserGestureToken(UserGestureIndicator::currentTokenThreadSafe()); } } // namespace blink
diff --git a/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp b/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp index 6c46408..99724999 100644 --- a/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp +++ b/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp
@@ -109,8 +109,8 @@ blink::Screen* screen() { DCHECK(frame()); - DCHECK(frame()->localDOMWindow()); - return frame()->localDOMWindow()->screen(); + DCHECK(frame()->domWindow()); + return frame()->domWindow()->screen(); } bool screenKeepAwake() {
diff --git a/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp b/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp index 354c64b..1a891323 100644 --- a/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp +++ b/third_party/WebKit/Source/web/tests/VisualViewportTest.cpp
@@ -1749,8 +1749,7 @@ // body element as the viewport and don't apply scrolling to the HTML element. RuntimeEnabledFeatures::setScrollTopLeftInteropEnabled(false); - LocalDOMWindow* window = - webViewImpl()->mainFrameImpl()->frame()->localDOMWindow(); + LocalDOMWindow* window = webViewImpl()->mainFrameImpl()->frame()->domWindow(); window->scrollTo(100, 150); EXPECT_EQ(100, window->scrollX()); EXPECT_EQ(150, window->scrollY());
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp index 018aea3..de74b3f 100644 --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -1001,7 +1001,7 @@ NonThrowableExceptionState exceptionState; MessagePortArray messagePorts; frame->domWindow()->postMessage(SerializedScriptValue::serialize("message"), - messagePorts, "*", frame->localDOMWindow(), + messagePorts, "*", frame->domWindow(), exceptionState); webViewHelper.reset(); EXPECT_FALSE(exceptionState.hadException()); @@ -9144,7 +9144,7 @@ ASSERT_TRUE(mainFrame()->isWebLocalFrame()); ASSERT_TRUE(mainFrame()->firstChild()->isWebRemoteFrame()); LocalDOMWindow* mainWindow = - toWebLocalFrameImpl(mainFrame())->frame()->localDOMWindow(); + toWebLocalFrameImpl(mainFrame())->frame()->domWindow(); KURL destination = toKURL("data:text/html:destination"); mainWindow->open(destination.getString(), "frame1", "", mainWindow,
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py index b46e9c2..acabb22 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py
@@ -286,7 +286,7 @@ self._update_test_input(test_input) start = time.time() - _log.debug("%s %s started", self._name, test_input.test_name) + # TODO(qyearsley): Re-add logging if it doesn't create too much load (crbug.com/673207). self._caller.post('started_test', test_input) result = single_test_runner.run_single_test( self._port, self._options, self._results_directory, self._name,
diff --git a/third_party/WebKit/public/web/WebUserGestureIndicator.h b/third_party/WebKit/public/web/WebUserGestureIndicator.h index 44b1cacb..1c63f2c 100644 --- a/third_party/WebKit/public/web/WebUserGestureIndicator.h +++ b/third_party/WebKit/public/web/WebUserGestureIndicator.h
@@ -40,8 +40,13 @@ class WebUserGestureIndicator { public: - // Returns true if a user gesture is currently being processed. + // Returns true if a user gesture is currently being processed. Must be called + // on the main thread. BLINK_EXPORT static bool isProcessingUserGesture(); + // Can be called from any thread. Note that this is slower than the non + // thread-safe version due to thread id lookups. Prefer the non thread-safe + // version for code that will only execute on the main thread. + BLINK_EXPORT static bool isProcessingUserGestureThreadSafe(); // Returns true if a consumable gesture exists and has been successfully // consumed.
diff --git a/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-client-protocol.h b/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-client-protocol.h index e931bfbf..5939b44 100644 --- a/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-client-protocol.h +++ b/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-client-protocol.h
@@ -96,6 +96,16 @@ */ extern const struct wl_interface zcr_keyboard_device_configuration_v1_interface; +#ifndef ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM +#define ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM +enum zcr_keyboard_configuration_v1_error { + /** + * the keyboard already has a device configuration object associated + */ + ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_DEVICE_CONFIGURATION_EXISTS = 0, +}; +#endif /* ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM */ + #define ZCR_KEYBOARD_CONFIGURATION_V1_GET_KEYBOARD_DEVICE_CONFIGURATION 0 /** @@ -135,6 +145,9 @@ * * Create keyboard_device_configuration object. * See zcr_keyboard_device_configuration interface for details. + * If the given wl_keyboard object already has a device configuration + * object associated, the keyboard_device_configuration_exists protocol + * error is raised. */ static inline struct zcr_keyboard_device_configuration_v1 * zcr_keyboard_configuration_v1_get_keyboard_device_configuration(struct zcr_keyboard_configuration_v1 *zcr_keyboard_configuration_v1, struct wl_keyboard *keyboard)
diff --git a/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-server-protocol.h b/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-server-protocol.h index 3eda503..5dbb81e5 100644 --- a/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-server-protocol.h +++ b/third_party/wayland-protocols/include/protocol/keyboard-configuration-unstable-v1-server-protocol.h
@@ -99,6 +99,16 @@ */ extern const struct wl_interface zcr_keyboard_device_configuration_v1_interface; +#ifndef ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM +#define ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM +enum zcr_keyboard_configuration_v1_error { + /** + * the keyboard already has a device configuration object associated + */ + ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_DEVICE_CONFIGURATION_EXISTS = 0, +}; +#endif /* ZCR_KEYBOARD_CONFIGURATION_V1_ERROR_ENUM */ + /** * @ingroup iface_zcr_keyboard_configuration_v1 * @struct zcr_keyboard_configuration_v1_interface @@ -108,7 +118,10 @@ * get keyboard_device_configuration interface for a keyboard * * Create keyboard_device_configuration object. See - * zcr_keyboard_device_configuration interface for details. + * zcr_keyboard_device_configuration interface for details. If the + * given wl_keyboard object already has a device configuration + * object associated, the keyboard_device_configuration_exists + * protocol error is raised. */ void (*get_keyboard_device_configuration)(struct wl_client *client, struct wl_resource *resource,
diff --git a/third_party/wayland-protocols/protocol/keyboard-configuration-protocol.c b/third_party/wayland-protocols/protocol/keyboard-configuration-protocol.c index b17117a4..0bddf1c 100644 --- a/third_party/wayland-protocols/protocol/keyboard-configuration-protocol.c +++ b/third_party/wayland-protocols/protocol/keyboard-configuration-protocol.c
@@ -41,7 +41,7 @@ }; WL_EXPORT const struct wl_interface zcr_keyboard_configuration_v1_interface = { - "zcr_keyboard_configuration_v1", 1, + "zcr_keyboard_configuration_v1", 2, 1, zcr_keyboard_configuration_v1_requests, 0, NULL, };
diff --git a/third_party/wayland-protocols/unstable/keyboard/keyboard-configuration-unstable-v1.xml b/third_party/wayland-protocols/unstable/keyboard/keyboard-configuration-unstable-v1.xml index 6acd844f..8d3cf72 100644 --- a/third_party/wayland-protocols/unstable/keyboard/keyboard-configuration-unstable-v1.xml +++ b/third_party/wayland-protocols/unstable/keyboard/keyboard-configuration-unstable-v1.xml
@@ -24,7 +24,7 @@ DEALINGS IN THE SOFTWARE. </copyright> - <interface name="zcr_keyboard_configuration_v1" version="1"> + <interface name="zcr_keyboard_configuration_v1" version="2"> <description summary="extends wl_keyboard with events for device configuration change"> Allows a wl_keyboard to notify device configuration change events of the keyboard to the client. @@ -39,10 +39,18 @@ interface version number is reset. </description> + <enum name="error"> + <entry name="device_configuration_exists" value="0" + summary="the keyboard already has a device configuration object associated"/> + </enum> + <request name="get_keyboard_device_configuration"> <description summary="get keyboard_device_configuration interface for a keyboard"> Create keyboard_device_configuration object. See zcr_keyboard_device_configuration interface for details. + If the given wl_keyboard object already has a device configuration + object associated, the keyboard_device_configuration_exists protocol + error is raised. </description> <arg name="id" type="new_id" interface="zcr_keyboard_device_configuration_v1"/> <arg name="keyboard" type="object" interface="wl_keyboard"/>
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 6ab466f..617710b 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -27,7 +27,7 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. -CLANG_REVISION = '288545' +CLANG_REVISION = '289228' use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ if use_head_revision:
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 90f5d6a2..50a7c2c 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -186,7 +186,7 @@ 'Site Isolation Android': 'android_release_bot_minimal_symbols_arm64', 'Site Isolation Linux': 'release_trybot', 'Site Isolation Win': 'release_trybot_x86', - 'ThinLTO Linux ToT': 'thin_lto_clang_tot_release_static', + 'ThinLTO Linux ToT': 'thin_lto_clang_tot_release_static_use_lld', 'UBSanVptr Linux': 'ubsan_vptr_release_bot', 'WebKit Linux - TraceWrappables': 'debug_bot', 'WebKit Linux - WPTServe': 'release_bot', @@ -1405,8 +1405,8 @@ 'syzyasan', 'no_pch', 'release', 'x86', ], - 'thin_lto_clang_tot_release_static': [ - 'thin_lto', 'clang_tot', 'release', 'static', + 'thin_lto_clang_tot_release_static_use_lld': [ + 'thin_lto', 'clang_tot', 'release', 'static', 'use_lld', ], 'tsan_disable_nacl_debug_bot': [
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 31dc08ef..f01549c 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -9160,6 +9160,19 @@ </summary> </histogram> +<histogram name="DataReductionProxy.WarmupURL.FetchInitiated" units="count"> + <owner>tbansal@chromium.org</owner> + <summary> + Number of times the data reduction proxy warm up URL was fetched. + </summary> +</histogram> + +<histogram name="DataReductionProxy.WarmupURL.FetchSuccessful" + enum="BooleanSuccess"> + <owner>tbansal@chromium.org</owner> + <summary>Whether the warm up URL was fetched succesfully.</summary> +</histogram> + <histogram name="DataUsage.MatchingRulesCount.Invalid" units="count"> <owner>bengr@chromium.org</owner> <owner>rajendrant@chromium.org</owner>
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn index 8914f3c..a6e576b2 100644 --- a/tools/perf/chrome_telemetry_build/BUILD.gn +++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -85,7 +85,57 @@ data = [ "//tools/perf/chrome_telemetry_build/", - "//third_party/catapult/", + + # Breakdown the catapult directory so we can exclude + # third_party/catapult/tracing/test_data. See crbug.com/670284 + "//third_party/catapult/AUTHORS", + "//third_party/catapult/bin/", + "//third_party/catapult/catapult_build/", + "//third_party/catapult/codereview.settings", + "//third_party/catapult/common/", + "//third_party/catapult/CONTRIBUTING.md", + "//third_party/catapult/dashboard/", + "//third_party/catapult/dependency_manager/", + "//third_party/catapult/devil/", + "//third_party/catapult/docs/", + "//third_party/catapult/experimental/", + "//third_party/catapult/firefighter/", + "//third_party/catapult/hooks/", + "//third_party/catapult/infra/", + "//third_party/catapult/LICENSE", + "//third_party/catapult/navbar.md", + "//third_party/catapult/netlog_viewer/", + "//third_party/catapult/OWNERS", + "//third_party/catapult/PRESUBMIT.py", + "//third_party/catapult/pylintrc", + "//third_party/catapult/README.md", + "//third_party/catapult/systrace/", + "//third_party/catapult/telemetry/", + "//third_party/catapult/third_party/", + "//third_party/catapult/trace_processor/", + + # We don't want to include catapult/tracing/test_data + "//third_party/catapult/tracing/app.yaml", + "//third_party/catapult/tracing/bin/", + "//third_party/catapult/tracing/bower.json", + "//third_party/catapult/tracing/BUILD.gn", + "//third_party/catapult/tracing/docs/", + "//third_party/catapult/tracing/images/", + "//third_party/catapult/tracing/LICENSE", + "//third_party/catapult/tracing/OWNERS", + "//third_party/catapult/tracing/package.json", + "//third_party/catapult/tracing/PRESUBMIT.py", + "//third_party/catapult/tracing/README.md", + "//third_party/catapult/tracing/skp_data/", + "//third_party/catapult/tracing/third_party/", + "//third_party/catapult/tracing/trace_viewer.gyp", + "//third_party/catapult/tracing/trace_viewer.gypi", + "//third_party/catapult/tracing/tracing/", + "//third_party/catapult/tracing/tracing_build/", + "//third_party/catapult/tracing/tracing_examples/", + "//third_party/catapult/tracing/tracing_project.py", + "//third_party/catapult/WATCHLISTS", + "//components/crash/content/tools/generate_breakpad_symbols.py", ]
diff --git a/tools/perf/generate_perf_json.py b/tools/perf/generate_perf_json.py index b0c29a4..14869ee 100755 --- a/tools/perf/generate_perf_json.py +++ b/tools/perf/generate_perf_json.py
@@ -152,7 +152,13 @@ { 'gpu': '8086:22b1', 'os': 'Windows-10-10586', - 'device_ids': ['build47-b4', 'build48-b4'], + 'device_ids': [ + 'build136-b1', 'build137-b1', 'build138-b1', 'build139-b1', + 'build140-b1', 'build141-b1', 'build142-b1', 'build143-b1', + 'build144-b1', 'build145-b1', 'build146-b1', 'build147-b1', + 'build148-b1', 'build149-b1', 'build150-b1', 'build151-b1', + 'build152-b1', 'build153-b1', 'build154-b1', 'build155-b1', + 'build47-b4', 'build48-b4'], 'perf_tests': [ ('cc_perftests', 0), ('gpu_perftests', 0), @@ -161,8 +167,7 @@ ('performance_browser_tests', 1), ('tracing_perftests', 1)] } - ], - use_whitelist=True) + ]) waterfall = add_tester( waterfall, 'Android Swarming N5X Tester', 'fyi-android-swarming-n5x', 'android', @@ -177,8 +182,7 @@ 'build245-m4--device7' ] } - ], - use_whitelist=True) + ]) return waterfall @@ -692,6 +696,7 @@ benchmark_sharding_map['22'] = shard_benchmarks(22, all_benchmarks) benchmark_sharding_map['5'] = shard_benchmarks(5, all_benchmarks) benchmark_sharding_map['1'] = shard_benchmarks(1, all_benchmarks) + benchmark_sharding_map['7'] = shard_benchmarks(7, all_benchmarks) for name, config in waterfall['testers'].iteritems(): use_whitelist = config['use_whitelist']
diff --git a/ui/android/java/res/layout/dropdown_item.xml b/ui/android/java/res/layout/dropdown_item.xml index 29964fbf..5159c83 100644 --- a/ui/android/java/res/layout/dropdown_item.xml +++ b/ui/android/java/res/layout/dropdown_item.xml
@@ -12,7 +12,6 @@ android:orientation="horizontal" > <!-- These layout params are overwritten in DropdownAdapter.java --> - <ImageView android:id="@+id/start_dropdown_icon" android:layout_width="wrap_content"
diff --git a/ui/android/java/src/org/chromium/ui/DropdownAdapter.java b/ui/android/java/src/org/chromium/ui/DropdownAdapter.java index d8ad3f3..2a5a6e3 100644 --- a/ui/android/java/src/org/chromium/ui/DropdownAdapter.java +++ b/ui/android/java/src/org/chromium/ui/DropdownAdapter.java
@@ -30,14 +30,34 @@ private final Context mContext; private final Set<Integer> mSeparators; private final boolean mAreAllItemsEnabled; + private final Integer mBackgroundColor; + private final Integer mDividerColor; + private final Integer mDropdownItemHeight; - public DropdownAdapter( - Context context, List<? extends DropdownItem> items, Set<Integer> separators) { + /** + * Creates an {@code ArrayAdapter} with specified parameters. + * @param context Application context. + * @param items List of labels and icons to display. + * @param separators Set of positions that separate {@code items}. + * @param backgroundColor Popup background color, or {@code null} to use default background + * color. The default color is {@code Color.TRANSPARENT}. + * @param dividerColor If {@code null}, use the values in colors.xml for the divider + * between items. Otherwise, uses {@param dividerColor} for the divider between items. Always + * uses the values in colors.xml for the dark divider for the separators. + * @param dropdownItemHeight If {@code null}, uses the {@code dropdown_item_height} in + * dimens.xml. Otherwise, uses {@param dropdownItemHeight}. + */ + public DropdownAdapter(Context context, List<? extends DropdownItem> items, + Set<Integer> separators, Integer backgroundColor, Integer dividerColor, + Integer dropdownItemHeight) { super(context, R.layout.dropdown_item); + mContext = context; addAll(items); mSeparators = separators; - mContext = context; mAreAllItemsEnabled = checkAreAllItemsEnabled(); + mBackgroundColor = backgroundColor; + mDividerColor = dividerColor; + mDropdownItemHeight = dropdownItemHeight; } private boolean checkAreAllItemsEnabled() { @@ -57,25 +77,35 @@ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); layout = inflater.inflate(R.layout.dropdown_item, null); - layout.setBackground(new DropdownDividerDrawable()); + layout.setBackground(new DropdownDividerDrawable(mBackgroundColor)); + } + DropdownDividerDrawable divider = (DropdownDividerDrawable) layout.getBackground(); + int height; + if (mDropdownItemHeight == null) { + height = mContext.getResources().getDimensionPixelSize(R.dimen.dropdown_item_height); + } else { + height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + mDropdownItemHeight, mContext.getResources().getDisplayMetrics()); } - DropdownDividerDrawable divider = (DropdownDividerDrawable) layout.getBackground(); - int height = mContext.getResources().getDimensionPixelSize(R.dimen.dropdown_item_height); if (position == 0) { - divider.setColor(Color.TRANSPARENT); + divider.setDividerColor(Color.TRANSPARENT); } else { int dividerHeight = mContext.getResources().getDimensionPixelSize( R.dimen.dropdown_item_divider_height); height += dividerHeight; divider.setHeight(dividerHeight); + int dividerColor; if (mSeparators != null && mSeparators.contains(position)) { - divider.setColor(ApiCompatibilityUtils.getColor(mContext.getResources(), - R.color.dropdown_dark_divider_color)); + dividerColor = ApiCompatibilityUtils.getColor(mContext.getResources(), + R.color.dropdown_dark_divider_color); + } else if (mDividerColor == null) { + dividerColor = ApiCompatibilityUtils.getColor(mContext.getResources(), + R.color.dropdown_divider_color); } else { - divider.setColor(ApiCompatibilityUtils.getColor(mContext.getResources(), - R.color.dropdown_divider_color)); + dividerColor = mDividerColor; } + divider.setDividerColor(dividerColor); } DropdownItem item = getItem(position); @@ -113,7 +143,7 @@ } labelView.setEnabled(item.isEnabled()); - if (item.isGroupHeader()) { + if (item.isGroupHeader() || item.isBoldLabel()) { labelView.setTypeface(null, Typeface.BOLD); } else { labelView.setTypeface(null, Typeface.NORMAL);
diff --git a/ui/android/java/src/org/chromium/ui/DropdownDividerDrawable.java b/ui/android/java/src/org/chromium/ui/DropdownDividerDrawable.java index 014192a5..1b45064f 100644 --- a/ui/android/java/src/org/chromium/ui/DropdownDividerDrawable.java +++ b/ui/android/java/src/org/chromium/ui/DropdownDividerDrawable.java
@@ -13,16 +13,24 @@ class DropdownDividerDrawable extends Drawable { - private Paint mPaint; - private Rect mDividerRect; + private final Paint mPaint; + private final Rect mDividerRect; + private final Integer mBackgroundColor; - public DropdownDividerDrawable() { + /** + * Creates a drawable to draw a divider line that separates the list of {@link DropdownItem} + * and, optionally, paints the rectangular canvas. + * @param backgroundColor Popup background color. If {@code null}, does not paint the canvas. + */ + public DropdownDividerDrawable(Integer backgroundColor) { mPaint = new Paint(); mDividerRect = new Rect(); + mBackgroundColor = backgroundColor; } @Override public void draw(Canvas canvas) { + if (mBackgroundColor != null) canvas.drawColor(mBackgroundColor); canvas.drawRect(mDividerRect, mPaint); } @@ -35,7 +43,7 @@ mDividerRect.set(0, 0, mDividerRect.right, height); } - public void setColor(int color) { + public void setDividerColor(int color) { mPaint.setColor(color); }
diff --git a/ui/android/java/src/org/chromium/ui/DropdownItem.java b/ui/android/java/src/org/chromium/ui/DropdownItem.java index 7ad26d5..d28db1d 100644 --- a/ui/android/java/src/org/chromium/ui/DropdownItem.java +++ b/ui/android/java/src/org/chromium/ui/DropdownItem.java
@@ -36,6 +36,10 @@ */ boolean isMultilineLabel(); /** + * Returns whether the label should be displayed in bold. + */ + boolean isBoldLabel(); + /** * Returns resource ID of label's font color. */ int getLabelFontColorResId();
diff --git a/ui/android/java/src/org/chromium/ui/DropdownItemBase.java b/ui/android/java/src/org/chromium/ui/DropdownItemBase.java index 9554d33..9a0c7658 100644 --- a/ui/android/java/src/org/chromium/ui/DropdownItemBase.java +++ b/ui/android/java/src/org/chromium/ui/DropdownItemBase.java
@@ -40,6 +40,11 @@ } @Override + public boolean isBoldLabel() { + return false; + } + + @Override public int getLabelFontColorResId() { return R.drawable.dropdown_label_color; }
diff --git a/ui/aura/mus/text_input_client_impl.cc b/ui/aura/mus/text_input_client_impl.cc index 2dbc39e..782e834 100644 --- a/ui/aura/mus/text_input_client_impl.cc +++ b/ui/aura/mus/text_input_client_impl.cc
@@ -38,9 +38,7 @@ void TextInputClientImpl::InsertChar(std::unique_ptr<ui::Event> event) { DCHECK(event->IsKeyEvent()); - ui::KeyEvent* key_event = event->AsKeyEvent(); - DCHECK(key_event->is_char()); - text_input_client_->InsertChar(*key_event); + text_input_client_->InsertChar(*event->AsKeyEvent()); } } // namespace aura
diff --git a/ui/base/ime/input_method_chromeos.cc b/ui/base/ime/input_method_chromeos.cc index a8ac902..27d0a559 100644 --- a/ui/base/ime/input_method_chromeos.cc +++ b/ui/base/ime/input_method_chromeos.cc
@@ -57,34 +57,9 @@ ui::IMEBridge::Get()->SetInputContextHandler(NULL); } -bool InputMethodChromeOS::OnUntranslatedIMEMessage( - const base::NativeEvent& event, - NativeEventResult* result) { - return false; -} - -void InputMethodChromeOS::ProcessKeyEventDone(ui::KeyEvent* event, - bool is_handled) { - DCHECK(event); - if (event->type() == ET_KEY_PRESSED) { - if (is_handled) { - // IME event has a priority to be handled, so that character composer - // should be reset. - character_composer_.Reset(); - } else { - // If IME does not handle key event, passes keyevent to character composer - // to be able to compose complex characters. - is_handled = ExecuteCharacterComposer(*event); - } - } - - if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED) - ProcessKeyEventPostIME(event, is_handled); - - handling_key_event_ = false; -} - -void InputMethodChromeOS::DispatchKeyEvent(ui::KeyEvent* event) { +void InputMethodChromeOS::DispatchKeyEvent( + ui::KeyEvent* event, + std::unique_ptr<AckCallback> ack_callback) { DCHECK(event->IsKeyEvent()); DCHECK(!(event->flags() & ui::EF_IS_SYNTHESIZED)); @@ -114,28 +89,68 @@ // Treating as PostIME event if character composer handles key event and // generates some IME event, ProcessKeyEventPostIME(event, true); + if (ack_callback) + ack_callback->Run(true); return; } ProcessUnfilteredKeyPressEvent(event); } else { ignore_result(DispatchKeyEventPostIME(event)); } + if (ack_callback) + ack_callback->Run(false); return; } handling_key_event_ = true; if (GetEngine()->IsInterestedInKeyEvent()) { - ui::IMEEngineHandlerInterface::KeyEventDoneCallback callback = - base::Bind(&InputMethodChromeOS::ProcessKeyEventDone, - weak_ptr_factory_.GetWeakPtr(), - // Pass the ownership of the new copied event. - base::Owned(new ui::KeyEvent(*event))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback callback = base::Bind( + &InputMethodChromeOS::ProcessKeyEventDone, + weak_ptr_factory_.GetWeakPtr(), + // Pass the ownership of the new copied event. + base::Owned(new ui::KeyEvent(*event)), Passed(&ack_callback)); GetEngine()->ProcessKeyEvent(*event, callback); } else { - ProcessKeyEventDone(event, false); + ProcessKeyEventDone(event, std::move(ack_callback), false); } } +bool InputMethodChromeOS::OnUntranslatedIMEMessage( + const base::NativeEvent& event, + NativeEventResult* result) { + return false; +} + +void InputMethodChromeOS::ProcessKeyEventDone( + ui::KeyEvent* event, + std::unique_ptr<AckCallback> ack_callback, + bool is_handled) { + DCHECK(event); + if (event->type() == ET_KEY_PRESSED) { + if (is_handled) { + // IME event has a priority to be handled, so that character composer + // should be reset. + character_composer_.Reset(); + } else { + // If IME does not handle key event, passes keyevent to character composer + // to be able to compose complex characters. + is_handled = ExecuteCharacterComposer(*event); + } + } + + if (ack_callback) + ack_callback->Run(is_handled); + + if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED) + ProcessKeyEventPostIME(event, is_handled); + + handling_key_event_ = false; +} + +void InputMethodChromeOS::DispatchKeyEvent(ui::KeyEvent* event) { + DispatchKeyEvent(event, nullptr); +} + void InputMethodChromeOS::OnTextInputTypeChanged( const TextInputClient* client) { if (!IsTextInputClientFocused(client))
diff --git a/ui/base/ime/input_method_chromeos.h b/ui/base/ime/input_method_chromeos.h index a4145cdd..e3a8728 100644 --- a/ui/base/ime/input_method_chromeos.h +++ b/ui/base/ime/input_method_chromeos.h
@@ -27,6 +27,10 @@ explicit InputMethodChromeOS(internal::InputMethodDelegate* delegate); ~InputMethodChromeOS() override; + using AckCallback = base::Callback<void(bool)>; + void DispatchKeyEvent(ui::KeyEvent* event, + std::unique_ptr<AckCallback> ack_callback); + // Overridden from InputMethod: bool OnUntranslatedIMEMessage(const base::NativeEvent& event, NativeEventResult* result) override; @@ -100,7 +104,9 @@ void HidePreeditText(); // Callback function for IMEEngineHandlerInterface::ProcessKeyEvent. - void ProcessKeyEventDone(ui::KeyEvent* event, bool is_handled); + void ProcessKeyEventDone(ui::KeyEvent* event, + std::unique_ptr<AckCallback> ack_callback, + bool is_handled); // Returns whether an non-password input field is focused. bool IsNonPasswordInputFieldFocused();
diff --git a/ui/login/account_picker/screen_account_picker.js b/ui/login/account_picker/screen_account_picker.js index 7cac00b..5044a3d 100644 --- a/ui/login/account_picker/screen_account_picker.js +++ b/ui/login/account_picker/screen_account_picker.js
@@ -266,6 +266,14 @@ * @param {array} users Array of user instances. */ initializePinKeyboardStateForUsers_: function(users) { + // It is possible that the PIN keyboard HTML has already been loaded. If + // that is the case, we want to show the user pods with the PIN keyboard + // immediately without running the PIN show/hide effect. + document.body.classList.add('disable-pin-animation'); + setTimeout(function() { + document.body.classList.remove('disable-pin-animation'); + }); + for (var i = 0; i < users.length; ++i) { var user = users[i]; if (user.showPin) {
diff --git a/ui/login/account_picker/user_pod_row.css b/ui/login/account_picker/user_pod_row.css index f4bf5d6..7ef24e11 100644 --- a/ui/login/account_picker/user_pod_row.css +++ b/ui/login/account_picker/user_pod_row.css
@@ -54,6 +54,10 @@ top: -87px !important; } +.disable-pin-animation .pod.pin-enabled { + transition: none; +} + .pod .pin-container { height: 204px; position: absolute;
diff --git a/ui/login/screen_container.css b/ui/login/screen_container.css index cf505f2d..6e0fcfe 100644 --- a/ui/login/screen_container.css +++ b/ui/login/screen_container.css
@@ -34,6 +34,10 @@ checked to determine if loaded. */ } +.disable-pin-animation .pin-container { + transition: none; +} + #scroll-container { bottom: 0; /* Allows content overlap with control bar. */ left: 0;
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc index 03738f8..21891fc 100644 --- a/ui/views/controls/button/label_button.cc +++ b/ui/views/controls/button/label_button.cc
@@ -159,25 +159,13 @@ label_->SetSubpixelRenderingEnabled(enabled); } -const gfx::FontList& LabelButton::GetFontList() const { - return label_->font_list(); -} - -void LabelButton::SetFontList(const gfx::FontList& font_list) { - cached_normal_font_list_ = font_list; - if (PlatformStyle::kDefaultLabelButtonHasBoldFont) { - cached_bold_font_list_ = font_list.DeriveWithWeight( - GetValueBolderThan(font_list.GetFontWeight())); - if (is_default_) { - label_->SetFontList(cached_bold_font_list_); - return; - } - } - label_->SetFontList(cached_normal_font_list_); +void LabelButton::SetFontListDeprecated(const gfx::FontList& font_list) { + SetFontList(font_list); } void LabelButton::AdjustFontSize(int font_size_delta) { - LabelButton::SetFontList(GetFontList().DeriveWithSizeDelta(font_size_delta)); + LabelButton::SetFontList( + label()->font_list().DeriveWithSizeDelta(font_size_delta)); } void LabelButton::SetElideBehavior(gfx::ElideBehavior elide_behavior) { @@ -393,6 +381,19 @@ return GetLocalBounds(); } +void LabelButton::SetFontList(const gfx::FontList& font_list) { + cached_normal_font_list_ = font_list; + if (PlatformStyle::kDefaultLabelButtonHasBoldFont) { + cached_bold_font_list_ = font_list.DeriveWithWeight( + GetValueBolderThan(font_list.GetFontWeight())); + if (is_default_) { + label_->SetFontList(cached_bold_font_list_); + return; + } + } + label_->SetFontList(cached_normal_font_list_); +} + void LabelButton::OnPaint(gfx::Canvas* canvas) { View::OnPaint(canvas); Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h index a78ccb0..6228ab2b 100644 --- a/ui/views/controls/button/label_button.h +++ b/ui/views/controls/button/label_button.h
@@ -56,10 +56,8 @@ // Sets whether subpixel rendering is used on the label. void SetTextSubpixelRenderingEnabled(bool enabled); - // Gets or sets the font list used by this button. - const gfx::FontList& GetFontList() const; - // TODO(estade): make this function protected. - virtual void SetFontList(const gfx::FontList& font_list); + // TODO(estade): remove. See crbug.com/633986 + void SetFontListDeprecated(const gfx::FontList& font_list); // Adjusts the font size up or down by the given amount. virtual void AdjustFontSize(int font_size_delta); @@ -120,6 +118,9 @@ // these bounds if they need room to do manual painting. virtual gfx::Rect GetChildAreaBounds(); + // Sets the font list used by this button. + virtual void SetFontList(const gfx::FontList& font_list); + // View: void OnPaint(gfx::Canvas* canvas) override; void OnFocus() override;
diff --git a/ui/views/controls/button/label_button_unittest.cc b/ui/views/controls/button/label_button_unittest.cc index 4696e73..459991d 100644 --- a/ui/views/controls/button/label_button_unittest.cc +++ b/ui/views/controls/button/label_button_unittest.cc
@@ -291,24 +291,21 @@ EXPECT_LT(button_->GetPreferredSize().height(), image_size); } -TEST_F(LabelButtonTest, FontList) { +TEST_F(LabelButtonTest, AdjustFontSize) { button_->SetText(base::ASCIIToUTF16("abc")); - const gfx::FontList original_font_list = button_->GetFontList(); - const gfx::FontList large_font_list = - original_font_list.DeriveWithSizeDelta(100); const int original_width = button_->GetPreferredSize().width(); const int original_height = button_->GetPreferredSize().height(); // The button size increases when the font size is increased. - button_->SetFontList(large_font_list); + button_->AdjustFontSize(100); EXPECT_GT(button_->GetPreferredSize().width(), original_width); EXPECT_GT(button_->GetPreferredSize().height(), original_height); // The button returns to its original size when the minimal size is cleared // and the original font size is restored. button_->SetMinSize(gfx::Size()); - button_->SetFontList(original_font_list); + button_->AdjustFontSize(-100); EXPECT_EQ(original_width, button_->GetPreferredSize().width()); EXPECT_EQ(original_height, button_->GetPreferredSize().height()); }
diff --git a/ui/views/mus/text_input_client_impl.cc b/ui/views/mus/text_input_client_impl.cc index 9e5b216..4193e127 100644 --- a/ui/views/mus/text_input_client_impl.cc +++ b/ui/views/mus/text_input_client_impl.cc
@@ -38,9 +38,7 @@ void TextInputClientImpl::InsertChar(std::unique_ptr<ui::Event> event) { DCHECK(event->IsKeyEvent()); - ui::KeyEvent* key_event = event->AsKeyEvent(); - DCHECK(key_event->is_char()); - text_input_client_->InsertChar(*key_event); + text_input_client_->InsertChar(*event->AsKeyEvent()); } } // namespace views
diff --git a/ui/wm/core/shadow.cc b/ui/wm/core/shadow.cc index 8319095..6b1290d 100644 --- a/ui/wm/core/shadow.cc +++ b/ui/wm/core/shadow.cc
@@ -15,10 +15,6 @@ namespace { -// The opacity used for active shadow when animating between -// inactive/active shadow. -const float kInactiveShadowAnimationOpacity = 0.2f; - // Rounded corners are overdrawn on top of the window's content layer, // we need to exclude them from the occlusion area. const int kRoundedCornerRadius = 2; @@ -73,18 +69,16 @@ void Shadow::Init(Style style) { style_ = style; - layer_.reset(new ui::Layer(ui::LAYER_NOT_DRAWN)); - shadow_layer_.reset(new ui::Layer(ui::LAYER_NINE_PATCH)); - layer()->Add(shadow_layer_.get()); - - UpdateImagesForStyle(); - shadow_layer_->set_name("Shadow"); - shadow_layer_->SetVisible(true); - shadow_layer_->SetFillsBoundsOpaquely(false); + RecreateShadowLayer(); } void Shadow::SetContentBounds(const gfx::Rect& content_bounds) { + // When the window moves but doesn't change size, this is a no-op. (The + // origin stays the same in this case.) + if (content_bounds == content_bounds_) + return; + content_bounds_ = content_bounds; UpdateLayerBounds(); } @@ -93,64 +87,49 @@ if (style_ == style) return; - Style old_style = style_; style_ = style; // Stop waiting for any as yet unfinished implicit animations. StopObservingImplicitAnimations(); - // If we're switching to or from the small style, don't bother with - // animations. - if (style == STYLE_SMALL || old_style == STYLE_SMALL) { - UpdateImagesForStyle(); - // Make sure the shadow is fully opaque. - shadow_layer_->SetOpacity(1.0f); - return; - } - - // If we're becoming active, switch images now. Because the inactive image - // has a very low opacity the switch isn't noticeable and this approach - // allows us to use only a single set of shadow images at a time. - if (style == STYLE_ACTIVE) { - UpdateImagesForStyle(); - // Opacity was baked into inactive image, start opacity low to match. - shadow_layer_->SetOpacity(kInactiveShadowAnimationOpacity); - } + // The old shadow layer is the new fading out layer. + DCHECK(shadow_layer_); + fading_layer_ = std::move(shadow_layer_); + RecreateShadowLayer(); + shadow_layer_->SetOpacity(0.f); { - // Property sets within this scope will be implicitly animated. - ui::ScopedLayerAnimationSettings settings(shadow_layer_->GetAnimator()); + // Observe the fade out animation so we can clean up the layer when done. + ui::ScopedLayerAnimationSettings settings(fading_layer_->GetAnimator()); settings.AddObserver(this); settings.SetTransitionDuration( base::TimeDelta::FromMilliseconds(kShadowAnimationDurationMs)); - switch (style_) { - case STYLE_ACTIVE: - // Animate the active shadow from kInactiveShadowAnimationOpacity to - // 1.0f. - shadow_layer_->SetOpacity(1.0f); - break; - case STYLE_INACTIVE: - // The opacity will be reset to 1.0f when animation is completed. - shadow_layer_->SetOpacity(kInactiveShadowAnimationOpacity); - break; - default: - NOTREACHED() << "Unhandled style " << style_; - break; - } + fading_layer_->SetOpacity(0.f); + } + + { + // We don't care to observe this one. + ui::ScopedLayerAnimationSettings settings(shadow_layer_->GetAnimator()); + settings.SetTransitionDuration( + base::TimeDelta::FromMilliseconds(kShadowAnimationDurationMs)); + shadow_layer_->SetOpacity(1.f); } } void Shadow::OnImplicitAnimationsCompleted() { - // If we just finished going inactive, switch images. This doesn't cause - // a visual pop because the inactive image opacity is so low. - if (style_ == STYLE_INACTIVE) { - UpdateImagesForStyle(); - // Opacity is baked into inactive image, so set fully opaque. - shadow_layer_->SetOpacity(1.0f); - } + fading_layer_.reset(); + // The size needed for layer() may be smaller now that |fading_layer_| is + // removed. + UpdateLayerBounds(); } -void Shadow::UpdateImagesForStyle() { +void Shadow::RecreateShadowLayer() { + shadow_layer_.reset(new ui::Layer(ui::LAYER_NINE_PATCH)); + shadow_layer_->set_name("Shadow"); + shadow_layer_->SetVisible(true); + shadow_layer_->SetFillsBoundsOpaquely(false); + layer()->Add(shadow_layer_.get()); + const ShadowDetails& details = GetDetailsForElevation(ElevationForStyle()); shadow_layer_->UpdateNinePatchLayerImage(details.ninebox_image); // The ninebox grid is defined in terms of the image size. The shadow blurs in @@ -170,15 +149,37 @@ // Shadow margins are negative, so this expands outwards from // |content_bounds_|. const gfx::Insets margins = gfx::ShadowValue::GetMargin(details.values); - gfx::Rect layer_bounds = content_bounds_; - layer_bounds.Inset(margins); - layer()->SetBounds(layer_bounds); - const gfx::Rect shadow_layer_bounds(layer_bounds.size()); + gfx::Rect new_layer_bounds = content_bounds_; + new_layer_bounds.Inset(margins); + gfx::Rect shadow_layer_bounds(new_layer_bounds.size()); + + // When there's an old shadow fading out, the bounds of layer() have to be + // big enough to encompass both shadows. + if (fading_layer_) { + const gfx::Rect old_layer_bounds = layer()->bounds(); + gfx::Rect combined_layer_bounds = old_layer_bounds; + combined_layer_bounds.Union(new_layer_bounds); + layer()->SetBounds(combined_layer_bounds); + + // If this is reached via SetContentBounds, we might hypothetically need + // to change the size of the fading layer, but the fade is so fast it's + // not really an issue. + gfx::Rect fading_layer_bounds(fading_layer_->bounds()); + fading_layer_bounds.Offset(old_layer_bounds.origin() - + combined_layer_bounds.origin()); + fading_layer_->SetBounds(fading_layer_bounds); + + shadow_layer_bounds.Offset(new_layer_bounds.origin() - + combined_layer_bounds.origin()); + } else { + layer()->SetBounds(new_layer_bounds); + } + shadow_layer_->SetBounds(shadow_layer_bounds); // Occlude the region inside the bounding box. Occlusion uses shadow layer // space. See nine_patch_layer.h for more context on what's going on here. - gfx::Rect occlusion_bounds = shadow_layer_bounds; + gfx::Rect occlusion_bounds(shadow_layer_bounds.size()); occlusion_bounds.Inset(-margins + gfx::Insets(kRoundedCornerRadius)); shadow_layer_->UpdateNinePatchOcclusion(occlusion_bounds);
diff --git a/ui/wm/core/shadow.h b/ui/wm/core/shadow.h index e0b7a1db..24fbfed 100644 --- a/ui/wm/core/shadow.h +++ b/ui/wm/core/shadow.h
@@ -62,8 +62,8 @@ void OnImplicitAnimationsCompleted() override; private: - // Updates the shadow images to the current |style_|. - void UpdateImagesForStyle(); + // Updates the shadow layer and its image to the current |style_|. + void RecreateShadowLayer(); // Updates the shadow layer bounds based on the inteior inset and the current // |content_bounds_|. @@ -84,6 +84,10 @@ // The actual shadow layer corresponding to a cc::NinePatchLayer. std::unique_ptr<ui::Layer> shadow_layer_; + // When the style changes, the old shadow cross-fades with the new one. + // When non-null, this is an old |shadow_layer_| that's being animated out. + std::unique_ptr<ui::Layer> fading_layer_; + // Bounds of the content that the shadow encloses. gfx::Rect content_bounds_;