Commit Graph

781 Commits

Author SHA1 Message Date
Daniel Büchele
133788380e prevent unnecessary rerenders
Summary:
Updates of the redux store caused rerendering of UI components, even without the acutal UI changing. This diff ensures the UI is only updated, when

The PluginContainer received all plugin states and selected the pluginState of the active plugin to pass it down to the plugin. However, this caused a rerender everytime a pluginState changed (even if the plugin was in the background).

This diff moves the selection of the active plugin to the `connect`-function and only passes the state of the active plugin into the container. This makes sure the plugin rerenders only if it's own state changes.

The main sidebar displays the number of notifications. Therefore, it was passed the array of notifications. However, this array is regenerated, everytime a new notification **might** be triggered.

Now, the number of notifications is calculated in the `connect`-method and only the number itself is passed into the component. This makes sure the sidebar is only rerendered, when the actual number of notifications changes.

Reviewed By: passy

Differential Revision: D13276096

fbshipit-source-id: bf1e6c4a186f7a1cf7f7427cd3523b5b71eb003a
2018-11-30 09:39:28 -08:00
Daniel Büchele
34e75c3c5f GK failing log message
Summary: When a plugin has no gatekeeper defined, an incorrect warning was logged, saying that if fails the gatekeeper "undeinfed"

Reviewed By: jknoxville

Differential Revision: D13275803

fbshipit-source-id: 9ae5ed55031cc6a636c7c5ffa23bdd059a8ed35f
2018-11-30 09:39:28 -08:00
Pritesh Nandgaonkar
3183e56560 Add crash reporter plugin to wilde with a gatekeeper
Summary: Adds crash reporter plugin in wilde under a gatekeeper `flipper_crash_reporter_plugin`. By default all the employees will be part of this gatekeeper

Reviewed By: passy

Differential Revision: D13258265

fbshipit-source-id: 1baa2a342f492781d8fb3e86c2a30140537c23f1
2018-11-30 07:19:46 -08:00
John Knox
28e2190635 Improve "Connect to desktop" diagnostic step
Summary:
This does two things:
1. Change "Connect to desktop" to say which connection it's establishing instead, which makes it clearer what's actually happening. This step really does mean establishing a connection, because what happens during that connection is asynchronous after this step completes.
2. Call step->complete() after certificate exchange connection is established. This wasn't happening before, so you'd always get "[Failed] Connect to desktop" even after a successful cert exchange.

Reviewed By: priteshrnandgaonkar

Differential Revision: D13256783

fbshipit-source-id: 5e8e3a54f52d2e0adbde4c6d82d1acc840f1eb59
2018-11-30 07:04:10 -08:00
John Knox
f15fe48fa9 Clean on-device sonar dir between certificate exchanges
Summary:
During certificate exchange, the mobile device creates a public/private key pair, and then requests a certificate from flipper to match it's public key.

Flipper responds with the cert and it's written to the sonar dir along side the key pair files.

If certificate exchange happens again for any reason, the mobile device will regenerate the key pair and request a new cert. If for any reason that cert never arrives, then the device is in a state where it has the new key pair, but the old certificate that doesn't match its new credentials. This would never work, but it means you get a strange SSL error because you're using inconsistent files.

To improve error messaging, I'm making the client wipe all files before starting the certificate exchange step, so you should never get key/cert mismatches. Now the device can tell it doesn't have all the necessary files and won't even attempt to connect until it does.

Reviewed By: passy

Differential Revision: D13256369

fbshipit-source-id: 28f3cb5ba5938c17f01294683ba86c418f651376
2018-11-30 06:23:40 -08:00
Pritesh Nandgaonkar
fd022e3c73 Improvise UI of crash reporter plugin
Summary:
- New improved UI
- Instead of sending the callstack as a string from android, now sending it as an array
- Deeplink to Logs support just for android. In iOS crash is not automatically logged in Logs plugin, atleast thats what happens in sample app

Reviewed By: jknoxville

Differential Revision: D13216477

fbshipit-source-id: d8b77549c83572d0442e431ce88a8f01f42c9565
2018-11-30 05:28:46 -08:00
Pritesh Nandgaonkar
d37fa7ba95 Change crash reporter plugin to send callstack array
Summary: Change crash reporter plugin to send callstackas an array instead of string

Reviewed By: jknoxville

Differential Revision: D13254853

fbshipit-source-id: 0baefb3eb6d3afc38d0c6acc7840ddc981230f9d
2018-11-29 09:15:40 -08:00
John Knox
b635b7e4aa Add date and time check to troubleshooting docs (#336)
Summary:
Flipper uses SSL between device and computer.  If, for example, the time on the mobile device is outdated. The server cert on desktop may appear to be from the future, leading to the connection being rejected.
Pull Request resolved: https://github.com/facebook/flipper/pull/336

Reviewed By: danielbuechele

Differential Revision: D13234612

Pulled By: jknoxville

fbshipit-source-id: 5eccc3abc763deb5bce3520d880a522a9a32ec86
2018-11-29 09:07:02 -08:00
John Knox
54d09aa951 Fix open source yarn start
Summary: The fb-stubs transform is getting applied when it shouldn't. Fix it by only applying it if src/fb exists.

Reviewed By: danielbuechele

Differential Revision: D13236217

fbshipit-source-id: 940def377839d16f34c49504948cb062916a3d6a
2018-11-29 08:50:24 -08:00
Daniel Abramowitz
ec1e977084 Fix "invalid weak map key" error when nodes in the layout inspector are empty strings
Summary: When nodes didn't have any metadata, the data was an empty string, which fails json parsing. This causes data be passed to the InspectorSidebarSection as ''. The weak map inside that component expects data to be an object, not a string, and crashes if it's actually a string. This will ensure that data is always an object.

Reviewed By: jknoxville

Differential Revision: D13109384

fbshipit-source-id: 469a1b5c1c00130ef37636bf7c6796b2463fb34b
2018-11-29 08:19:36 -08:00
John Knox
6c4467a03d Reflect CSR generation failure in diagnostic screen
Summary:
The CSR generation code is written in C-like code with no excpetions because so is openssl, with no RAII structures.
So we don't have fine-grained insight on what could go wrong, but at least if it fails altogether we should error.

Reviewed By: passy

Differential Revision: D13233725

fbshipit-source-id: 75cb3c21144b591947f686b5ad529a14a011baa8
2018-11-29 07:03:18 -08:00
Pritesh Nandgaonkar
14431e6b76 Make crash reporter plugin device only
Summary: Makes a crash reporter plugin as a device plugin

Reviewed By: passy

Differential Revision: D13203954

fbshipit-source-id: 02ef2aff05d5a240eaff588f9b515d3d610fc182
2018-11-29 06:59:16 -08:00
Pascal Hartig
7ffdb36cc5 v0.12.1-SNAPSHOT
Summary: Pull Request resolved: https://github.com/facebook/flipper/pull/335

Reviewed By: priteshrnandgaonkar

Differential Revision: D13213961

Pulled By: passy

fbshipit-source-id: d9c1d107dc9fb947babedfe319942398cc7b7e3f
2018-11-28 03:47:15 -08:00
John Knox
553322e61f Check devices in connection test
Summary:
Previously this was checking that a client can successfully connect.
But that's useless for a user if flipper doesn't also detect the device running the app, or nothing will be shown on screen.

This checks that the device is also known about.

I've removed the `done.fail()` because if this gets called, you lose any failed expect messages.

Reviewed By: passy

Differential Revision: D13194856

fbshipit-source-id: 5461dc1bedb2f9af80ad0dad6780fc25a428db17
2018-11-27 07:50:13 -08:00
Pritesh Nandgaonkar
912d3c4bcb FlipperClient tests on iOS
Summary:
This diff adds few tests for flipper client on iOS side. This tests are similar to the ones which exists in xplat but this tests the iOS side of flipper client.

Following tests are added

- connect , disconnect block called on plugin
- background plugin activated before init method
- crash getting suppressed

Reviewed By: jknoxville

Differential Revision: D13167637

fbshipit-source-id: 6c21d5cf2f08e7e3c17ecacbf3badfbde80fb5d1
2018-11-26 07:56:13 -08:00
Pritesh Nandgaonkar
bf3be3e16c Wrap flipper client methods to avoid crash
Summary: Wraps flipper client methods to avoid crash. Also added a tests which makes sure that malcious plugin cannot cause a crash

Reviewed By: jknoxville

Differential Revision: D13153277

fbshipit-source-id: ac21731fa3c4eb447f189e61f61b9e83aad91e13
2018-11-26 07:56:13 -08:00
Pritesh Nandgaonkar
37c973d0c9 Crash reporting plugin android (#328)
Summary:
This PR adds the barebone of a crash reporting plugin in android. Since there is no easy way to stack the PR's in git, creating a new PR, but this depends on the [iOS PR](https://github.com/facebook/flipper/pull/322)
Pull Request resolved: https://github.com/facebook/flipper/pull/328

Reviewed By: jknoxville, passy

Differential Revision: D13137447

Pulled By: priteshrnandgaonkar

fbshipit-source-id: 3b86cebbb1ea01601405dd7ba58e1caa2b506065
2018-11-26 03:43:26 -08:00
Pritesh Nandgaonkar
d475a50f2a Crash reporter plugin
Summary: iOS side of crash reporter plugin

Reviewed By: jknoxville

Differential Revision: D13176725

fbshipit-source-id: be104958c5e26aa67709a33ef43c0b99600ca2b7
2018-11-26 03:43:26 -08:00
Pritesh Nandgaonkar
543bc6c4fb Crashreporter Plugin
Summary: Desktop side of Crash reporter plugin

Reviewed By: jknoxville

Differential Revision: D13176724

fbshipit-source-id: d77b86b2bd9c78c0626f2e3b8c0057227d75e2b2
2018-11-26 03:43:26 -08:00
Pascal Hartig
19485d076b Flipper Release: v0.12.0
Summary:
- Docs for UI components are now automatically published: https://fbflipper.com/docs/ui-components.html
- Stop caching source files in dev mode: ad98ba3235
- `createTablePlugin` now uses persisted State: db42e8e970
- HTML in network responses now gets formatted: a56d7d5d72
- Notification filters are persisted between sessions: 9fb3a56303
- Prevent Flipper SDK crashes from bringing down Android apps: ddbb3c7f89
- Fix Android devices from not showing up: a6765deec6

Full commit log since the last release available here: https://github.com/facebook/flipper/compare/v0.11.1...v0.12.0

Reviewed By: jknoxville

Differential Revision: D13153344

fbshipit-source-id: e67e2ac9469b2a5ef58d1963a38b1c8f448bd4fb
2018-11-23 16:58:39 -08:00
Pascal Hartig
572881ba81 Bump Litho version
Summary: This unblocks the release.

Reviewed By: jknoxville

Differential Revision: D13176805

fbshipit-source-id: eaf8890ac16054efe837a81665b323de3db7d085
2018-11-23 07:49:58 -08:00
Pascal Hartig
25c6323b9e Move last plugin to plugin dsl
Summary:
Last one that's available through the DSL. The Android
plugin still isn't.

Reviewed By: jknoxville

Differential Revision: D13176791

fbshipit-source-id: 6684812bb4fee1dcd9db1503e660fb019160224e
2018-11-23 07:49:58 -08:00
John Knox
d8d40ae49b Log when client connects for an unknown device
Summary:
We've seen this happen sometimes, e.g. when adb fails and we aren't showing any android devices, but the sdk still manages to connect.

When we detect this, log an error so we can track how often it occurs.

Reviewed By: passy

Differential Revision: D13175639

fbshipit-source-id: b0f79b77ac04ad804e56448b3696a3ffeb30631e
2018-11-23 06:32:45 -08:00
John Knox
1c1905b5a8 Log client setup errors
Summary: Get client setup failure metrics

Reviewed By: passy

Differential Revision: D13175638

fbshipit-source-id: 97f6fddab850654dbe52c1da09ba8d1ca4873d49
2018-11-23 06:32:45 -08:00
Pascal Hartig
cadda77d74 Move versions plugin to plugin DSL (#331)
Summary:
Doesn't change how it works, but using the new recommended mechanism for loading plugins.
Pull Request resolved: https://github.com/facebook/flipper/pull/331

Reviewed By: jknoxville

Differential Revision: D13167476

Pulled By: passy

fbshipit-source-id: ac0ae925f5780136ce5c1fcb666faa79c19e049c
2018-11-23 06:18:44 -08:00
Pritesh Nandgaonkar
08cdb5e2e8 Fix improper plugin id assignment
Summary: This diff fixes the improper plugin id getting assigned to the variable which lead to notifications not getting shown. The client id has `#` so pluginId is no longer the second argument when one splits the string by `#`. This diff fixes this problem.

Reviewed By: passy

Differential Revision: D13176776

fbshipit-source-id: cd5bdc33c61485e3cdc2f2dbcc615980c39c8b8c
2018-11-23 05:48:11 -08:00
Pritesh Nandgaonkar
8327e1ff71 Added background plugin tests in flipper client
Summary: Added tests for flipper client which makes sure that didconnect is called in the case of background plugin. It also checks the case of a non background plugin.

Reviewed By: jknoxville

Differential Revision: D13152686

fbshipit-source-id: 7850f66a42d669243f656a1e1c26584869ee919f
2018-11-23 03:48:36 -08:00
John Knox
ca1f0202d7 Add retries around android device watching
Summary: Retry up to 5 times with exponential backoff.

Reviewed By: passy

Differential Revision: D13138244

fbshipit-source-id: 94c68b87aa281cfc3239b0bb8bdd75a2e0d7edc7
2018-11-22 06:39:58 -08:00
Pascal Hartig
9e6a86923a Fix yarn lint (#332)
Summary:
Eslint / prettier are unhappy with the formatting of the FlowFixMe
comment, but the suggested solution is really ugly. Let's disable
the lint for now and remove this once it's addressed.
Pull Request resolved: https://github.com/facebook/flipper/pull/332

Reviewed By: jknoxville

Differential Revision: D13156552

Pulled By: passy

fbshipit-source-id: 680d151ea1022912e0e4a83fa42dc51005631c30
2018-11-22 06:34:09 -08:00
John Knox
bbdbb94415 Fix network plugin bug
Summary:
Some network requests are yielding error: e.getMessage() is not a function.
It shouldn't be .getMessage(), it should be .message

Reviewed By: priteshrnandgaonkar

Differential Revision: D13137334

fbshipit-source-id: 72c782376c8e62a05c5e9ce1b956566ce1fc5bf0
2018-11-20 06:43:58 -08:00
mtfum
67dd1fc596 Remove unnecessary semicolon (#327)
Summary:
I updated to remove unnecessary semicolon in AppDelegate.swift, SampleSwift
Pull Request resolved: https://github.com/facebook/flipper/pull/327

Reviewed By: priteshrnandgaonkar

Differential Revision: D13121242

Pulled By: jknoxville

fbshipit-source-id: 9e848b2def84c5b969c9167abc556fe18ccecdbc
2018-11-20 02:12:18 -08:00
Panagiotis Vekris
e380fa7a08 Flow v0.86.0 in xplat/sonar
Summary: allow-large-files

Reviewed By: gabelevi, dsainati1

Differential Revision: D13105210

fbshipit-source-id: 462af926206a10618a725531f2e62da9f3291fc0
2018-11-19 12:14:51 -08:00
John Knox
018718244a Fix adb client use of promise.resolve
Summary: This was misusing promise.resolve by calling it before the result is produced, meaning there was a race condition. It would also resolve as success even if listDevices failed.

Reviewed By: passy

Differential Revision: D13121173

fbshipit-source-id: f120a1b199d1e3168059c537461f65a8dc125a94
2018-11-19 09:47:04 -08:00
John Knox
a6765deec6 Fix missing android devices bug
Summary:
Finally tracked down this bug that's been annoying me.

If you start flipper while the adb daemon is not running, then flipper will start the daemon, but it won't wait for it to have finished starting before telling the client to watch for devices. This is a race condition, and in practice never seems to work.

To avoid this, I'm calling `adb devices` on the client and waiting for it to complete before doing anything else. This forces it to wait for the daemon to start up if it hasn't already, and if it has then it instantly returns.

Reviewed By: passy

Differential Revision: D13101963

fbshipit-source-id: b85bed24751ce5c8efdfc6e841400e4db2580ab0
2018-11-19 04:48:00 -08:00
Pritesh Nandgaonkar
ddbb3c7f89 Make android sdk crashless
Summary: This diff wraps all the important places where the java code is called in a try-catch block in order to avoid flipper bringing down an app.

Reviewed By: jknoxville

Differential Revision: D12839504

fbshipit-source-id: 4711bccbe6d50094d76ed7ecd1eb652cefc2a090
2018-11-19 04:29:34 -08:00
Pritesh Nandgaonkar
bcf6479a5e Solve fbjni bug to allow catching Java exception in JNI
Summary: This diff just adds the changes done here D12829542 for the OSS

Reviewed By: jknoxville

Differential Revision: D12839582

fbshipit-source-id: 0bdfa9e8e661309454709819af703499cd540ab4
2018-11-19 04:29:34 -08:00
Pritesh Nandgaonkar
88b5f28b09 Adds stub podspec files to reserve the name on cocoapods master repo (#330)
Summary:
This PR adds a stub podspec files which will be pushed to cocoapods master repo to reserve our project name on cocoapods master repo. This PR follows the suggestion given by KrauseFx in #132 132. I have reserved the name of [Flipper](https://cocoapods.org/pods/Flipper) and [FlipperKit](https://cocoapods.org/pods/FlipperKit) on cocoapods with these stub podspecs.
Pull Request resolved: https://github.com/facebook/flipper/pull/330

Reviewed By: passy

Differential Revision: D13118301

Pulled By: priteshrnandgaonkar

fbshipit-source-id: 754a69ee9577c1357cf3284b5c89143d46f69c87
2018-11-19 04:25:14 -08:00
Pritesh Nandgaonkar
6e1c1d57f9 Adds example flipper plugin in swift sample app (#329)
Summary:
This PR adds the example flipper plugin in swift sample app. Example flipper plugin acts as an example for the plugin authors. The example flipper plugin was already added in an objective c example but the swift sample app didn't have it.
Pull Request resolved: https://github.com/facebook/flipper/pull/329

Reviewed By: jknoxville

Differential Revision: D13085611

Pulled By: priteshrnandgaonkar

fbshipit-source-id: d86cca43e95592ecca8d9991d170e62170b8217b
2018-11-19 01:53:00 -08:00
John Knox
ed93c98313 Disable subdescriptors to fix layout plugin
Summary:
Bug report here: https://fb.facebook.com/groups/230455004101832/permalink/519062535241076/

This has broken layout plugin when NT components are used.
Removing the subdescriptors as a quick fix. At the moment, this means removing the new NT features.

Reviewed By: priteshrnandgaonkar

Differential Revision: D13103790

fbshipit-source-id: 57c10a0a07507aaba0cd7a20d1b548470203f2f6
2018-11-16 11:33:04 -08:00
John Knox
7821b6b5a9 Sort uninitialized devices in redux state
Summary: Stops them from jumping around if they try to connect more than once.

Reviewed By: passy

Differential Revision: D13084056

fbshipit-source-id: 803538298c45b9c28e5116f072518e8632b0f1cf
2018-11-16 03:40:48 -08:00
Pascal Hartig
093ab1fe57 Add report bug callback for diagnostics screen
Summary:
Adds an optional interface that, when implemented, adds
a "Report Bug" button to the top of the screen.

This is a weird Android-ism that's sadly still the
recommended way of providing hooks into Fragments:
https://developer.android.com/guide/components/fragments#EventCallbacks

In order to keep things vanilla here, let's follow that pattern.

Reviewed By: jknoxville

Differential Revision: D13045578

fbshipit-source-id: 1506fcfc630c2d1183d7d1eaf470d23954e0c097
2018-11-15 12:23:12 -08:00
Pascal Hartig
85206e4d9b Turn FlipperDiagnosticsActivity into a Fragment
Summary:
This allows passing in some options in an easy way, like a callback
that contains all debug information for a bug report.

Reviewed By: jknoxville

Differential Revision: D13045282

fbshipit-source-id: 5698228ee9aef31d406313047b6836dc928448cf
2018-11-15 12:23:12 -08:00
Panagiotis Vekris
b2b27b774e Back out "Flow v0.86.0 in xplat/sonar"
Summary: Original commit changeset: f0122c8c6d60

Reviewed By: avielg

Differential Revision: D13083312

fbshipit-source-id: 4b77fda5221feff5c721bb8a509b1350d60046d5
2018-11-15 08:24:00 -08:00
Daniel Büchele
0b43d219c3 Adding test converage for plugin loading
Summary: Adds test for the plugin reducer and dispatcher

Reviewed By: jknoxville, passy

Differential Revision: D13082652

fbshipit-source-id: 4af2c7721c4d88abbd332d610ff71d5db78e721c
2018-11-15 07:30:05 -08:00
Daniel Büchele
1edc91512d add testing GKs
Summary: Adding two GKs (one failing, one passing) to allow the testing of gatekeeper functionality. This is used in the next diff.

Reviewed By: jknoxville

Differential Revision: D13082651

fbshipit-source-id: c6d8ef484564c8ae8b4c107de5643c700f696ad5
2018-11-15 07:30:05 -08:00
Daniel Büchele
7747a0714d plugin redux
Summary:
Plugins were loaded in `/plugins/index.js` which was loaded once at launch of the app. This moves the list of available plugins to redux. This way, plugins can be dynamically added. The redux store keeps to Maps of plugins (devicePlugins and clientPlugins) with their ID as key:

```
  devicePlugins: Map<string, Class<FlipperDevicePlugin<>>>,
  clientPlugins: Map<string, Class<FlipperPlugin<>>>,
```

On launch of the app, all plugins bundled with the app and the one found in `pluginsPath` are dynamically added.

This changes now allows to add new plugins at any time. All components that need to know which plugins are available (e.g. the sidebar) are connected to the redux store. This way, they will automatically update, whenever a new plugin is added.

- add `plugins` to the redux store to keep the list of available plugins
- add a plugins dispatcher, responsible for loading the plugins on launch
- connecting all React components that imported `plugins/index.js` before to the redux store to get the plugins from there.
- moved the updating of the MenuBar to the plugins dispatcher as it needs to update whenever a new plugin is added.

Reviewed By: jknoxville, passy

Differential Revision: D12449236

fbshipit-source-id: 6ef3e243e2c80443614b901ccbfde485fcb4301c
2018-11-15 07:30:05 -08:00
Pritesh Nandgaonkar
e02420ac78 Make android project compile with new gradle and build tools
Summary:
If this is not done. I get
```
Could not find aapt2-proto.jar (com.android.tools.build:aapt2-proto:0.3.1).
Searched in the following locations:
    https://jcenter.bintray.com/com/android/tools/build/aapt2-proto/0.3.1/aapt2-proto-0.3.1.jar
```
I follwed the suggestion given on [stack overflow](https://stackoverflow.com/questions/52944598/could-not-find-aapt2-proto-jar)

Reviewed By: jknoxville

Differential Revision: D12839581

fbshipit-source-id: aa02620c7e4c52899b2c2c4805fd8a6f168d946a
2018-11-15 06:37:55 -08:00
Felix Krause
01ef5c84d2 Fix Ruby Podfile code style in docs (#324)
Summary:
2 spaces, and space before and after the `+`
Pull Request resolved: https://github.com/facebook/flipper/pull/324

Reviewed By: jknoxville

Differential Revision: D13082547

Pulled By: priteshrnandgaonkar

fbshipit-source-id: b6053ebde16a1f7f953704e0791622d3d59cc962
2018-11-15 06:24:32 -08:00
John Knox
ff3977da77 Show connecting spinner
Summary:
First step in visualising the connection setup process.
Just a spinner while cert exchange is happening, so it doesn't look like nothing is happening.

Reviewed By: passy

Differential Revision: D13062514

fbshipit-source-id: a0692821025f42f4fe4af86faf059d4719008f25
2018-11-15 04:36:40 -08:00
John Knox
866cb72124 Put connection setup state in redux
Summary: Puts the connection state into redux so we have more visibility on what's happening in bug reports and in general allowing us to display it on screen.

Reviewed By: passy

Differential Revision: D13060455

fbshipit-source-id: c79b4b7d6a1155d86128a5d8d1174ead9e4514ae
2018-11-15 04:36:40 -08:00