[gnome-shell] search: survive the provider reporting the wrong number of metas
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] search: survive the provider reporting the wrong number of metas
- Date: Wed, 12 Mar 2014 18:26:46 +0000 (UTC)
commit 492558a2d27270a5f491f5ad4982cc46410ce258
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Mon Feb 24 17:24:42 2014 +0100
search: survive the provider reporting the wrong number of metas
If a provider crashes during GetResultMetas, or returns the wrong
number of metas, report it as failing but don't cause a JS exception.
https://bugzilla.gnome.org/show_bug.cgi?id=725020
js/ui/search.js | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/search.js b/js/ui/search.js
index e9ae6c8..e544497 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -340,12 +340,22 @@ const SearchResultsBase = new Lang.Class({
}));
if (metasNeeded.length === 0) {
- callback();
+ callback(true);
} else {
this._cancellable.cancel();
this._cancellable.reset();
this.provider.getResultMetas(metasNeeded, Lang.bind(this, function(metas) {
+ if (metas.length == 0) {
+ callback(false);
+ return;
+ }
+ if (metas.length != metasNeeded.length) {
+ log('Wrong number of result metas returned by search provider');
+ callback(false);
+ return;
+ }
+
metasNeeded.forEach(Lang.bind(this, function(resultId, i) {
let meta = metas[i];
let display = this._createResultDisplay(meta);
@@ -353,7 +363,7 @@ const SearchResultsBase = new Lang.Class({
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
this._resultDisplays[resultId] = display;
}));
- callback();
+ callback(true);
}), this._cancellable);
}
},
@@ -370,8 +380,10 @@ const SearchResultsBase = new Lang.Class({
let results = this.provider.filterResults(providerResults, maxResults);
let hasMoreResults = results.length < providerResults.length;
- this._ensureResultActors(results, Lang.bind(this, function() {
+ this._ensureResultActors(results, Lang.bind(this, function(successful) {
this._clearResultDisplay();
+ if (!successful)
+ return;
// To avoid CSS transitions causing flickering when
// the first search result stays the same, we hide the
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]