diff --git a/src/main/createWindow.js b/src/main/createWindow.js
index 4d4a5bc25..976e8352b 100644
--- a/src/main/createWindow.js
+++ b/src/main/createWindow.js
@@ -14,7 +14,7 @@ export default appState => {
     defaultHeight: height,
   });
 
-  let windowConfiguration = {
+  const windowConfiguration = {
     backgroundColor: '#44b098',
     minWidth: 950,
     minHeight: 600,
@@ -26,17 +26,13 @@ export default appState => {
     // If state is undefined, create window as maximized.
     width: windowState.width === undefined ? width : windowState.width,
     height: windowState.height === undefined ? height : windowState.height,
-  };
 
-  // Disable renderer process's webSecurity on development to enable CORS.
-  windowConfiguration = isDev
-    ? {
-        ...windowConfiguration,
-        webPreferences: {
-          webSecurity: false,
-        },
-      }
-    : windowConfiguration;
+    webPreferences: {
+      // Disable renderer process's webSecurity on development to enable CORS.
+      webSecurity: !isDev,
+      plugins: true,
+    },
+  };
 
   const rendererURL = isDev
     ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`
diff --git a/src/renderer/component/fileRender/view.jsx b/src/renderer/component/fileRender/view.jsx
index 8593280dc..18e2cb979 100644
--- a/src/renderer/component/fileRender/view.jsx
+++ b/src/renderer/component/fileRender/view.jsx
@@ -1,13 +1,14 @@
 // @flow
 import React from 'react';
 import LoadingScreen from 'component/common/loading-screen';
-// import ThreeViewer from 'component/threeViewer';
+import PdfViewer from 'component/viewers/pdfViewer';
 
 type Props = {
   mediaType: string,
   source: {
     filePath: string,
     fileType: string,
+    downloadPath: string,
   },
   currentTheme: string,
 };
@@ -23,7 +24,14 @@ class FileRender extends React.PureComponent<Props> {
       // Add routes to viewer...
     };
 
-    const viewer = mediaType && source && mediaTypes[mediaType];
+    // Supported fileType
+    const fileTypes = {
+      pdf: <PdfViewer {...viewerProps} />,
+      // Add routes to viewer...
+    };
+
+    const { fileType } = source;
+    const viewer = mediaType && source && (mediaTypes[mediaType] || fileTypes[fileType]);
     const unsupportedMessage = "Sorry, looks like we can't preview this file.";
     const unsupported = <LoadingScreen status={unsupportedMessage} spinner={false} />;
 
diff --git a/src/renderer/component/video/internal/player.jsx b/src/renderer/component/video/internal/player.jsx
index ab97b62f0..76c1a9fe5 100644
--- a/src/renderer/component/video/internal/player.jsx
+++ b/src/renderer/component/video/internal/player.jsx
@@ -11,7 +11,7 @@ import LoadingScreen from 'component/common/loading-screen';
 
 class VideoPlayer extends React.PureComponent {
   static MP3_CONTENT_TYPES = ['audio/mpeg3', 'audio/mpeg'];
-  static FILE_MEDIA_TYPES = ['3D-file', 'e-book', 'comic-book'];
+  static FILE_MEDIA_TYPES = ['e-book', 'comic-book', 'document', '3D-file'];
 
   constructor(props) {
     super(props);
@@ -192,6 +192,7 @@ class VideoPlayer extends React.PureComponent {
       }
       // File to render
       const fileSource = {
+        downloadPath,
         filePath: url,
         fileType: path.extname(filename).substring(1),
       };
diff --git a/src/renderer/component/video/view.jsx b/src/renderer/component/video/view.jsx
index 3fc373630..569678838 100644
--- a/src/renderer/component/video/view.jsx
+++ b/src/renderer/component/video/view.jsx
@@ -1,11 +1,10 @@
 // @flow
 import React from 'react';
-import { Lbry } from 'lbry-redux';
 import classnames from 'classnames';
 import type { Claim } from 'types/claim';
+import LoadingScreen from 'component/common/loading-screen';
 import VideoPlayer from './internal/player';
 import VideoPlayButton from './internal/play-button';
-import LoadingScreen from 'component/common/loading-screen';
 
 const SPACE_BAR_KEYCODE = 32;
 
@@ -40,6 +39,7 @@ type Props = {
   obscureNsfw: boolean,
   play: string => void,
   searchBarFocused: boolean,
+  mediaType: string,
 };
 
 class Video extends React.PureComponent<Props> {
@@ -123,12 +123,12 @@ class Video extends React.PureComponent<Props> {
       mediaPosition,
       className,
       obscureNsfw,
+      mediaType,
     } = this.props;
 
     const isPlaying = playingUri === uri;
     const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0;
     const shouldObscureNsfw = obscureNsfw && metadata && metadata.nsfw;
-    const mediaType = (fileInfo && Lbry.getMediaType(null, fileInfo.file_name)) || Lbry.getMediaType(contentType);
 
     let loadStatusMessage = '';
 
diff --git a/src/renderer/component/viewers/pdfViewer.jsx b/src/renderer/component/viewers/pdfViewer.jsx
new file mode 100644
index 000000000..80c4e94ab
--- /dev/null
+++ b/src/renderer/component/viewers/pdfViewer.jsx
@@ -0,0 +1,24 @@
+// @flow
+import React from 'react';
+
+type Props = {
+  source: {
+    fileType: string,
+    filePath: string,
+    downloadPath: string,
+  },
+};
+
+class PdfViewer extends React.PureComponent<Props> {
+  render() {
+    const { source } = this.props;
+    return (
+      <webview
+        className="file-render__viewer"
+        src={`chrome://pdf-viewer/index.html?src=file://${source.downloadPath}`}
+      />
+    );
+  }
+}
+
+export default PdfViewer;
diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx
index 990d4b77c..4d4e3f1b7 100644
--- a/src/renderer/page/file/view.jsx
+++ b/src/renderer/page/file/view.jsx
@@ -28,6 +28,7 @@ type Props = {
   metadata: {
     title: string,
     thumbnail: string,
+    file_name: string,
     nsfw: boolean,
   },
   contentType: string,
@@ -49,7 +50,7 @@ type Props = {
 
 class FilePage extends React.Component<Props> {
   static PLAYABLE_MEDIA_TYPES = ['audio', 'video'];
-  static PREVIEW_MEDIA_TYPES = ['text', 'image', '3D-file'];
+  static PREVIEW_MEDIA_TYPES = ['text', 'image', 'document', '3D-file'];
 
   constructor(props: Props) {
     super(props);
@@ -110,15 +111,17 @@ class FilePage extends React.Component<Props> {
       navigate,
       autoplay,
       costInfo,
+      fileInfo,
     } = this.props;
 
     // File info
-    const { title, thumbnail, filename } = metadata;
+    const { title, thumbnail } = metadata;
     const { height, channel_name: channelName, value } = claim;
     const { PLAYABLE_MEDIA_TYPES, PREVIEW_MEDIA_TYPES } = FilePage;
     const isRewardContent = rewardedContentClaimIds.includes(claim.claim_id);
     const shouldObscureThumbnail = obscureNsfw && metadata.nsfw;
-    const mediaType = Lbry.getMediaType(contentType, filename);
+    const fileName = fileInfo ? fileInfo.file_name : null;
+    const mediaType = fileName ? Lbry.getMediaType(null, fileName) : Lbry.getMediaType(contentType);
     const showFile =
       PLAYABLE_MEDIA_TYPES.includes(mediaType) || PREVIEW_MEDIA_TYPES.includes(mediaType);
     const channelClaimId =
@@ -154,7 +157,7 @@ class FilePage extends React.Component<Props> {
           </section>
         ) : (
           <section className="card">
-            {showFile && <Video className="content__embedded" uri={uri} />}
+            {showFile && <Video className="content__embedded" uri={uri} mediaType={mediaType} />}
             {!showFile &&
               (thumbnail ? (
                 <Thumbnail shouldObscure={shouldObscureThumbnail} src={thumbnail} />
@@ -164,7 +167,9 @@ class FilePage extends React.Component<Props> {
                     'content__empty--nsfw': shouldObscureThumbnail,
                   })}
                 >
-                  <div className="card__media-text">{__('This content is not playable.')}</div>
+                  <div className="card__media-text">
+                    {__("Sorry, looks like we can't preview this file.")}
+                  </div>
                 </div>
               ))}
             <div className="card__content">
diff --git a/src/renderer/scss/component/_file-render.scss b/src/renderer/scss/component/_file-render.scss
index c78bb4690..7a9d1cf2a 100644
--- a/src/renderer/scss/component/_file-render.scss
+++ b/src/renderer/scss/component/_file-render.scss
@@ -11,6 +11,7 @@
   overflow: hidden;
 
   .file-render__viewer {
+    margin: 0;
     width: 100%;
     height: 100%;
     background: black;