Add onBackendCreated callback to Viewer

Also removes fWidth and fHeight from Window and instead
calls into WindowContent to get these values.

BUG=skia:

Change-Id: I72ee506004b7da73db9abb607a3bc82edfcf7d43
Reviewed-on: https://skia-review.googlesource.com/8795
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Yuqian Li <liyuqian@google.com>
diff --git a/tools/viewer/SampleSlide.cpp b/tools/viewer/SampleSlide.cpp
index 00ee534..93a495e 100644
--- a/tools/viewer/SampleSlide.cpp
+++ b/tools/viewer/SampleSlide.cpp
@@ -21,22 +21,25 @@
 SampleSlide::~SampleSlide() {}
 
 void SampleSlide::draw(SkCanvas* canvas) {
+    SkASSERT(fView);
     fView->draw(canvas);
 }
 
 void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) {
-    fView = (*fViewFactory)();
+    fView.reset((*fViewFactory)());
     fView->setVisibleP(true);
     fView->setClipToBounds(false);
     fView->setSize(winWidth, winHeight);
 }
 
 void SampleSlide::unload() {
-    fView->unref();
-    fView = nullptr;
+    fView.reset();
 }
 
 bool SampleSlide::onChar(SkUnichar c) {
+    if (!fView) {
+        return false;
+    }
     SkEvent evt(gCharEvtName);
     evt.setFast32(c);
     return fView->doQuery(&evt);