Fix fallback in Metadata Cache.

According to comments, setting null to a property should cause a fallback to
other metadata providers, however this didn't work.

This patch instead of setting null doesn't set the property at all, and as
a result, the next provider is queried.

To avoid an endless refetching metadata if it's not available, the property
value is set to null if no other providers are available.

Also, to avoid an endless loop caused by observers, the observers are called
after all providers are queried and the missing property values are set to
null. Basically, endBatchUpdates() is called after all computing is done,
so no refetching will be invoked by observers.

TEST=Tested manually.
BUG=428213

Review URL: https://codereview.chromium.org/687073002

Cr-Commit-Position: refs/heads/master@{#301809}
1 file changed